Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessAuthenticate as existing org admin
-
DeliveryDirect PostgREST INSERT into public.org_users
-
ExploitRLS check_min_rights('admin') passes
-
ExecutionArbitrary account set user_right=admin
-
ImpactTarget account reads/writes org and apps
Vulnerability Assessment
| Weakness |
CWE
OWASP Top 10:2025
A01:2025 - Broken Access Control
ASVS 5.0
V8 - Authorization Authorization logic validation
MITRE ATT&CK
1 technique across 1 tactic: Privilege Escalation The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Requires an authenticated account that already holds admin rights (check_min_rights('admin')) in the TARGET organization, plus direct access to the Supabase PostgREST endpoint exposing public.org_users. Given that admin, no invitation, no accept_invitation token, and no action by the target user are needed - the attacker directly INSERTs or UPDATEs an org_users row to promote any existing public.users account to active admin. What LIMITS exploitation: the PR:L admin precondition (a non-admin or outsider cannot perform the initial write) and that accounts being added must already exist in public.users. All versions are affected and no patch existed at publication, so no version constraint limits it. |
| Impact | This is a genuine authorization flaw (CWE-863) but a moderate real-world priority, not the near-critical event the vendor's 8.7 CVSS 4.0 score implies. The vendor vector (CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:H/VI:H/VA:H) already encodes PR:L, so exploitation requires an already-authenticated organization ADMIN - the actor starts with substantial legitimate authority over the same organization. The VC:H/VI:H/VA:H claims are generous: the admin cannot read anything they could not already access (they administer the org), so the true novel impact is integrity of the membership graph - silently promoting arbitrary existing accounts to active org admins - not high confidentiality or availability loss. There is no EPSS score, no CISA KEV listing, and no public exploit code identified at time of analysis, so there is no evidence of active or automatable exploitation. The one signal that raises concern is that ALL versions are affected with no patch available at publication, and the bug is trivially reachable via a direct PostgREST write once admin is held. Net: a real, verifiable privilege-management weakness worth fixing, but bounded by the PR:L precondition and the absence of any exploitation telemetry - closer to medium than critical. |
| Exploit ScenarioDerived | An authenticated user who already holds admin rights in a Capgo organization sends a direct Supabase PostgREST INSERT to public.org_users, adding an arbitrary existing public.users account as an active member with user_right="admin". Because the RLS policies only verify check_min_rights('admin') and never require a tmp_users invitation, an accepted invite token, or the RBAC anti-escalation checks, the target account gains full admin read/write over the organization and its apps without ever being invited. No public exploit code is identified, but the vendor confirms this behavior was reproduced in testing. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 26, 2026
Capgo's direct exposure of the public.org_users table through Supabase PostgREST lets an authenticated user who already holds admin rights in an organization bypass the invitation and role-assignment workflow entirely, inserting or updating org_users rows to add any existing public.users account as an active member with user_right="admin". The vulnerable row-level security policies only enforce public.check_min_rights('admin', ...), so they skip the pending-invitation check in tmp_users, the /private/accept_invitation token flow, and the membership/role-consistency and anti-escalation checks enforced by the RBAC role-binding path. Per this assessment the practical impact is a moderate authorization flaw (PR:L, C:L/I:H/A:N) rather than a near-critical event; all versions are affected, no public exploit code has been identified at time of analysis, and the flaw is not confirmed actively exploited (it is not in CISA KEV).
RemediationAI
No vendor-released patch was identified at time of analysis, so operators must apply compensating controls at the Supabase layer. The most direct fix is to remove the "Allow org admin to insert" and "Allow org admin to update" RLS policies on public.org_users and instead route all membership changes through the RBAC role-binding path (or a SECURITY DEFINER RPC) that enforces the tmp_users pending-invitation check and the /private/accept_invitation token, plus the membership/role-consistency and anti-escalation validations; the trade-off is that this requires backend changes and any internal client that writes org_users directly must be migrated to the new endpoint. As a stopgap, revoke INSERT/UPDATE grants on public.org_users from the anon and authenticated Postgres roles (or drop the table from the schema exposed to PostgREST) so that clients cannot write membership rows through the REST API at all, accepting that legitimate admin membership operations must then be performed through a trusted administrative interface or service role. Because the flaw lets a legitimate org admin silently elevate any existing account to user_right="admin", also audit existing org_users rows for unexpected members and monitor PostgREST/Postgres logs for direct INSERT/UPDATE activity against org_users, and review organization membership lists for accounts that never completed an invitation. Consult the vendor advisory at https://github.com/Cap-go/capgo.app/security/advisories/GHSA-w349-9mc3-8c5x and the VulnCheck advisory at https://www.vulncheck.com/advisories/capgo-authentication-bypass-via-direct-postgrest-org-users-table-write for updates, since no patched version was available at publication.
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 a live-update and over-the-air (OTA) delivery platform for Capacitor/Ionic mobile apps, and it uses Supabase (PostgreSQL + PostgREST + row-level security) as its backend. PostgREST automatically publishes every table in an exposed schema as a REST endpoint, so authorization depends entirely on the RLS policies attached to each table rather than on server-side application logic. Here the public.org_users membership table carries INSERT and UPDATE policies named "Allow org admin to insert" and "Allow org admin to update" that only evaluate public.check_min_rights('admin', ...) against the caller. Because those policies never consult tmp_users for a pending invitation, never require a verified /private/accept_invitation token, and never invoke the RBAC role-binding routine that performs membership/role-consistency and anti-escalation validation, the database's authorization model is inconsistent with the intended application workflow. This is CWE-863 (Incorrect Authorization): the control class is a missing/insufficient authorization check, letting a legitimate org admin write privileged membership state directly that the product intended to be unreachable except through the invitation pipeline. The CPE cpe:2.3:a:cap-go:capgo.app:*:*:*:*:*:*:*:* confirms every version of capgo.app is in scope with no version-bounded fix.
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:L/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
PR:L because the attacker must already be an org admin; primary impact is integrity of the membership/role graph (I:H), confidentiality only low since granted access is to org data (C:L), and no availability impact.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
DescriptionCVE.org
Capgo (capgo.app) exposes the legacy membership table public.org_users directly through Supabase PostgREST. The table's row-level security policies "Allow org admin to insert" and "Allow org admin to update" only verify that the caller has admin rights in the target organization (public.check_min_rights('admin', ...)); they do not require a pending invitation in tmp_users, acceptance of an invite token via /private/accept_invitation, any action by the target user, or the membership/role-consistency and anti-escalation checks enforced by the RBAC role-binding path. As a result, an authenticated user who is an admin of an organization can INSERT or UPDATE org_users rows directly to add any existing public.users account as an active member of that organization with user_right="admin", bypassing the invitation and role-assignment workflow entirely. In testing, an account with no prior access to the organization or its apps could, after such a direct insert, read the organization and app and pass check_min_rights. All versions are affected and no patch was available at the time of publication.
Technical POC Analysis
CWE-863 (Incorrect Authorization): the row-level security policies on the legacy membership table public.orgusers authorise writes on the wrong condition.
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
Capgo's direct exposure of the org_users table through Supabase PostgREST lets a user who is already an organization admin add any existing account as a full administrator, skipping the platform's invitation, token-acceptance, and role-consistency controls. The practical effect is a breakdown of the segregation-of-duties and approval safeguards that customers depend on to govern who holds administrative rights inside their tenant, even though no unauthenticated outsider is exposed. Leadership should treat this as a governance, audit, and customer-assurance issue affecting every organization running an affected Capgo version, and should note that all versions are affected with no vendor-released patch identified at time of analysis.
No vendor-released patch identified at time of analysis. Interim mitigations: revoke or remove PostgREST API access to the public.org_users table so direct inserts and updates are not possible; harden the row-level security policies to require the tmp_users pending-invitation record and the /private/accept_invitation token flow and to enforce the RBAC role-binding membership, role-consistency, and anti-escalation checks; monitor and alert on org_users insert/update events and reconcile all administrative memberships; restrict the number of accounts holding org admin rights and rotate those assignments; limit network exposure of the API endpoint to trusted sources where operationally feasible.
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
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
Capgo's MFA enforcement is defeated by an authentication assurance level (AAL) mismatch across two distinct code paths:
EUVD-2026-87718
GHSA-9x83-rrg6-9pr9
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB