Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessObtain org_admin in SSO-enabled org
-
DeliveryPATCH provider_id via PostgREST to attacker IdP
-
ExploitAuthenticate asserting owner's email
-
ExecutionMerge attaches attacker identity, nulls owner password
-
ImpactAccount takeover and owner lockout
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 | Exploitation requires that the attacker already holds the org_admin tier permission (org.update_settings) within the target organization AND that the organization has an active SSO provider configured. The concrete flaw is that migration 20260826100000_sso_providers_block_direct_active_insert.sql's BEFORE UPDATE guard freezes only dns_verified_at, domain, status and enforce_sso - leaving provider_id (plus metadata_url and attribute_mapping) writable - while the table's ALL grant to the anon/authenticated roles and the row-scoped RLS policy allow_org_admins_update_sso_providers impose no column-level restriction, so an org_admin can PATCH provider_id over PostgREST. Limiting factors: no unauthenticated path (PR:H - a valid org_admin account is mandatory), the org must have SSO actively configured, and the attacker must control an IdP able to assert the owner's email; there is no patched version, so mitigation requires column-level grants/RLS or removing the ALL grant. |
| Impact | The CVSS 4.0 vector (AV:N/AC:L/AT:N/PR:H/UI:N/VC:H/VI:H/VA:H, score 8.6) is internally consistent with the description: exploitation is fully network-reachable over PostgREST with low complexity, but is gated behind PR:H - the attacker must already hold the org_admin tier permission (org.update_settings). This is a genuine impact chain (org_admin → org owner/super_admin account takeover) rather than a high-CVSS-but-hollow issue, but the PR:H prerequisite plus the requirement that the target org has an active SSO provider configured materially narrows the real-world attacker population to insiders/compromised admins within SSO-enabled organizations. No EPSS score, CISA KEV listing, or public POC is present in the provided data, so there is no evidence of active or automated exploitation - this is a targeted, precondition-heavy escalation, not a mass-exploitable flaw. The one signal that raises urgency is that no patched version is available (through 12.261.0), leaving affected orgs with no clean remediation. Note the tag 'Authentication Bypass' vs CWE-639 (authorization/IDOR): the root cause is missing column-level authorization, though the ultimate effect is indeed an SSO authentication bypass, so both framings are defensible. |
| Exploit ScenarioDerived | An attacker who already holds org_admin in a Capgo organization that has an active SSO provider issues a PostgREST PATCH against public.sso_providers, rewriting the still-writable provider_id to an identity provider they control (the BEFORE UPDATE guard freezes dns_verified_at/domain/status/enforce_sso but not provider_id). They then authenticate through their own IdP while asserting the org owner's email; the server-side provider match succeeds and the merge routine attaches the attacker's identity to the owner account, nulls its password, and deletes the owner's other identities and sessions. No public exploit code is identified at time of analysis. |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Sep 26, 2026
Vertical privilege escalation and account takeover in Capgo (capgo.app) through 12.261.0: an authenticated attacker who already holds the org_admin tier permission org.update_settings can rewrite the provider_id column of a public.sso_providers row over PostgREST and point the organization's email-domain trust anchor at an identity provider they control, after which the server-side SSO merge routine binds the attacker's identity to the legitimate org owner account, nulls that account's password, and deletes its other identities and sessions. The impact is full owner/super_admin takeover plus lockout of the real owner, although exploitation is gated on the target organization having an active SSO provider configured and on the attacker already possessing org_admin in that organization; no public exploit code was identified at time of analysis and there is no CISA KEV entry. The incomplete nature of the fix (a BEFORE UPDATE guard that freezes dns_verified_at, domain, status and enforce_sso but leaves provider_id, metadata_url and attribute_mapping writable under a table-wide ALL grant with only row-scoped RLS) makes this a durable privilege-escalation path rather than a one-off misconfiguration.
RemediationAI
No vendor-released patch is identified at time of analysis (“no patched version is available”), so mitigation is configuration- and code-level until Capgo ships one. The highest-value fix is to remove the table-wide ALL grant on public.sso_providers from the anon and authenticated roles and replace it with column-level grants that allow UPDATE only on columns that are legitimately user-editable, explicitly excluding provider_id, metadata_url and attribute_mapping; this does not require client changes for read paths but will break any legitimate org_admin self-service SSO reconfiguration flow that depends on writing provider_id, which must then be moved to a privileged server-side/admin path. In parallel, extend the BEFORE UPDATE guard trigger enforce_sso_provider_client_update_guard() to also freeze provider_id, metadata_url and attribute_mapping, and either add a column-scoped RLS policy or a CHECK-style assertion so the row-scoped policy allow_org_admins_update_sso_providers cannot authorize changes to those keys; the trade-off is that any intended SSO provider rotation must go through a migration or service role. Because exploitation requires an existing org_admin (org.update_settings), treat that tier as highly trusted, review the current org_admin membership list, and audit sso_providers rows and identity-merge events for unexpected provider_id changes, password nulls, or mass identity/session deletions; rotate or force re-authentication for affected owners and verify owner credentials, identities and sessions are intact before restoring service. Given the account-takeover and lockout potential, monitoring PostgREST PATCH traffic to public.sso_providers for provider_id modifications is a reasonable detection control, and the vendor advisory at https://github.com/Cap-go/capgo.app/security/advisories/GHSA-jpjp-v827-j4gc should be tracked for the eventual patched release, with the VulnCheck advisory at https://www.vulncheck.com/advisories/capgo-sso-provider-id-authentication-bypass-via-incomplete-migration as a secondary reference.
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's SSO configuration is stored in the PostgreSQL table public.sso_providers, which is exposed to the Supabase/PostgREST API surface and covered by CPE cpe:2.3:a:cap-go:capgo.app:*:*:*:*:*:*:*:* (all versions through 12.261.0). The flaw maps to CWE-639 (Authorization Bypass Through User-Controlled Key): the security decision about which identity provider is trusted for a given email domain is derived from a key, provider_id, that the attacker can modify. Migration 20260826100000_sso_providers_block_direct_active_insert.sql installs the trigger function enforce_sso_provider_client_update_guard() as a BEFORE UPDATE guard that freezes only dns_verified_at, domain, status and enforce_sso, deliberately (but incompletely) protecting the columns that determine whether a domain-to-IdP binding is active; provider_id, metadata_url and attribute_mapping are left writable. The table is granted ALL to the anon and authenticated database roles with no column-level restrictions, and the PostgreSQL row-level security policy allow_org_admins_update_sso_providers constrains only which row an org_admin may update, not which columns - so an UPDATE issued through PostgREST as an org_admin passes both layers. Because provider_id is the trust anchor that binds an email domain to an authorized IdP, redirecting it to an attacker-controlled IdP lets the attacker authenticate asserting the org owner's email; the server-side provider match succeeds and the merge routine attaches the attacker's SSO identity to the existing owner record, nulls the password and removes other identities and sessions. Reachability is fully network-based over PostgREST with low attack complexity and no user interaction, but the CVSS 4.0 vector reports PR:H, i.e. a valid org_admin account with org.update_settings is mandatory and there is no unauthenticated path.
Know when PostgreSQL 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:H/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N
Network-reachable via PostgREST with low complexity, but requires pre-held org_admin privilege (PR:H); full account takeover yields C:H/I:H and owner lockout gives A:H.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
DescriptionCVE.org
Capgo (capgo.app) through version 12.261.0 contains an incomplete access-control fix for the public.sso_providers table. Migration 20260826100000_sso_providers_block_direct_active_insert.sql installs a BEFORE UPDATE guard (enforce_sso_provider_client_update_guard()) that freezes only the dns_verified_at, domain, status and enforce_sso columns; provider_id (as well as metadata_url and attribute_mapping) is left writable. Because the table is granted ALL to the anon and authenticated roles with no column-level restriction, and PostgreSQL row-level security policies such as allow_org_admins_update_sso_providers constrain only which row may be updated and not which columns, a user holding the org_admin tier permission org.update_settings can PATCH provider_id over PostgREST to an identity provider under their control. Since provider_id is the trust anchor binding an email domain to an authorized IdP, the attacker can then authenticate through their own IdP while asserting the org owner's email; the server-side provider match succeeds and the merge routine attaches the attacker's SSO identity to the existing owner account, nulls its password, and deletes its other identities and sessions. This results in vertical privilege escalation from org_admin to org owner/super_admin, account takeover, and lockout of the legitimate owner. Exploitation requires that the target organization has an active SSO provider configured and that the attacker already holds org_admin in that organization. No patched version is available.
Technical POC Analysis
CWE-639 (Authorization Bypass Through User-Controlled Key): ssoproviders.providerid is the sole trust anchor binding an email domain to an authorized IdP, but it is client-writable.
Full technical POC analysis - root cause, step-by-step exploitation and patch breakdown - is part of the Pro and Business plans.
Executive ViewAI
Capgo (capgo.app) versions through 12.261.0 are affected by a high-severity privilege escalation vulnerability that enables an attacker with existing org_admin permissions to take over the organization owner account, resulting in full control and lockout of legitimate owners. This impacts organizations using Capgo with an active SSO provider, potentially leading to unauthorized access to sensitive data and operational disruption. Leadership should prioritize mitigation due to the risk of complete account takeover and loss of administrative control.
No vendor-released patch identified at time of analysis. Interim mitigations include restricting org_admin role assignments, auditing sso_providers configurations, enforcing MFA, and monitoring for anomalous SSO activity.
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
Attack Technique
Authentication bypass attacks exploit flaws in the verification mechanisms that control access to systems and applications.
Privilege escalation occurs when an attacker leverages flaws in access control mechanisms to gain permissions beyond what they were originally granted.
Affected Products (CPE)CVE.org
More in PostgreSQL
View allPostgreSQL libpq functions PQescapeLiteral(), PQescapeIdentifier(), PQescapeString(), and PQescapeStringConn() improperl
An issue was discovered in Appsmith before 1.52. Rated critical severity (CVSS 9.8), this vulnerability is remotely expl
Argument injection vulnerability in PostgreSQL 9.2.x before 9.2.4, 9.1.x before 9.1.9, and 9.0.x before 9.0.13 allows re
Unauthenticated arbitrary file write in Splunk Enterprise (below 10.2.4 and 10.0.7) and Splunk Cloud Platform (below 10.
Unauthenticated SQL injection in Sangoma Switchvox SMB Edition 8.3 (build 104997) lets remote attackers execute arbitrar
PostgreSQL versions before 9.2.22, 9.3.18, 9.4.13, 9.5.8 and 9.6.4 are vulnerable to incorrect authentication flaw allow
The build_tablename function in pgsql.c in the PostgreSQL (aka pgsql) extension in PHP through 5.6.7 does not validate t
A vulnerability in the h2oai/h2o-3 REST API versions 3.46.0.4 allows unauthenticated remote attackers to execute arbitra
In PostgreSQL 9.3 through 11.2, the "COPY TO/FROM PROGRAM" function allows superusers and users in the 'pg_execute_serve
Unauthenticated SQL injection in Vendure Shop API allows remote attackers to execute arbitrary SQL commands against the
Parse Server is an open source http web server backend. Rated critical severity (CVSS 10.0), this vulnerability is remot
Hard-coded default PostgreSQL credentials shipped in the docker-compose.yaml of langgenius Dify through version 1.5.1 al
EUVD-2026-87707
GHSA-553q-8vcm-9vxv
NVD
CVE.org
EPSS
Vulnrichment
Exploit-DB