# CVE-2026-111445: Wheels authorization bypass in findByKey() and exists()

Source: https://junglewise.ai/threats/cve-2026-111445-wheels-4-0-0-through-4-1-2-before-4-2-0-replaces-incoming-scope  
Publisher: Junglewise Threat Intelligence, https://junglewise.ai/threats  
Published: 2026-10-16. Updated: 2026-10-16  
License: CC BY 4.0 with a link back

CVE-2026-111445 · Severity: high · CVSS 8.1 · Published 2026-10-16

Wheels is a web application framework that provides database query tools for building CRUD operations. A flaw in versions 4.0.0 through 4.1.2 allows attackers to bypass authorization scopes used to restrict access to records by user or tenant, potentially loading, modifying, or deleting records belonging to other users or tenants. This affects applications relying on scopes for multi-tenant isolation or ownership-based access control.

Technologies: [Wheels](https://junglewise.ai/threats/technologies/wheels). Vendors: [Wheels](https://junglewise.ai/threats/vendors/wheels).

## Quick answers

**Is CVE-2026-111445 exploited in the wild?** No. Junglewise Threat Intelligence has no report of CVE-2026-111445 being exploited in the wild.

**How severe is CVE-2026-111445?** High severity, with a CVSS score of 8.1, published 16 October 2026.

**Which products and versions are affected?** Wheels 4.0.0 through 4.1.2.

**Is there a fix for CVE-2026-111445?** Yes: fixed in 4.2.0. Until then: Use findOne(where="id = #key#") or findAll(where=...) on the scope chain instead of findByKey(), or explicitly verify record ownership after loading.</anigation>
<parameter name="severity">high Junglewise finds every place you run it, drafts the upgrade and applies it once you approve.

**How is CVE-2026-111445 attacked?** It is attacked over the network, in a software library.

**Am I affected by CVE-2026-111445?** Check whether you run Wheels at an affected version. Junglewise does that check for you around the clock: connect your code, cloud and domains, and it matches new vulnerabilities like this one against what you actually run and tells you when one reaches you.

## How to fix

- Fixed in 4.2.0

Use findOne(where="id = #key#") or findAll(where=...) on the scope chain instead of findByKey(), or explicitly verify record ownership after loading.</anigation>
<parameter name="severity">high

## Technical details

The findByKey() and exists(key=) methods in Wheels 4.0.0–4.1.2 replace incoming scope conditions with only a primary-key lookup, ignoring chainable scopes that enforce authorization. An attacker can bypass authorization by requesting a record key outside the intended scope; findByKey() will return it and updateByKey()/deleteByKey() will modify or remove it. The fix in 4.2.0 combines key conditions with scope conditions using AND logic instead of replacement.

## Affected products

- Wheels Wheels 4.0.0 through 4.1.2

## Timeline

- 2026-10-12: advisory
- 2026-10-16: patched

## References

- [https://github.com/wheels-dev/wheels/security/advisories/GHSA-2qh9-qcxq-f8qc](https://github.com/wheels-dev/wheels/security/advisories/GHSA-2qh9-qcxq-f8qc)

## Related threats

- [Wheels Host header injection in production error email derivation](https://junglewise.ai/threats/cve-2026-111450-wheels-through-4-1-1-derives-its-default-production-error-email)
- [Wheels framework authorization bypass in nested properties](https://junglewise.ai/threats/cve-2026-111447-wheels-1-1-through-4-1-2-resolves-nestedproperties-records-by)
- [Wheels SQL injection on MySQL/MariaDB with backslash escaping](https://junglewise.ai/threats/cve-2026-111444-wheels-through-4-1-2-allows-sql-injection-on-mysql-mariadb-with)
- [Wheels test context access control bypass](https://junglewise.ai/threats/cve-2026-111443-wheels-4-0-6-through-4-1-2-lets-an-unauthenticated-client-switch)
- [Wheels SQL injection in dynamic finders and key lookups](https://junglewise.ai/threats/cve-2026-110911-wheels-1-1-8-through-4-1-1-allows-sql-injection-when-caller)
