CVE-2026-88862
nichePrivilege escalation via API key spoofing in Capgo backend (x-limited-key-id)
Capgo (capgo.app) backend through 12.242.4 fails to validate parent-child delegation when processing the x-limited-key-id header, an improper authorization flaw (CWE-863) that lets an authenticated low-privilege API key act as a more privileged key owned by the same user without knowing its secret. When the header is supplied, checkKeyByIdPg() resolves the attacker-chosen numeric key ID using only the ID, its expiration state, and the authenticating key's user_id; hasLimitedRbacSubkeyScope() accepts any key with a non-organization (e.g., app-scoped) RBAC binding, and validateSubkeyUser() only compares owning user IDs, so setSubkeyAuthContext replaces the authenticated principal and effective API-key secret with the sibling key's. Because Capgo treats each API key as an independent RBAC principal with its own role binding, an attacker holding an apikey_manager key with no application access can exercise an app_admin sibling's permissions, such as managing or pushing live updates to the account's apps. Anyone running the Capgo backend at versions through 12.242.4 where multiple same-owner API keys exist is affected. No exploitation, public proof-of-concept, or KEV listing is known, and no patched version was available at the time of the advisory.
What to do: No fixed release was available at advisory time; monitor the Capgo changelog/GitHub and upgrade to the first release published after 12.242.4 as soon as it appears. Until then, treat any apikey_manager key as if it were app_admin: issue such keys only to fully trusted parties and consider rotating or revoking low-privilege keys distributed to agents or CI. Check backend logs for requests carrying x-limited-key-id whose resolved key had a different role than the authenticating key, as this indicates potential exploitation.
| Capgo (capgo.app) Capgo backend | through 12.242.4 (inclusive; reproduced at commit b3d02cdb after the GHSA-8h52-44r7-w343 fix; no patched version available at advisory time) |
Order-of-magnitude estimate by the model from install counts, market share and public scan data it knows; verify before quoting.
Capgo (capgo.app) backend through 12.242.4 does not validate parent-child delegation when processing the x-limited-key-id header. checkKeyByIdPg() in supabase/functions/_backend/utils/hono_middleware.ts resolves the attacker-supplied numeric API key ID using only the key ID, its expiration state, and the authenticating key's user_id, while hasLimitedRbacSubkeyScope() accepts any key with a non-organization (e.g., app-scoped) RBAC binding and validateSubkeyUser() only compares owning user IDs. Because Capgo treats API keys as independent RBAC principals with separate role bindings, an authenticated apikey_manager API key with no application access can supply the numeric ID of a more privileged same-owner key and have the middleware replace the authenticated principal and effective API-key secret with that key (setSubkeyAuthContext), exercising an app_admin sibling's permissions without knowing or submitting its secret. The issue was reproduced on release 12.242.4 (commit b3d02cdbc23ac59990785acacd1f113c07458568) after the fix for GHSA-8h52-44r7-w343; at the time of the advisory no patched version was available.
- Weakness
- CWE-863
- Vector
- CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
In the news0 stories
No ingested article mentions this CVE yet.