Sequelize: SQL Injection (Oracle DB)
cve-program · CVE-2026-69240
PublishedSequelize is a Node.js ORM tool. Prior to 6.37.4, SQL injection is possible with strings only if dialect is set to oracle. The escape function defined in sql-string.js does not escape quotes if the value starts with TO_TIMESTAMP or TO_DATE. In the Oracle dialect, when val is a string and starts with TO_TIMESTAMP or TO_DATE, escape returns val directly instead of replacing single quotes. An attacker can inject arbitrary SQL expressions through an application value that reaches this escape path. This issue is fixed in version 6.37.4.
Read the publisher's advisoryeuvd · EUVD-2026-52429
PublishedSequelize is a Node.js ORM tool. Prior to 6.37.4, SQL injection is possible with strings only if dialect is set to oracle. The escape function defined in sql-string.js does not escape quotes if the value starts with TO_TIMESTAMP or TO_DATE. In the Oracle dialect, when val is a string and starts with TO_TIMESTAMP or TO_DATE, escape returns val directly instead of replacing single quotes. An attacker can inject arbitrary SQL expressions through an application value that reaches this escape path. This issue is fixed in version 6.37.4.
Read the publisher's advisorynvd · CVE-2026-69240
PublishedSequelize is a Node.js ORM tool. Prior to 6.37.4, SQL injection is possible with strings only if dialect is set to oracle. The escape function defined in sql-string.js does not escape quotes if the value starts with TO_TIMESTAMP or TO_DATE. In the Oracle dialect, when val is a string and starts with TO_TIMESTAMP or TO_DATE, escape returns val directly instead of replacing single quotes. An attacker can inject arbitrary SQL expressions through an application value that reaches this escape path. This issue is fixed in version 6.37.4.
Read the publisher's advisoryosv · GHSA-v8fg-2rw7-q452
Published### Summary SQL Injection is possible with strings only **if dialect is set to `oracle`**. The vulnerability was confirmed on Sequelize v6.37.3. ### Details The `escape` function defined in `sql-string.js` does not escape quotes if the value starts with `TO_TIMESTAMP` or `TO_DATE`. ```javascript } else if (dialect === 'oracle' && typeof val === 'string') { if (val.startsWith('TO_TIMESTAMP') || val.startsWith('TO_DATE')) { return val; } val = val.replace(/'/g, "''"); } ``` ### PoC Suppose the application has the following code: ```javascript var result = await models.Student.findOne({ where: { firstName: req.query.firstName } }); ``` An attacker can inject arbitrary sql expressions. `http://host/path?firstName=TO_DATE('0','Y')||'' OR 1=1--` The resulted SQL will be: ```SQL SELECT ... WHERE "Student"."firstName" = TO_DATE('0','Y')||'' OR 1=1-- ORDER BY "Student"."id" OFFSET 0 ROWS FETCH NEXT 1 ROWS ONLY; ``` ### Impact Data theft and tampering.
Read the publisher's advisoryAffected versions, risk and source history
Related advisories and sources
Publishers link these advisories through the identifiers shown below. A shared identifier or date alone does not tell you whether your software is affected or whether the advisories describe the same cause.
CVE-2026-69240 · CVE overview and exploitation status
cve-program · CVE-2026-69240
- https://github.com/sequelize/sequelize/security/advisories/GHSA-v8fg-2rw7-q452
- https://github.com/sequelize/sequelize/commit/5deadd2410ae9136a21fb652db206d27bb715f26
- https://github.com/sequelize/sequelize/releases/tag/v6.37.4
euvd · EUVD-2026-52429
- https://github.com/sequelize/sequelize/security/advisories/GHSA-v8fg-2rw7-q452
- https://github.com/sequelize/sequelize/commit/5deadd2410ae9136a21fb652db206d27bb715f26
- https://github.com/sequelize/sequelize/releases/tag/v6.37.4
nvd · CVE-2026-69240
- https://github.com/sequelize/sequelize/commit/5deadd2410ae9136a21fb652db206d27bb715f26
- https://github.com/sequelize/sequelize/releases/tag/v6.37.4
- https://github.com/sequelize/sequelize/security/advisories/GHSA-v8fg-2rw7-q452
osv · GHSA-v8fg-2rw7-q452
Related changes
Linked by CVE identifierNo related changes are available here.