CVE-2026-100621 Details
Description
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.
A vulnerability exists in Capgo (capgo.app) due to incomplete access control and content lock enforcement, affecting all versions. The issue arises because the content lock in the application's SQL schema exempts 'app_versions' rows with a previous 'storage_provider' of 'r2-direct'. This exemption allows critical delivery columns, such as name, app_id, session_key, key_id, storage_provider, r2_path, external_url, checksum, manifest, and native_packages, to remain mutable while the row is in that state. Additionally, the '/updates' endpoint's channel/version join does not filter out 'r2-direct' versions, leaving them selectable for over-the-air updates. An attacker with a Capgo API key that includes bundle write/upload permissions can exploit this by creating or maintaining a bundle version in the 'r2-direct' state, assigning it to a channel, and then altering key metadata fields through direct PostgREST requests. This modified metadata, such as the checksum and session_key, is then delivered to devices via the '/updates' endpoint, circumventing the intended immutability safeguards that were implemented to address a prior metadata tampering issue.
To address this vulnerability, the content lock should be revised to include 'r2-direct' rows once they are channel-linked or have an R2 path. Additionally, the '/updates' endpoint should be modified to exclude 'r2-direct' versions, ensuring that only finalized rows are selectable for over-the-air updates.
Metrics
CVSS 4.0 Severity and Vector Strings:
CVSS 3.x Severity and Vector Strings:
No data available for CVSS Version 2.0 on this CVE.
Volerion
Assessed Sep 26, 2026CISA-ADP
Assessed Sep 30, 2026References to Advisories, Solutions, and Tools
By selecting these links, you will be leaving this site. These are references gathered from the official CVE record and are not endorsed by Volerion.
| URL | Source(s) | Tag(s) |
|---|---|---|
| https://github.com/Cap-go/capgo.app/security/advisories/GHSA-5rg9-rhwj-wj76 | CISA-ADP | AdvisoryExploitVendor |
| https://github.com/Cap-go/capgo.app/security/advisories/GHSA-5rg9-rhwj-wj76 | [email protected] | AdvisoryExploitVendor |
| https://www.vulncheck.com/advisories/capgo-app-content-lock-bypass-via-r2-direct-bundle-mutation | [email protected] | AdvisoryExploit |
Weakness Enumeration
| CWE-ID | CWE Name | Source |
|---|---|---|
| CWE-284 | Improper Access Control | [email protected] |
Affected Products
| Product | Versions |
|---|---|
| Capgo | < 1.0 |
CPE
Remediation
| |
Change History
3 change records found show changes
| Date | Action | Recorded By |
|---|---|---|
| Sep 30, 2026 | CVE Modified | [email protected] |
| Sep 30, 2026 | CVE Modified | CISA-ADP |
| Sep 26, 2026 | New CVE Received | [email protected] |
Volerion