Affected versions of sequelize
cast arrays to strings and fail to properly escape the resulting SQL statement, resulting in a SQL injection vulnerability.
In Postgres, SQLite, and Microsoft SQL Server there is an issue where arrays are treated as strings and improperly escaped.
Example Query:
database.query('SELECT * FROM TestTable WHERE Name IN (:names)', {
replacements: {
names: directCopyOfUserInput
}
});
If the user inputs the value of :names
as:
["test", "'); DELETE TestTable WHERE Id = 1 --')"]
The resulting SQL statement will be:
SELECT Id FROM Table WHERE Name IN ('test', '\'); DELETE TestTable WHERE Id = 1 --')
As the backslash has no special meaning in PostgreSQL, MSSQL, or SQLite, the statement will delete the record in TestTable with an Id of 1.
Update to version 3.20.0 or later.
{ "nvd_published_at": null, "cwe_ids": [ "CWE-89" ], "severity": "HIGH", "github_reviewed": true, "github_reviewed_at": "2020-06-16T21:28:12Z" }