Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObtain Capgo API key with bundle write
-
DeliveryCreate/keep bundle version in r2-direct state
-
ExploitAssign version to a delivery channel
-
ExecutionMutate checksum/session_key/manifest via PostgREST
-
ImpactAltered metadata served to devices via /updates
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Access control enforcement
MITRE ATT&CK
1 technique across 1 tactic: Defense Evasion The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Requires an attacker to hold a valid Capgo API key with bundle write/upload permission, and the target bundle version must be in the |
| Impact | This is a moderate, authenticated integrity issue - not a critical or widely-exploitable flaw. The vendor CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:L/VA:N, score 5.3) is internally consistent with the description: network-reachable via PostgREST, low complexity, but requires an attacker to already hold a valid Capgo API key with bundle write/upload permission (PR:L), and the only impact is limited integrity (VI:L) - no confidentiality or availability loss. No EPSS score, no CISA KEV listing, and no public POC are present in the supplied data, so exploitation status is 'no public exploit identified at time of analysis.' The genuine concern is qualitative rather than statistical: this is an OTA update delivery path, so tampered checksum/session_key/manifest metadata is served to downstream devices, giving the bug a supply-chain flavor that a raw 5.3 understates. However, it is gated behind possession of a write-capable API key and there is no patch available at publication, so it should be treated as a defense-in-depth immutability regression to monitor rather than an emergency. Note the CWE is CWE-284 (Improper Access Control) and the description explicitly says the attacker already holds a valid API key - so the 'Authentication Bypass' tag is a misnomer; this is an authorization/content-lock bypass by an authenticated principal. |
| Exploit ScenarioDerived | An attacker who has obtained a Capgo API key with bundle write/upload permission creates or retains a bundle version in the |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 26, 2026
Incomplete content-lock enforcement in Capgo (capgo.app) lets an authenticated holder of an API key with bundle write/upload permission keep or create an app_versions row in the r2-direct storage_provider state and then mutate delivery-critical columns - including checksum, session_key, key_id, manifest, r2_path, external_url and native_packages - via direct PostgREST requests. Because the channel/version join used by the /updates endpoint filters only deleted versions and does not exclude r2-direct rows, the tampered bundle remains OTA-selectable and altered metadata is served to client devices. Exploitation is authenticated only (the assessed vector requires PR:L), is confined to bundles the key can already write, and yields metadata tampering over OTA rather than server-side code execution; all versions are affected and no vendor-released patch was identified at the time of analysis, with no public exploit identified at time of analysis.
RemediationAI
No vendor-released patch was identified at the time of analysis, so remediation must be compensating. Because the bypass hinges on the r2-direct storage_provider exemption, the highest-value control is to stop using the r2-direct upload path for any bundle that will be assigned to a delivery channel, or to migrate existing channel-assigned versions off that state so the content lock applies again - the trade-off is loss of the direct-to-R2 upload performance path and possible re-upload of affected bundles. Second, close the delivery gap at the database layer by modifying the channel/version join in supabase/functions/_backend/utils/pg.ts (and any equivalent query) to exclude r2-direct rows from /updates selection alongside deleted versions; be aware this may interrupt OTA delivery for legitimate versions still stored in that state. Third, restrict and audit the privilege that makes exploitation possible: minimise the number of Capgo API keys holding bundle write/upload permission, scope them per app, rotate them, and review whether Supabase/PostgREST endpoints are reachable with those keys outside the intended client flow - trade-offs include added operational overhead and potential breakage of CI/CD publishing pipelines that rely on broad keys. Fourth, add database-level integrity monitoring or constraints on app_versions (alerting on post-upload changes to checksum, session_key, key_id, manifest, r2_path, external_url) and verify client-side checksum/signature validation before applying an OTA bundle, which limits the payoff of metadata tampering but does not remove the underlying access-control weakness. Track the GitHub advisory GHSA-5rg9-rhwj-wj76 for an official fix and apply it as soon as a patched release 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
Capgo is an open-source over-the-air (OTA) update platform for Capacitor/Cordova-style mobile apps. Its backend is built on Supabase: PostgreSQL tables (notably app_versions) are exposed through PostgREST, and business logic lives in SQL triggers plus Edge Functions. Two prior hardening mechanisms are relevant. First, the content-lock triggers enforce_encrypted_bundle_trigger and check_encrypted_bundle_on_insert defined in supabase/schemas/prod.sql were intended to make uploaded bundle metadata immutable after upload, addressing an earlier app_versions metadata-tampering issue. That lock exempts rows whose previous storage_provider value is r2-direct (a Cloudflare R2 direct-upload path), so the columns name, app_id, session_key, key_id, storage_provider, r2_path, external_url, checksum, manifest and native_packages stay writable for such rows. Second, the channel/version join implemented in supabase/functions/_backend/utils/pg.ts and consumed by the /updates endpoint filters out only deleted versions and does not exclude r2-direct versions, so a tampered row in that state is still selected for client delivery. The root cause class is CWE-284 (Improper Access Control): an authorization/immutability check is bypassed through a state-dependent exemption rather than through a memory-safety or injection flaw.
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:L/VA:N/SC:N/SI:N/SA:N
Network-reachable PostgREST mutation requiring a write-capable API key (PR:L, AC:L); impact is limited integrity of served bundle metadata (I:L) with no confidentiality or availability loss.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
DescriptionCVE.org
Capgo (capgo.app) contains an incomplete access-control/content-lock enforcement issue affecting all versions; no patch is available at the time of publication. The enforce_encrypted_bundle_trigger / check_encrypted_bundle_on_insert content lock in supabase/schemas/prod.sql exempts app_versions rows whose previous storage_provider is r2-direct, so delivery-critical columns (name, app_id, session_key, key_id, storage_provider, r2_path, external_url, checksum, manifest, native_packages) remain mutable while a row is in that state. Separately, the channel/version join used by the /updates endpoint (supabase/functions/_backend/utils/pg.ts) filters only deleted versions and does not exclude r2-direct versions, so such rows remain OTA-selectable. An attacker holding a Capgo API key with bundle write/upload permission can create or keep a bundle version in the r2-direct state, assign it to a channel, and then modify these fields via direct PostgREST requests, causing altered bundle metadata (for example checksum and session_key) to be served to devices through /updates. This bypasses the post-upload content immutability hardening added for a previous app_versions metadata-tampering issue.
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-87716
GHSA-7957-wr5g-x2vr
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB