Severity by source
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:L/VI:N/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
Network-accessible unauthenticated endpoint with no complexity; only limited confidentiality impact (app ID existence), no integrity or availability impact, no scope change.
Primary rating from Vendor (VulnCheck).
CVSS VectorVendor: VulnCheck
Lifecycle Timeline
2DescriptionCVE.org
Capgo before 12.128.2 contains an information disclosure vulnerability in the public.exist_app_v2 RPC function that allows unauthenticated attackers to enumerate app_ids by calling POST /rest/v1/rpc/exist_app_v2 with arbitrary appid parameters. Remote attackers can exploit this SECURITY DEFINER function to determine whether specific app_ids exist in the public.apps table, enabling cross-tenant app enumeration and privacy violations.
AnalysisAI
Unauthenticated app enumeration in Capgo before 12.128.2 allows remote attackers to determine whether specific app_ids exist across all tenants by querying the exposed exist_app_v2 RPC endpoint without credentials. The root cause is a PostgreSQL SECURITY DEFINER function that executes with elevated owner privileges, bypassing row-level security policies and enabling cross-tenant information disclosure via the PostgREST API at POST /rest/v1/rpc/exist_app_v2. No active exploitation has been confirmed (not in CISA KEV) and no public exploit code is identified at time of analysis, though the attack requires no authentication and trivial HTTP tooling.
Technical ContextAI
Capgo is a live-update platform for Capacitor mobile apps, built on a Supabase backend which exposes PostgreSQL functions via a PostgREST REST API. The vulnerable function, public.exist_app_v2, is declared as SECURITY DEFINER - a PostgreSQL mechanism that causes the function to execute with the privileges of its owning database role rather than the calling role. This design pattern, when applied to public-facing RPC endpoints, effectively nullifies row-level security (RLS) policies that would otherwise restrict cross-tenant data access, because RLS is enforced based on the session role, not the function owner. The result is that an unauthenticated HTTP client can POST an arbitrary appid to /rest/v1/rpc/exist_app_v2 and receive a boolean signal revealing whether that app ID exists in the public.apps table. The root cause class is CWE-200 (Exposure of Sensitive Information to an Unauthorized Actor), specifically the misconfigured privilege escalation path within a shared multi-tenant data model. The CPE cpe:2.3:a:capgo:capgo:*:*:*:*:*:*:*:* covers all versions of the Capgo application prior to the fix.
RemediationAI
Upgrade Capgo to version 12.128.2 or later, as documented in the vendor security advisory at https://github.com/Cap-go/capgo/security/advisories/GHSA-wjqr-gmx8-jj56. For self-hosted deployments that cannot immediately upgrade, the most targeted compensating control is to revoke public (unauthenticated) access to the /rest/v1/rpc/exist_app_v2 endpoint at the API gateway or reverse proxy layer - this has the trade-off of breaking any legitimate unauthenticated callers of the function, which should be none in a correctly designed multi-tenant system. Alternatively, the SECURITY DEFINER attribute can be removed from the function and replaced with SECURITY INVOKER so that caller-level RLS policies are enforced; this requires testing to ensure the function still operates correctly for authenticated callers. Restricting the PostgREST anon role from executing the exist_app_v2 function via a REVOKE EXECUTE statement is also a precise mitigation with minimal operational impact. The VulnCheck advisory is available at https://www.vulncheck.com/advisories/capgo-information-disclosure-via-unauthenticated-rpc-function-exist-app-v2 for additional context.
Authentication bypass in Capgo before 12.128.2 lets remote unauthenticated attackers mint arbitrary API keys by tamperin
Cross-domain SSO account takeover in Capgo before 12.128.2 allows an attacker with enterprise org admin access and a mal
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
Rate-limit bypass in Capgo versions prior to 12.128.2 lets remote unauthenticated attackers flood the channel_self endpo
Cross-tenant data poisoning in Supabase Capgo before 12.128.2 allows remote unauthenticated attackers to corrupt billing
Server-side privilege escalation in Capgo before 12.128.2 lets authenticated users holding build permissions abuse a pat
Unauthenticated information disclosure in Capgo before 12.128.2 lets remote attackers query the /functions/v1/channel_se
Account takeover in Capgo before 12.128.2 stems from a password-change endpoint that omits current-password validation (
Information disclosure in Capgo (Capacitor live-update/OTA platform) before 12.128.2 lets unauthenticated callers abuse
Unauthenticated information disclosure in Capgo before 12.128.2 lets remote attackers read organization RBAC role bindin
Cross-tenant authorization bypass in Capgo before 12.128.2 lets authenticated users impersonate another tenant's limited
Same weakness CWE-200 – Information Exposure
View allSame technique Information Disclosure
View allShare
External POC / Exploit Code
Leaving vuln.today
EUVD-2026-38751