Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObtain app-limited write API key
-
DeliveryPUT /app/:id with out-of-scope icon path
-
Exploitapps.icon_url stored without namespace check
-
Executionon_app_update trigger invokes service-role worker
-
ImpactWorker rewrites private cross-org storage object
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Object-level authorization, IDOR prevention
|
| Exploitation Conditions | Requires an authenticated, app-limited WRITE API key for at least one app on the Capgo instance (per the advisory description), so this is not remote-unauthenticated despite the vendor's PR:N. The attacker uses the PUT /app/:id endpoint's user-controlled |
| Impact | This is a genuine cross-tenant authorization flaw (CWE-639 / confused-deputy) but the vendor's 8.7 CVSS 4.0 score materially overstates real-world severity. The vendor vector (AV:N/AC:L/PR:N/UI:N/VC:H/VI:N/VA:N) is internally inconsistent with its own description on two points: (1) it sets PR:N despite the description explicitly requiring 'an authenticated holder of an app-limited write API key' - this is NOT unauthenticated, so PR should be at least PR:L; (2) it sets VC:H (high confidentiality) even though the attack causes the privileged worker to REWRITE an out-of-scope object via cleanStoredImageMetadata() and never returns that object's contents to the attacker - the actual impact is INTEGRITY (tampering with another org's private storage object across the RLS authority boundary), not confidentiality. Corrected, this is a scope-changing integrity-only issue of bounded impact (the worker re-uploads the referenced object; the attacker does not control replacement content beyond metadata stripping/corruption). No EPSS score, no CISA KEV listing, and no public proof-of-concept are present in the provided data - exploitation signals are absent. Net: a real, valid confused-deputy privilege boundary violation worth patching, but not the near-critical priority the raw 8.7 implies; realistic severity is medium. |
| Exploit ScenarioDerived | An attacker who legitimately holds an app-limited write API key for one app issues PUT /app/:id with a crafted |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 26, 2026
An authenticated holder of an app-limited write API key on Capgo (capgo.app) can abuse the PUT /app/:id endpoint's user-controlled icon field to make a privileged service-role worker rewrite a private storage object belonging to another tenant, such as an organization logo, that the API key cannot read or write directly under Supabase Storage RLS. The flaw is a cross-tenant authorization bypass (CWE-639 / confused deputy) rather than remote code execution: the attacker cannot read the targeted object, cannot supply arbitrary replacement content beyond the referenced object being re-uploaded with cleaned metadata, and must already possess a scoped write API key for at least one app on the instance. Our independent assessment scores this CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:N/I:L/A:N and considers the vendor's 8.7 (PR:N) rating materially overstated; no public exploit code and no confirmed active exploitation were identified at time of analysis.
RemediationAI
No vendor-released patch was identified at the time of the advisory, so administrators should treat mitigations as compensating controls until Capgo ships a fix and should monitor the vendor advisory at https://github.com/Cap-go/capgo.app/security/advisories/GHSA-669c-gwrr-hc53. The most direct control is server-side validation on PUT /app/:id that rejects any icon value whose resolved storage path does not fall within the caller's own namespace (org/{owner_org}/{app_id}/...), which eliminates the confused-deputy path entirely at the cost of a code change that must be re-applied on upgrade. As an interim measure, restrict or temporarily stop issuing app-limited write API keys that do not need the icon update capability, and rotate existing scoped keys knowing this reduces but does not remove exposure for keys that legitimately need metadata updates. Operators with control over the Supabase layer can also remove or replace the upsert: true behavior in cleanStoredImageMetadata(), or scope the worker's service-role path so it refuses to touch objects outside the triggering app's namespace; both changes carry the trade-off of needing careful testing to avoid breaking legitimate icon processing and organization-level asset updates. Because exploitation requires an authenticated key, tightening API key issuance, auditing and revoking unused keys, and alerting on cross-namespace writes to storage objects provide detection value even where the code cannot be changed immediately.
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
CVE-2026-100618 is an instance of CWE-639, Authorization Bypass Through User-Controlled Key, implemented here as a confused-deputy problem in Capgo's Supabase-backed app management API. The PUT /app/:id handler accepts a user-supplied icon value, normalizes it, and persists it into public.apps.icon_url without validating that the resulting storage path falls inside the caller's own image namespace (expected pattern org/{owner_org}/{app_id}/...). Because writes to apps.icon_url fire the on_app_update database trigger, a background worker reads record.icon_url and invokes cleanStoredImageMetadata(), which executes with service-role credentials via supabaseAdmin() and downloads then re-uploads the referenced storage object with upsert: true. Supabase Storage RLS governs direct client access, but service-role operations bypass those policies, so the worker becomes a privilege bridge: a low-privileged API key can influence an operation performed with full administrative storage rights. The referenced object is only rewritten after metadata cleaning, so the integrity impact is limited rather than an arbitrary-content overwrite. The CPE cpe:2.3:a:cap-go:capgo.app:*:*:*:*:*:*:*:* indicates every released version of the Capgo platform is in scope.
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:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N
Requires an app-limited write API key so PR:L (not PR:N); privileged worker acts across the Storage RLS authority boundary so S:C; impact is limited integrity tampering of another org's object, no read-back (C:N) and no availability loss.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
DescriptionCVE.org
Capgo (capgo.app) is affected by an authorization flaw in the app icon update path. The PUT /app/:id endpoint accepts a user-controlled icon value, normalizes it, and stores it in public.apps.icon_url without verifying that the image path belongs to the target app's own image namespace (e.g. org/{owner_org}/{app_id}/...). Updating apps.icon_url fires the on_app_update trigger, whose worker reads record.icon_url and calls cleanStoredImageMetadata(), which runs with service-role credentials (supabaseAdmin()) and downloads and re-uploads the referenced storage object with upsert: true. As a result, an authenticated holder of an app-limited write API key can cause the privileged worker to rewrite an out-of-scope private image object (for example an organization logo) that the key cannot read or write directly under Supabase Storage RLS. All versions are affected; no patched version was available at the time of the advisory.
Technical POC Analysis
CWE-639 (Authorization Bypass Through User-Controlled Key), with the advisory also tagging CWE-862 (Missing Authorization).
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
CVE-2026-100618 affects Capgo (capgo.app), a multi-tenant over-the-air update platform, and allows a tenant already holding a scoped, app-limited write API key to abuse the PUT /app/:id endpoint so that a privileged service-role worker rewrites a storage object owned by a different tenant, such as another organization's logo. The exposure is a cross-tenant authorization bypass with limited integrity impact - attackers cannot read the targeted object or inject arbitrary replacement content - but it undermines the tenant-isolation guarantee that customers of a shared hosting platform depend on. Leadership should care because the flaw is reachable by any legitimate low-privilege API key holder on the instance, making it a trust and contractual-compliance issue for multi-tenant operators rather than a mass-exploitation emergency; no vendor patch is currently available.
No vendor-released patch identified at time of analysis. Interim mitigations: revoke or rotate unnecessary app-limited write API keys and restrict key issuance to trusted tenants (application-layer least privilege); validate or block caller-supplied icon object references at the edge so they can only point at objects the calling tenant owns; harden Supabase Storage RLS and bucket ownership rules so the privileged service-role worker cannot rewrite objects outside the originating tenant; and enable logging/alerting on PUT /app/:id calls that cross tenant boundaries to detect abuse and support incident response.
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
Affected Products (CPE)CVE.org
Improper access control in Capgo (capgo.app) lets any holder of an ordinary full API key forge a trusted SSO provider by
Authorization bypass in Capgo (capgo.app), a live-update/OTA platform for Capacitor mobile apps, allows a de-provisioned
Account pre-registration hijack in Capgo before 12.128.2 lets a remote unauthenticated attacker claim an account under a
Authentication bypass in Capgo prior to version 12.128.2 lets attackers defeat email-based OTP verification by tampering
Cross-tenant data poisoning in Supabase Capgo before 12.128.2 allows remote unauthenticated attackers to corrupt billing
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
Authenticated administrators on Capgo (capgo.app) can grant channel-scoped permissions to non-member users because the p
EUVD-2026-87713
GHSA-v4jw-rcpm-rf82
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB