Skip to main content

Capgo EUVDEUVD-2026-87716

| CVE-2026-100621 MEDIUM
Improper Access Control (CWE-284)
2026-09-26 VulnCheck GHSA-7957-wr5g-x2vr
5.3
CVSS 4.0 · Vendor: VulnCheck
View

Attack ChainAIDerived

Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain

  1. Access
    Obtain Capgo API key with bundle write
  2. Delivery
    Create/keep bundle version in r2-direct state
  3. Exploit
    Assign version to a delivery channel
  4. Execution
    Mutate checksum/session_key/manifest via PostgREST
  5. Impact
    Altered 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 r2-direct storage_provider state - the state the enforce_encrypted_bundle_trigger/check_encrypted_bundle_on_insert content lock exempts, leaving columns (name, app_id, session_key, key_id, storage_provider, r2_path, external_url, checksum, manifest, native_packages) mutable. The version must also be assigned to a channel so that the /updates endpoint (which filters only deleted versions and does not exclude r2-direct rows) selects it for delivery. Limiting factors: exploitation is confined to bundles the API key can already write, no unauthenticated path exists, and impact is metadata tampering served over OTA rather than direct code execution on the server. Affects all versions with no patch available at publication.

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 r2-direct storage_provider state (which the content-lock trigger exempts), assigns it to a channel, then issues direct PostgREST requests to mutate delivery-critical columns such as checksum, session_key, and manifest. Because the /updates join does not exclude r2-direct versions, the altered bundle metadata is then served to end-user devices via OTA. No public exploit code is identified in the supplied data.

This Month Plan within 30 days. Why: MEDIUM severity (CVSS 4.0-6.9).
No patch listed yet 0.2% exploitation probability (EPSS)

Get an e-mail when this CVE is exploited, patched or re-scored. Free account.

Alert me

AnalysisAIv1 – 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

Vendor (VulnCheck) PRIMARY 5.3 MEDIUM
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
vuln.today AI 4.3 MEDIUM

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.

3.1 AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:N
4.0 AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N

Primary rating from Vendor (VulnCheck).

CVSS VectorVendor: VulnCheck

Attack Vector
Network
Attack Complexity
Low
Attack Requirements
None
Privileges Required
Low
User Interaction
None
Vulnerable system: Confidentiality
None
Vulnerable system: Integrity
Low
Vulnerable system: Availability
None
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

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

EPSS Score
0.2%
Top 88% exploitable
Prevalence
Low
niche OTA update service for Capacitor mobile apps, limited deployment footprint
Data Quality
5 sources
Confidence: Medium

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.

SignalValue
Severity MEDIUM
CISA KEV No
Public POC No
EPSS 0.2%
Patch available No
Active threat No
Deciding rule
MEDIUM severity (CVSS 4.0-6.9)
What every action level means
Emergency Immediate action required. Criteria: CRITICAL + in CISA KEV (actively exploited) without patch, OR CRITICAL + EPSS > 30% without patch, OR CRITICAL + active threat signals without patch.
Act Now Prioritize within 24-48h. Criteria: in KEV with patch available, OR CRITICAL + public POC, OR HIGH + EPSS > 10%, OR CRITICAL + active threat, OR any CRITICAL severity.
This Week Schedule remediation this week. Criteria: HIGH severity (CVSS 7.0-8.9). Patch within normal change window.
This Month Plan within 30 days. Criteria: MEDIUM severity (CVSS 4.0-6.9), lower exploitation probability. Include in regular patch cycle.
Monitor Track and reassess. Criteria: LOW severity (CVSS 0.1-3.9), minimal exploitation risk. No immediate action needed.

SSVC AssessmentENISA

SSVC Decision· derived
Scheduled
Exploitation
Poc
System Exposure· derived
Open
Automatable
No
Human Impact· derived
Medium
Technical Impact
Partial

Priority Score

26
Low Medium High Critical
KEV: 0
EPSS: 0
CVSS: +26
PoC: 0
Weaponized: 0
Threat intel: 0
Gov advisory: 0

Attack Technique

Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.

Affected Products (CPE)CVE.org

cpe:2.3:a:cap-go:capgo.app:*:*:*:*:*:*:*:*

More in Cap Go

View all
CVE-2026-56081 CRITICAL
9.3 Jun 19

Account pre-registration hijack in Capgo before 12.128.2 lets a remote unauthenticated attacker claim an account under a

CVE-2026-88864 CRITICAL
9.3 Sep 10

Improper access control in Capgo (capgo.app) lets any holder of an ordinary full API key forge a trusted SSO provider by

CVE-2026-56073 CRITICAL
9.3 Jun 19

Authentication bypass in Capgo prior to version 12.128.2 lets attackers defeat email-based OTP verification by tampering

CVE-2026-88860 CRITICAL
9.3 Sep 10

Authorization bypass in Capgo (capgo.app), a live-update/OTA platform for Capacitor mobile apps, allows a de-provisioned

CVE-2026-56245 HIGH
8.8 Jun 24

Cross-tenant data poisoning in Supabase Capgo before 12.128.2 allows remote unauthenticated attackers to corrupt billing

CVE-2026-56248 HIGH
8.7 Jun 23

Unauthenticated denial of service in Cap-go capgo (capgo-backend) before 12.128.12 allows remote attackers to exhaust Po

CVE-2026-100622 HIGH
8.7 Sep 26

Unauthenticated retrieval of deleted over-the-air update bundles from capgo.app through version 12.129.0 is possible via

CVE-2026-100623 HIGH
8.7 Sep 26

Capgo's direct exposure of the public.org_users table through Supabase PostgREST lets an authenticated user who already

CVE-2026-100619 HIGH
8.7 Sep 26

Authenticated principals who hold an app-scoped upload/write/all API key with upload+ rights - or any user granted write

CVE-2026-100614 HIGH
8.7 Sep 26

Cross-tenant metadata modification in Capgo before 12.244.1 allows an authenticated attacker to alter image object metad

CVE-2026-88862 HIGH
8.7 Sep 10

Privilege escalation in the Capgo (capgo.app) backend through version 12.242.4 allows an authenticated API key holder to

CVE-2026-100615 HIGH
8.7 Sep 26

Privilege escalation in Capgo (capgo.app) before 12.267.1 allows a principal holding the apikey_manager role to rotate a

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy