Summary
CVE-2026-110911 is a critical SQL injection vulnerability (CWE-89) in the Wheels framework, affecting versions 1.1.8 through 4.1.1. Applications that pass request-supplied data to certain Wheels data-access APIs can be manipulated by unauthenticated remote attackers. The CVSS v3.1 base score is 9.8 (Critical).
Technical details
- Root cause: The framework quotes caller-supplied values and passes them through its WHERE parser. The parser incorrectly treats a doubled single quote (
'') as the end of a string literal instead of an escaped quote, so an attacker can break out of the literal and inject SQL. - Affected components: dynamic finders (e.g.
findOneByEmail(),findAllByUsername()), query builderwhere()methods, key-based lookups (findByKey,updateByKey,deleteByKey), and uniqueness validation checks. In versions 4.0.0–4.1.1,whereBetween()on string/date columns is also affected, including on MySQL/MariaDB with backslash escaping enabled. - Trigger conditions: The application passes request-supplied values to these APIs. The advisory gives the example
nomatch' OR email<>', which changes the query logic. Numeric columns are protected by validation. - Attack vector: Network, with no authentication or user interaction required.
- Impact: Authentication and password-reset bypass, row enumeration and data exfiltration, and manipulation of query logic through injected SQL.
Affected software
- Wheels 1.1.8 through 4.1.1 (inclusive)
whereBetween()issue: Wheels 4.0.0 through 4.1.1
Severity
- CVSS v3.1 base score: 9.8 (Critical)
- Vector:
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
Mitigation and recommended actions
- Immediate: Upgrade to Wheels 4.1.2. This version binds values as query parameters instead of quoting them into SQL strings.
- If you cannot patch yet: The vendor suggests the following workarounds:
- Validate and whitelist request values before passing them to these APIs.
- Use numeric primary key lookups where feasible.
- Use explicit parameter binding with
whereclauses.
- Review application code paths where request data reaches dynamic finders,
where(), key-based lookups, and uniqueness validations.

