Sploitus

Exploit for SQL Injection in Sequelizejs Sequelize

githubexploit Β· 2026-08-21

Exploit Code

README118 lines
## https://sploitus.com/exploit?id=3C366C70-5F3B-5ECB-876E-F3F1B2B87C3A
# CVE-2026-30951 Sequelize JSON Cast SQL Injection

**β˜… CVE-2026-30951 Sequelize ORM SQL Injection PoC β˜…**

https://github.com/user-attachments/assets/30b19211-890a-4780-acd9-04856ec98381

# Overview

> **CVE-2026-30951** is a **SQL Injection** vulnerability in **Sequelize v6**, a widely used Node.js ORM.
> 
> The vulnerability exists in JSON/JSONB `where` clause processing. When Sequelize parses a JSON path key containing `::`, the value after `::` is treated as a SQL cast type and is inserted into the generated SQL without proper validation.
> 
> If an attacker can control JSON object keys passed into a Sequelize `where` clause, they can manipulate the generated SQL query.

# Affected Versions

| Category | Version |
| --- | --- |
| **Vulnerable** | Sequelize **v6.x \ AS )
```

In vulnerable versions, `` is not safely escaped or restricted to a known-safe allowlist. This allows an attacker-controlled JSON key to break out of the cast expression and inject SQL.

### Dangerous Pattern

Any application pattern similar to the following may be vulnerable when using affected Sequelize versions:

```
app.post('/api/users/search', async (req, res) => {
  const users = await User.findAll({
    where: {
      metadata: req.body.filter
    }
  });

  res.json(users);
});
```

This is dangerous because the attacker controls not only JSON values, but also JSON object keys.

### Why This Matters

This vulnerability is especially dangerous because many developers assume ORM query builders automatically protect against SQL injection. In this case, the injection happens inside ORM-generated SQL, after the application has already passed structured JavaScript objects to Sequelize.

Depending on the application logic, exploitation may allow:

*   bypassing intended search filters
*   altering boolean query conditions
*   changing the behavior of ORM-generated SQL

This is fundamentally a **CWE-89: Improper Neutralization of Special Elements used in an SQL Command** issue.

## Scenario

```
+-------------------------------------------+
|                  Attacker                 |
+-------------------------------------------+
                      |
                      | Sends crafted JSON filter
                      | with malicious name:: key
                      v
+-------------------------------------------+
|        POST /api/users/search             |
+-------------------------------------------+
                      |
                      | Sequelize JSON where clause
                      | processes key containing ::
                      v
+-------------------------------------------+
|     Unescaped SQL cast type injection     |
+-------------------------------------------+
                      |
                      | Boolean condition manipulation
                      v
+-------------------------------------------+
|          SQL Injection Confirmed          |
+-------------------------------------------+
```

# Mitigation

*   Upgrade Sequelize to **6.37.8 or later**
*   Do not pass user-controlled objects directly into Sequelize JSON/JSONB `where` clauses
*   Reject or normalize user-controlled JSON keys before building ORM filters
*   Use whitelist-based filter construction instead of accepting arbitrary request body objects
*   Reject JSON keys containing SQL control syntax or cast separators such as `::` unless explicitly required
*   Prefer server-defined query fields, for example:

```
const allowedFilters = ['name', 'role', 'team', 'office', 'department'];

if (!allowedFilters.includes(req.body.field)) {
  throw new Error('Invalid filter field');
}
```

# Disclaimer

This repository is intended for security research, defensive validation, and educational use in controlled environments only.

Do not use this PoC against systems you do not own or do not have explicit permission to test.

# EQST Insight
We publish CVE and malware analysis once a month. If you're interested, please follow the links below to check out our publications.
- https://www.skshieldus.com/security-insights/reports?tab=eqst
- https://www.skshieldus.com/en/report?tab=eqst


# References

*   https://github.com/sequelize/sequelize/security/advisories/GHSA-6457-6jrx-69cr
*   https://nvd.nist.gov/vuln/detail/CVE-2026-30951
*   https://osv.dev/vulnerability/CVE-2026-30951
*   https://advisories.gitlab.com/npm/sequelize/CVE-2026-30951/
*   https://github.com/sequelize/sequelize