Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObtain victim's Capgo account password
-
DeliveryAuthenticate to Supabase, receive aal1 JWT
-
ExploitCall privileged RBAC endpoint bypassing aal2 check
-
ExecutionMint persistent app_admin API key
-
PersistModify production OTA channel bundle
-
ImpactMobile devices receive attacker-controlled app update
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A07:2025 - Authentication Failures
ASVS 5.0
V6 - Authentication Alternate path authentication
|
| Exploitation Conditions | Exploitation requires: (1) the attacker must know the victim's valid Capgo account password - aal1 authentication with the password alone is sufficient to reach the vulnerable code path; (2) the target account must have at least one verified MFA factor registered, because accounts without any MFA factor have no aal2 boundary to bypass regardless; (3) the compromised account must hold RBAC permissions sufficient to create API keys or modify OTA channels (e.g., the app_admin role). Exploitation is limited to the direct RBAC code path (checkPermissionPg()/rbac_check_permission_direct()); the separate verify_mfa() control path correctly enforces aal2 and is not bypassed. No victim interaction is required after the attacker obtains the password, and the attack is fully remote over the network. |
| Impact | The CVSS 4.0 score of 8.7 reflects a serious network-exploitable vulnerability. However, two metric choices in the provided vector warrant scrutiny. First, PR:N understates the prerequisite: exploitation requires knowledge of the victim's account password, which in CVSS 3.1 terms is PR:L - the attacker possesses partial credentials (aal1) and exploits the missing aal2 enforcement. Second, the vector records VI:N and SI:N (no integrity impact) despite the advisory's explicit PoC demonstrating modification of production OTA channel configurations, a clear integrity violation with potential downstream impact on every mobile device polling that channel. Real-world risk is elevated for Capgo customers who treat MFA as a security boundary for OTA release management: a compromised production channel could push attacker-controlled app updates to potentially large end-user populations. The persistent API key vector is particularly concerning because it survives session termination, extending the attacker's foothold beyond the initial aal1 session. No KEV listing and no standalone exploit tool are present in the input data, but the advisory provides sufficient technical detail for skilled exploitation. With no patch available, the risk is ongoing for all deployed instances. |
| Exploit ScenarioDerived | An attacker who has obtained a Capgo account password through phishing or credential stuffing authenticates to the Supabase backend, receives an aal1 JWT, and - without completing any MFA challenge - calls the privileged RBAC-protected endpoint that routes through checkPermissionPg(), successfully minting a persistent app_admin API key. Using this long-lived key, the attacker modifies a production OTA channel to point to an attacker-controlled bundle, causing mobile devices polling that channel to receive a malicious application update while the original account holder remains unaware. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 10, 2026
Capgo's MFA enforcement is defeated by an authentication assurance level (AAL) mismatch across two distinct code paths: the Edge JWT middleware (foundJWT() in supabase/functions/_backend/utils/hono_middleware.ts) accepts Supabase JWTs without inspecting the aal claim, and the direct RBAC path (checkPermissionPg() calling public.rbac_check_permission_direct() in rbac.ts) authorizes operations by user ID alone, bypassing the assurance-level check that public.verify_mfa() correctly enforces. An attacker holding only the victim's account password can authenticate, receive an aal1 JWT, exercise privileged RBAC operations without triggering any MFA challenge, mint a persistent app_admin API key, and modify production OTA channel configurations - all of which survive logout of the original aal1 session. No patched version has been released; all versions of capgo.app are affected, and the advisory includes a validated proof-of-concept demonstrating bundle swap on a production channel.
RemediationAI
No vendor-released patch has been identified at time of analysis. The definitive fix requires two coordinated code changes: (1) the foundJWT() middleware in supabase/functions/_backend/utils/hono_middleware.ts must extract and validate the aal claim from the JWT, rejecting aal1 sessions for any operation that requires aal2; (2) checkPermission()/checkPermissionPg() in supabase/functions/_backend/utils/rbac.ts must propagate the session's assurance level to public.rbac_check_permission_direct() so it enforces the same aal2 requirement as public.verify_mfa(). Until a patch is available, operators should audit all existing app_admin API keys and rotate or revoke any created during aal1 sessions. Supabase Row Level Security policies can be configured to enforce aal2 at the database layer for sensitive tables as a defense-in-depth measure, reducing reliance on Edge Function middleware. Monitor for API key creation events from aal1 sessions via Supabase audit logs. Consult the GitHub Advisory GHSA-9435-5xw9-v29h for patch status updates.
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
Capgo is an Over-The-Air (OTA) update platform for Capacitor-based mobile applications, implemented as Supabase Edge Functions (Deno runtime, Hono framework). Supabase's GoTrue authentication system assigns Authentication Assurance Levels to JWTs: aal1 for password-only sessions, aal2 for sessions that additionally completed a registered MFA factor challenge. The aal claim is embedded in the signed JWT and is available for inspection at the middleware layer. CWE-288 (Authentication Bypass Using an Alternate Path or Channel) precisely describes the root cause: the privileged RBAC path (public.rbac_check_permission_direct()) represents an alternate authorization channel that omits the aal2 check present in the MFA-aware control path (public.verify_mfa()). The result is that any code path routing through the direct RBAC function bypasses the MFA boundary entirely, even for accounts with a verified MFA factor. The affected CPE wildcard cpe:2.3:a:cap-go:capgo.app:*:*:*:*:*:*:*:* confirms all published versions are vulnerable.
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:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N
PR:L because victim's account password is required; S:C and I:H because OTA channel modification delivers attacker-controlled updates to downstream mobile end-users.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
DescriptionCVE.org
Capgo (Cap-go/capgo.app) contains an authentication bypass affecting all versions (no patched version available at time of publication). The Edge authorization path allows a password-only Supabase aal1 session to exercise privileged RBAC permissions even when the account has a verified MFA factor that has not been used for the session: the Edge JWT middleware (foundJWT() in supabase/functions/_backend/utils/hono_middleware.ts) accepts the JWT without validating its assurance level, and the direct RBAC path (checkPermission()/checkPermissionPg() in supabase/functions/_backend/utils/rbac.ts calling public.rbac_check_permission_direct()) authorizes by user ID without passing or checking the session aal, unlike the public.verify_mfa() control which correctly requires aal2. An attacker who knows only the victim's password can therefore authenticate, mint a persistent app-scoped app_admin API key that remains valid after the aal1 session is logged out, and perform privileged operations such as modifying production OTA channel configurations (validated by changing a public production channel from bundle 1.0.0 to 1.0.1), defeating the protection provided by MFA.
Technical POC Analysis
CWE-288 - authentication bypass via an alternate path.
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 MFA enforcement is completely bypassed by an authentication layer defect that allows attackers with only a user password to obtain administrative API access and modify production application update configurations without satisfying MFA requirements. Publicly available exploit code exists with documented production impact. All versions of capgo.app remain vulnerable; no patch has been released.
No vendor-released patch identified at time of analysis. Interim mitigations: (1) immediately revoke all app_admin API keys and implement a policy requiring re-approval for new keys; (2) restrict Capgo API network access via VPN and IP allowlisting; (3) implement real-time alerting on API key creation, privilege changes, and OTA channel updates; (4) require manual review and re-authentication before any privileged operation executes; (5) temporarily suspend scheduled OTA deployments and audit all channels for unauthorized modifications; (6) maintain detailed immutable audit logs of all access and changes.
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
Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.
Affected Products (CPE)CVE.org
Account pre-registration hijack in Capgo before 12.128.2 lets a remote unauthenticated attacker claim an account under a
Improper access control in Capgo (capgo.app) lets any holder of an ordinary full API key forge a trusted SSO provider by
Authentication bypass in Capgo prior to version 12.128.2 lets attackers defeat email-based OTP verification by tampering
Authorization bypass in Capgo (capgo.app), a live-update/OTA platform for Capacitor mobile apps, allows a de-provisioned
Cross-tenant data poisoning in Supabase Capgo before 12.128.2 allows remote unauthenticated attackers to corrupt billing
Unauthenticated denial of service in Cap-go capgo (capgo-backend) before 12.128.12 allows remote attackers to exhaust Po
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
EUVD-2026-75411
GHSA-3rq3-733w-v2c4
NVD
CVE.org
EPSS
Exploit-DB