Wheels framework: Authorization bypass via key lookup ignoring scopes
Summary
Wheels 4.0.0 through 4.1.2 (before 4.2.0) ignores configured model scope conditions in findByKey() and exists(key=). If an application takes the record key from a request and relies on scopes for ownership or tenant separation, an authenticated user can load and then modify or delete records belonging to another user or tenant. In production with error information disabled, exists(key=) returns true for out-of-scope keys instead of throwing an error.
Affected
- Wheels 4.0.0 through 4.1.2
- All versions from 4.0.0 up to but excluding 4.2.0
- Affected functions: findByKey(), exists(key=), updateByKey() and deleteByKey() in combination with scopes
- Versions before 4.0.0: Unknown.
Fixed in
- Wheels 4.2.0 (combines key conditions with the incoming scope, query builder and where conditions)
- Backport to 4.1.x: Unknown.
Workaround
- Vendor workaround: Unknown.
- Use findOne(where="id = #key#") or findAll(where=...) on the scope chain instead of findByKey.
- Check ownership or tenant explicitly on every record loaded or changed by a request-supplied key.
Exploitation
- No evidence of exploitation in the wild found.
- No public proof of concept found.
- CISA SSVC: Exploitation none, automatable no, technical impact total.
- Attack requires network access and a valid low-privilege account.
Our recommendation
- Upgrade Wheels to 4.2.0 or later where the application is affected.
- Until patched, verify ownership or tenant on every record accessed via a request-supplied key.
- Do not rely on the production error setting to protect against this issue.
- Review logs for unexpected updates or deletes on records belonging to other users or tenants.
- Check the customer inventory for Wheels deployments with multi-tenant or ownership-based scopes; treat these with high priority.
Public exploits
PoC-in-GitHub, Metasploit and Exploit-DB list nothing for this CVE.
Research sources
- GitHub Security Advisory GHSA-2qh9-qcxq-f8qc github.com
- OSV: CVE-2026-111445 osv.dev
- Wheels release v4.2.0 github.com
- VulDB: CVE-2026-111445 vuldb.com
- Strix: CVE-2026-111445 www.strix.ai
Researched and written up in English and German by an AI (Claude by Anthropic) based on NVD, CISA, EPSS and the sources listed. The vendor information is authoritative. Researched on 1 Nov 2026, 18:56.
Original description (NVD)
Wheels 4.0.0 through 4.1.2 before 4.2.0 replaces incoming scope conditions with a primary-key condition in findByKey() and exists(key=). For exists(key=), production with error information disabled returns true for an out-of-scope key instead of throwing. Applications relying on scopes for ownership or tenant authorization can therefore load and subsequently modify or delete another user's or tenant's record when the key comes from a request. The 4.2.0 fix combines key conditions with incoming scope, query-builder or where conditions in findByKey(), exists(key=), updateByKey() and deleteByKey(). Other scope-aware finders, aggregates, updateAll() and deleteAll() are not affected.
Sources
The tracker combines official, freely usable data sources – updated continuously:
- NVD (NIST) – CVEs, rating (CVSS), affected products
- CISA KEV – vulnerabilities confirmed by CISA as actively exploited
- CISA Vulnrichment – CISA assessment (SSVC) in the official CVE record
- FIRST EPSS – probability of exploitation
- Microsoft MSRC – Patch Tuesday: vulnerabilities, severity, updates
- PoC-in-GitHub – public proof-of-concept repositories
- Metasploit (Rapid7) – modules of the Metasploit Framework
- Exploit-DB (OffSec) – archive of public exploits (links only)
- Patch days: official vendor pages (linked per vendor) (Vendor patch days)
This product uses data from the NVD API but is not endorsed or certified by the NVD. EPSS data © FIRST.org.
Affected? We can help.
We check whether your systems are affected, install updates and close the gap – continuously with the System Health Checker if you wish.
