A SQL injection vulnerability exists in the Query Builder's deleteBatch() method. When deleteBatch() is used together with where() conditions, the bound values from the WHERE clause are substituted directly into the generated SQL with their escape flag ignored, so they are never escaped or quoted. If an application passes user-controlled input to where() before calling deleteBatch(), that input is interpreted as SQL rather than as a value, allowing SQL injection.
This affects only the deleteBatch() code path. Regular delete() operations escape where() binds correctly.
Upgrade to v4.7.4 or later.
If you cannot upgrade immediately:
where() when using deleteBatch().delete() with Query Builder binds instead of deleteBatch().onConstraint() rather than as separate user-controlled where() clauses.{
"cwe_ids": [
"CWE-89"
],
"github_reviewed": true,
"github_reviewed_at": "2026-08-07T18:22:59Z",
"nvd_published_at": "2026-07-31T06:16:31Z",
"severity": "CRITICAL"
}