Description
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.
Published: 2026-09-26
Score: 8.7 High
EPSS: n/a
KEV: No
Impact: Unauthorized OTA updates leading to potential remote code execution on client devices
Action: Await Patch
AI Analysis

Impact

Capgo enforces a restrictive row‑level policy on its public.manifest table, but a privilege hierarchy flaw lets a principal with an app‑scoped upload/write/all API key or an authenticated user with write rights alter the app_versions.manifest entry for a version that uses the ‘r2‑direct’ storage provider. The on_version_update worker trusts the values in that manifest record and, using a service‑role Supabase client, inserts the attacker‑controlled file_name, file_hash and s3_path into public.manifest before clearing the app_versions entry. When a release channel points to the crafted version, the /updates endpoint serves the malicious manifest record as a download_url, effectively poisoning the OTA update process and delivering attacker code to any client that pulls the manifest. This results in a remote code delivery surface that can lead to execution on the device.

Affected Systems

The vulnerability affects all installations of Capgo’s SaaS platform (Capgo). No version information is provided, and the issue was present in all affected releases at disclosure.

Risk and Exploitability

The flaw scores a CVSS of 8.7, indicating high severity. EPSS is not available and the vulnerability is not listed in CISA’s KEV catalog, but the attack path is clear for any entity holding an upload/write API key or an authenticated user with write access to an app. The exploited conditions require the use of the ‘r2‑direct’ storage provider and the ability to trigger the on_version_update worker; these prerequisites are typically satisfied in normal operational use, giving the vulnerability a high exploitability in practice.

Generated by OpenCVE AI on September 26, 2026 at 15:22 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Disable the use of the ‘r2‑direct’ storage provider for public manifest updates or add a routing guard that verifies bundle content‑lock rules before the async worker accepts a manifest record.
  • Revise the on_version_update worker to reject any record that contains arbitrary file_name, file_hash, or s3_path values when the storage_provider is ‘r2‑direct’ and to enforce that only system‑generated fields are written to public.manifest.
  • Implement stricter row‑level security so that only principals with explicit upload rights can modify app_versions.manifest, eliminating the privilege escalation path exercised by the vulnerable API key.
  • Apply the official vendor patch as soon as it is released and run an end‑to‑end regression test of the OTA flow to ensure that manifest poisoning can no longer occur.

Generated by OpenCVE AI on September 26, 2026 at 15:22 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Sat, 26 Sep 2026 13:30:00 +0000

Type Values Removed Values Added
Description 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.
Title Capgo OTA Manifest Poisoning via app_versions.manifest Bypass
Weaknesses CWE-266
References
Metrics cvssV3_1

{'score': 8.8, 'vector': 'CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H'}

cvssV4_0

{'score': 8.7, 'vector': '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'}


Subscriptions

No data.

cve-icon MITRE

Status: PUBLISHED

Assigner: VulnCheck

Published:

Updated: 2026-09-26T13:22:58.881Z

Reserved: 2026-09-26T02:31:07.602Z

Link: CVE-2026-100619

cve-icon Vulnrichment

No data.

cve-icon NVD

Status : Received

Published: 2026-09-26T14:16:42.740

Modified: 2026-09-26T14:16:42.740

Link: CVE-2026-100619

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-09-26T15:30:08Z

Weaknesses
  • CWE-266

    Incorrect Privilege Assignment