Skip to main content

Capgo EUVDEUVD-2026-87718

| CVE-2026-100623 HIGH
Incorrect Authorization (CWE-863)
2026-09-26 VulnCheck GHSA-9x83-rrg6-9pr9
8.7
CVSS 4.0 · Vendor: VulnCheck
View

Attack ChainAIDerived

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

  1. Access
    Authenticate as existing org admin
  2. Delivery
    Direct PostgREST INSERT into public.org_users
  3. Exploit
    RLS check_min_rights('admin') passes
  4. Execution
    Arbitrary account set user_right=admin
  5. Impact
    Target 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.

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

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

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 7.1 HIGH

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.

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

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) 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

Why It Matters

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.

Business Impact: Medium
Compensating Controls

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

EPSS Score
0.3%
Top 77% exploitable
Prevalence
Low
niche Capacitor OTA live-update backend, no broad enterprise 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
Medium
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-100619 HIGH
8.7 Sep 26

Authenticated principals who hold an app-scoped upload/write/all API key with upload+ rights - or any user granted write

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