Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate as apikey_manager via JWT
-
DeliveryPOST /apikey binding an omitted deploy role
-
ExploitBypass deny-list and priority_rank check
-
ExecutionMint deploy-scoped API key
-
PersistPush malicious OTA JS bundle
-
ImpactArbitrary code delivered to all app end users
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V8 - Authorization Least privilege enforcement
MITRE ATT&CK
1 technique across 1 tactic: Privilege Escalation The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires an authenticated principal holding the apikey_manager organization role (permissions org.manage_apikeys and org.read) issuing POST /apikey with a valid JWT session against a Capgo capgo.app backend at version ≤12.261.0. No user interaction and no higher privilege is needed. The key limiting factor is that the attacker must already possess the apikey_manager role within the target organization - this is authenticated insider/delegated-role abuse, not remote-unauthenticated access. The flaw is present in default role seeding (apikey_manager priority_rank 78 exceeds deploy roles' ranks 68/66/58/57, and the deny-list omits app_developer, app_uploader, channel_developer, channel_uploader), so no non-default configuration is required to trigger it. |
| Impact | This is a genuine, well-described privilege-escalation flaw (CWE-269) whose real-world risk sits in the medium band. The vendor CVSS 4.0 vector (7.1, AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:H/VA:N) correctly identifies it as network-reachable, low-complexity, and requiring only low privileges (PR:L) - the attacker must already hold the apikey_manager org role. There is NO EPSS score, NO CISA KEV listing, and NO public exploit code, so there is no evidence of active or imminent exploitation; the risk is a logic/authorization defect that a malicious or compromised low-privilege org member could abuse deliberately. One signal-to-note-conflict: the vendor scores subsequent-system impact as N (SC/SI/SA:N), yet the described outcome - minting a deploy-role key to push arbitrary OTA JavaScript to ALL end users of the organization's apps - is effectively a supply-chain compromise of downstream end-user devices, which I read as a scope/subsequent-system integrity impact the vendor vector understates. The mitigating reality is that this is an insider/authenticated-role abuse (not remote-unauth), which bounds the exploitation population, but the blast radius (all app end users) is severe, and no patched version exists, so it warrants prompt attention for anyone running self-hosted or SaaS Capgo with delegated apikey_manager roles. |
| Exploit ScenarioDerived | A user granted only the apikey_manager role (intended to manage API keys, not deploy code) authenticates with a JWT and calls POST /apikey requesting a key bound to a deploy role such as app_uploader or channel_developer. Because the deny-list omits those roles and apikey_manager's priority_rank (78) outranks them, the request succeeds; the attacker then uses the resulting key to publish a malicious OTA JavaScript bundle that is delivered to every end user of the organization's apps. No public exploit code is identified at time of analysis, but the attack requires no special tooling beyond an authenticated API call. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 26, 2026
Privilege escalation in the Capgo capgo.app backend (versions ≤ 12.261.0) lets an authenticated user who holds only the apikey_manager organization role mint API keys bound to higher-privileged deploy roles (app_developer, app_uploader, channel_developer, channel_uploader). Those keys can in turn be used to push arbitrary over-the-air JavaScript updates to every end user of the organization's apps, giving an insider or delegated-role holder unauthorized write access to production app content. Exploitation requires a valid JWT session and the apikey_manager role (authenticated, no user interaction), no public exploit code was identified at time of analysis, and the issue is not listed in CISA KEV; at advisory publication no patched version was available.
RemediationAI
No vendor-released patch was identified at the time of advisory publication, so remediation must be compensating until an upstream fix lands. Immediately inventory every principal holding the apikey_manager role and remove it from users who do not strictly need to provision API keys - since the flaw is only reachable with that role, this eliminates the attack path, at the cost of centralizing key creation on a small set of trusted administrators. Audit and rotate all existing API keys: enumerate keys whose role bindings include app_developer, app_uploader, channel_developer, or channel_uploader and revoke any that cannot be attributed to a legitimate request, then reissue needed keys from an account whose role legitimately covers the deploy permission; expect short-lived disruption to CI/CD pipelines that rely on those keys. As a code-level hardening, add the four deploy roles to APIKEY_MANAGER_DENIED_ASSIGNABLE_ROLES in public/apikey/scope.ts and, ideally, lower apikey_manager's priority_rank below the deploy roles (68/66/58/57) or replace the rank heuristic in createRoleBindingForPrincipal with an explicit check that the caller holds every permission conferred by the role being assigned - the trade-off is that any workflow legitimately provisioning keys with deploy roles through apikey_manager must be re-delegated. Until then, alert on POST /apikey calls from apikey_manager sessions and on new API keys whose bindings are more privileged than the issuing principal, which provides detection rather than prevention. Monitor the advisory at https://github.com/Cap-go/capgo.app/security/advisories/GHSA-2x4j-p4pr-fvp8 for the patched release and upgrade to it as soon as it is published.
Affects your stack
Find out whether the stacks and servers you run are on an affected version.
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
The flaw is an improper privilege management / privilege escalation issue (CWE-269) in Capgo's organization role-based access control and API-key issuance path. Capgo is an over-the-air (OTA) update service for Capacitor/JavaScript apps; API keys carry role bindings that determine which operations a client may perform against an organization. When an authenticated principal with only the apikey_manager role (granting org.manage_apikeys and org.read) calls POST /apikey with a JWT session, the backend validates only three things: the org.manage_apikeys permission, a hard-coded deny-list of assignable role names (APIKEY_MANAGER_DENIED_ASSIGNABLE_ROLES in public/apikey/scope.ts), and a priority-rank comparison implemented in createRoleBindingForPrincipal (private/role_bindings.ts). No check verifies that the caller actually possesses the permissions conveyed by the role being bound to the new key. Because the deny-list omits the deploy roles app_developer, app_uploader, channel_developer, and channel_uploader, and because the seeded apikey_manager role has priority_rank 78 - above those roles' ranks of 68, 66, 58, and 57 - the rank check also succeeds. The result is a scope-confusion / role-binding escalation where a role that is explicitly not permitted to upload bundles or promote channels can create a credential that can do exactly that. Affected CPE coverage is broad within the product line: cpe:2.3:a:cap-go:capgo.app:*:*:*:*:*:*:*:* (all versions up to and including 12.261.0). The independent assessment scores this CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:N/I:H/A:N, consistent with the vendor-published CVSS 4.0 score of 7.1 (AV:N/AC:L/AT:N/PR:L/UI:N with high integrity impact and no confidentiality or availability impact): the weakness is a remote, network-reachable integrity compromise that crosses a privilege boundary, gated on the attacker already holding the apikey_manager role inside the target organization.
Know when Cap Go gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:H/VA:N/SC:N/SI:N/SA:N
Network API call, low complexity, requires the pre-held apikey_manager role (PR:L); high integrity impact and scope change because malicious OTA JS reaches end-user devices under a different security authority.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
DescriptionCVE.org
Capgo (capgo.app backend, versions ≤ 12.261.0) improperly restricts which roles the apikey_manager organization role may bind to newly created API keys. When an authenticated user holding only apikey_manager (permissions org.manage_apikeys and org.read) calls POST /apikey with a JWT session, the only checks applied are the org.manage_apikeys permission, a fixed deny-list of assignable role names (APIKEY_MANAGER_DENIED_ASSIGNABLE_ROLES in public/apikey/scope.ts), and a priority-rank comparison in createRoleBindingForPrincipal (private/role_bindings.ts). No check verifies that the caller actually holds the permissions conferred by the role being assigned. Because the deny-list omits the deploy roles app_developer, app_uploader, channel_developer and channel_uploader, and apikey_manager is seeded with priority_rank 78 - higher than those roles' ranks (68, 66, 58, 57) - the rank check also passes. As a result, an apikey_manager who cannot upload bundles or promote channels can mint an API key bound to a deploy role and use it to push arbitrary OTA JavaScript updates to all end users of the organization's apps. As of the advisory publication no patched version was available.
Technical POC Analysis
Note on the record: the supplied advisory (GHSA-2x4j-p4pr-fvp8) rates this Moderate, states "No known CVE," and lists no patched version.
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
Capgo's capgo.app backend (versions ≤ 12.261.0) contains a privilege escalation flaw that allows a user with the apikey_manager role to mint API keys with higher-privileged deploy roles, enabling unauthorized over-the-air JavaScript updates to all end users of the organization's apps. This means a delegated-role holder or insider could alter production app content, affecting every customer and undermining trust in app integrity. Leadership should prioritize immediate mitigations because no vendor patch is currently available, though no public exploit identified at time of analysis.
No vendor-released patch identified at time of analysis. Interim mitigations include: restrict the apikey_manager role to a minimal set of trusted administrators; enforce MFA for all privileged accounts; monitor for anomalous API key creation and OTA update pushes with real-time alerts; and consider temporarily disabling the apikey_manager role if it is not business-critical. Reassess when a patch becomes available.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Privilege escalation occurs when an attacker leverages flaws in access control mechanisms to gain permissions beyond what they were originally granted.
Affected Products (CPE)CVE.org
Improper access control in Capgo (capgo.app) lets any holder of an ordinary full API key forge a trusted SSO provider by
Authorization bypass in Capgo (capgo.app), a live-update/OTA platform for Capacitor mobile apps, allows a de-provisioned
Account pre-registration hijack in Capgo before 12.128.2 lets a remote unauthenticated attacker claim an account under a
Authentication bypass in Capgo prior to version 12.128.2 lets attackers defeat email-based OTP verification by tampering
Cross-tenant data poisoning in Supabase Capgo before 12.128.2 allows remote unauthenticated attackers to corrupt billing
Unauthenticated retrieval of deleted over-the-air update bundles from capgo.app through version 12.129.0 is possible via
Capgo's direct exposure of the public.org_users table through Supabase PostgREST lets an authenticated user who already
Authenticated principals who hold an app-scoped upload/write/all API key with upload+ rights - or any user granted write
Cross-tenant metadata modification in Capgo before 12.244.1 allows an authenticated attacker to alter image object metad
Privilege escalation in the Capgo (capgo.app) backend through version 12.242.4 allows an authenticated API key holder to
Privilege escalation in Capgo (capgo.app) before 12.267.1 allows a principal holding the apikey_manager role to rotate a
Authenticated administrators on Capgo (capgo.app) can grant channel-scoped permissions to non-member users because the p
EUVD-2026-87706
GHSA-p4m4-7g3w-gpqw
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB