Skip to main content

Capgo EUVDEUVD-2026-87714

| CVE-2026-100619 HIGH
Incorrect Privilege Assignment (CWE-266)
2026-09-26 VulnCheck GHSA-xj78-q428-xww2
8.7
CVSS 4.0 · Vendor: VulnCheck
View

Attack ChainAIDerived

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

  1. Access
    Obtain app-scoped upload/write API key or write+ account
  2. Delivery
    Update app_versions.manifest on an r2-direct version
  3. Exploit
    Bypass bundle content-lock check
  4. Execution
    on_version_update worker inserts attacker manifest via service-role
  5. Persist
    Channel serves poisoned download_url via /updates
  6. Impact
    Malicious OTA bundle delivered to end-user devices

Vulnerability Assessment

Weakness
CWE
OWASP Top 10:2025
A06:2025 - Insecure Design
ASVS 5.0
V8 - Authorization Privilege assignment review
Exploitation Conditions

Attacker must possess an app-scoped upload/write/all API key with upload+ rights, or be an authenticated user with write+ rights on the target app. The target version must have storage_provider set to 'r2-direct', which is the specific configuration excluded from the bundle content-lock check that otherwise protects manifest integrity. Exploitation also requires that a channel points to (or can be made to point to) the crafted version so the poisoned manifest is served via /updates. Limiting factors: the requirement for pre-existing write-capable credentials (no unauthenticated path) and the r2-direct storage precondition - versions using other storage providers are not exploitable through this bypass.

Impact

This is a genuine high-priority integrity flaw rather than a CVSS-inflated one, though the vendor score understates the true blast radius. The vendor CVSS 4.0 vector (8.7, AV:N/AC:L/PR:L/UI:N/VC:H/VI:H/VA:H) correctly captures network reach and low attacker complexity, but scores subsequent-system impact as none (SC:N/SI:N/SA:N) despite the description stating the poisoned manifest is served to end-user devices via the /updates endpoint - that is a scope change into a downstream system, so the real severity is arguably higher than 8.7, not lower. Exploitation is NOT unauthenticated: the CVSS PR:L and the description both require either an app-scoped upload/write/all API key or an authenticated user with write+ rights on the app, so this is an authenticated privilege-abuse/confused-deputy issue (CWE-266), not the 'Authentication Bypass' the tag implies. No EPSS score, no CISA KEV listing, and no public POC are present in the input, so there is no evidence of active exploitation - priority rests on the severity of the outcome (arbitrary OTA payload delivery to app end users through a trusted service-role worker) and the fact that all versions are affected with no patch available at publication. The one meaningful limiting factor the vendor vector omits is the storage_provider='r2-direct' precondition, which narrows exploitable versions.

Exploit ScenarioDerived

An attacker holding a legitimate app-scoped upload/write API key (or an authenticated collaborator with write+ rights) updates the app_versions.manifest field on a version configured with storage_provider 'r2-direct', which escapes the bundle content-lock check. The on_version_update async worker trusts the attacker-supplied manifest and, using the privileged service-role Supabase client, writes attacker-controlled file_name, file_hash, and s3_path into the RLS-protected public.manifest table; once a channel points at that version, every device polling /updates receives the poisoned download_url. No public exploit code was identified at the time of analysis.

This Week Schedule remediation this week. Why: HIGH severity (CVSS 7.0-8.9).
No patch listed yet 0.3% exploitation probability (EPSS)

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

Alert me

AnalysisAIv1 – Sep 26, 2026

Authenticated principals who hold an app-scoped upload/write/all API key with upload+ rights - or any user granted write+ rights on a target app - can poison Capgo's OTA update manifest so that client devices receive attacker-controlled download URLs. The bypass works because the on_version_update async worker runs with the Supabase service-role client and implicitly trusts the manifest field of an app_versions row whose storage_provider is 'r2-direct', a configuration excluded from the bundle content-lock check; the worker then writes attacker-supplied file_name, file_hash and s3_path values into public.manifest, and once a channel points at the crafted version the /updates endpoint serves the injected record as a client-facing download_url. All versions are affected, no vendor patch was available at time of publication, and no public exploit code has been identified at time of analysis.

RemediationAI

No vendor-released patch was identified at time of analysis, so compensating controls are required: first, remove 'r2-direct' from the set of usable storage_provider values for app versions, or migrate existing r2-direct versions to a provider covered by the bundle content-lock check - the trade-off is potentially higher storage/egress cost or altered CDN behavior for those apps. Second, treat every app-scoped upload/write/all API key and every write+ app membership as a privileged credential: rotate all keys with upload+ rights and audit which users hold write+ on each app, accepting the operational disruption of key rotation. Third, restrict the ability to create or repoint channels at versions, since exploitation requires a channel to serve the crafted version via /updates. Fourth, audit public.manifest and app_versions for unexpected or recently inserted file_name, file_hash and s3_path values, particularly rows with service-role provenance that lack a corresponding content-lock verification, and monitor on_version_update worker logs for manifest inserts originating from r2-direct versions. Until an upstream fix is released, deployments that cannot drop r2-direct should treat OTA manifest integrity as externally trustable only for non-r2-direct providers; consult advisories GHSA-443r-w5p8-rhr2 and the VulnCheck advisory for updated patch status.

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 service for mobile applications built on Supabase. It defends the public.manifest table with a RESTRICTIVE row-level security policy that blocks direct user inserts; RESTRICTIVE policies are ANDed with permissive policies and therefore cannot be widened by any other policy, so direct writes are correctly denied. That control only binds roles subject to RLS - the service_role key used by the on_version_update async worker bypasses RLS entirely. The worker reads record.manifest from an app_versions row and, without re-validating it against the content-lock check, inserts the attacker-controlled file_name, file_hash and s3_path into public.manifest using the service-role client, then clears app_versions.manifest. Because versions whose storage_provider is 'r2-direct' are excluded from the bundle content-lock verification path, the integrity check that would otherwise detect manifest tampering never runs for those rows. The root cause class, CWE-266 (Incorrect Privilege Assignment), describes this privilege boundary error precisely: a low-privileged principal (an app-scoped upload+ API key holder or a write+ app user) induces a component running with service-role authority - the worker - to perform a write on their behalf, a confused-deputy pattern in which the trust boundary between the user-writable app_versions.manifest column and the trusted public.manifest table is not enforced. The vendor's CVSS 4.0 vector scores subsequent-system impact as none (SC:N/SI:N/SA:N), whereas our independent assessment rates the change of scope as changed (S:C) with high confidentiality, integrity and availability impact, reflecting the downstream reach of a poisoned OTA update channel; the storage_provider='r2-direct' precondition and the requirement for pre-existing write-capable credentials are the primary limiting factors.

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 8.7 HIGH
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
vuln.today AI 9.9 CRITICAL

PR:L for the required upload/write credential; S:C because the poisoned manifest crosses into end-user devices; C/I/A:H as arbitrary OTA payload can fully compromise the delivered app content.

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

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
High
Vulnerable system: Integrity
High
Vulnerable system: Availability
High
Subsequent system: Confidentiality
None
Subsequent system: Integrity
None
Subsequent system: Availability
None

DescriptionCVE.org

Capgo (capgo.app) blocks direct user inserts into the public.manifest table with a RESTRICTIVE row-level security policy, but that restriction can be bypassed indirectly. A principal holding an app-scoped upload/write/all API key (upload+ rights) or an authenticated user with write+ rights on an app can update public.app_versions.manifest on a version whose storage_provider is 'r2-direct', which is not covered by the bundle content-lock check. The on_version_update async worker trusts record.manifest and, using the service-role Supabase client, inserts the attacker-controlled file_name, file_hash, and s3_path into public.manifest before clearing app_versions.manifest. When a channel points to the crafted version, the /updates endpoint returns the service-role-created manifest entry as a client-facing download_url, enabling OTA manifest poisoning through a trusted async worker path. All versions are affected; no patch was available at the time of publication.

Technical POC Analysis

CWE-266 (Incorrect Privilege Assignment), not a memory-safety bug.

Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.

Executive ViewAI

Why It Matters

Capgo's over-the-air update delivery pipeline can be manipulated so that customer mobile devices are pointed at attacker-controlled download locations, and the flaw applies to all released versions of the product. Because OTA updates push executable code directly to end-user devices, this exposes the software supply chain for every application distributed through Capgo and could result in malicious code reaching customers' users without their knowledge. Leadership should care because there is currently no vendor patch, meaning exposure can only be reduced by tightening internal credential and release-management practices rather than by upgrading.

Business Impact: High
Compensating Controls

No vendor-released patch identified at time of analysis. Interim mitigations: restrict and rotate all Capgo API keys holding upload/write/all scopes to least privilege; audit and revert app_versions rows using storage_provider 'r2-direct' and their corresponding public.manifest entries against known-good hashes; disable the r2-direct storage provider if not required; pin channels to previously validated versions and block new promotions until review; alert on on_version_update worker and /updates endpoint activity; enforce client-side bundle content-lock or signature verification before installation.

Threat Intelligence Overview

EPSS Score
0.3%
Top 77% exploitable
Prevalence
Low
niche Capacitor OTA live-update backend, limited developer footprint
Data Quality
6 sources
Confidence: High

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 HIGH
CISA KEV No
Public POC No
EPSS 0.3%
Patch available No
Active threat No
Deciding rule
HIGH severity (CVSS 7.0-8.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
Scheduled
Exploitation
Poc
System Exposure· derived
Open
Automatable
No
Human Impact
High
Technical Impact
Total

Priority Score

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

Affected Products (CPE)CVE.org

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

More in Cap Go

View all
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-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-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-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-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-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-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

CVE-2026-100617 HIGH
8.7 Sep 26

Authenticated administrators on Capgo (capgo.app) can grant channel-scoped permissions to non-member users because the p

CVE-2026-88861 HIGH
8.7 Sep 10

Capgo's MFA enforcement is defeated by an authentication assurance level (AAL) mismatch across two distinct code paths:

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