Capgo - Unauthenticated Organization Member Email Disclosure via get_org_members RPC
Description
Capgo before 12.128.2 contains an improper access control vulnerability in the public.get_org_members RPC function that allows unauthenticated attackers to enumerate organization members. Attackers can invoke the endpoint using only the public sb_publishable_* key and an organization UUID to retrieve sensitive member information including email addresses, user IDs, roles, and pending invitations.
AI Insight
LLM-synthesized narrative grounded in this CVE's description and references.
Affected products
1Patches
Vulnerability mechanics
Root cause
"Missing access control in the Supabase RPC function `get_org_members` — the function performs `PERFORM user_id;` without validating `auth.uid()`, allowing any caller with the public anon key to enumerate organization members."
Attack vector
An unauthenticated attacker who knows an organization's UUID (`guild_id`) can invoke the Supabase RPC endpoint `POST /rest/v1/rpc/get_org_members` using only the public `sb_publishable_*` key (the anon key). The `user_id` parameter is accepted but never validated — the function performs `PERFORM user_id;` and discards it [ref_id=1]. The response returns the full member list including email addresses, user IDs, roles (e.g. super_admin, admin), and pending invitation data from `tmp_users`, enabling PII disclosure and cross-tenant enumeration.
Affected code
The vulnerable endpoint is the Supabase RPC function `public.get_org_members(user_id uuid, guild_id uuid)` defined in `supabase/migrations/20260102120000_fix_get_org_members_include_tmp_users.sql`. The function is marked `SECURITY DEFINER` and executes `PERFORM user_id;` without any authentication or authorization check, so the `user_id` parameter is ignored entirely. The function returns `users.email`, `uid`, `role`, and pending invitation data from `public.tmp_users` for the supplied `guild_id`.
What the fix does
The advisory states the fix was released in version 12.128.2 but does not include a patch diff. The remediation must add an access control check inside `get_org_members` that verifies the caller's `auth.uid()` is a member of the requested `guild_id` before returning member data. Without such a check, the function continues to expose PII to any caller who possesses the public anon key and an org UUID.
Preconditions
- inputAttacker must obtain the target organization's UUID (guild_id).
- configAttacker must have the public sb_publishable_* anon key, which is embedded in client-side code.
Generated on Jun 22, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.
References
2- github.com/Cap-go/capgo/security/advisories/GHSA-x34h-gc65-f6g4mitrevendor-advisory
- www.vulncheck.com/advisories/capgo-unauthenticated-organization-member-email-disclosure-via-get-org-members-rpcmitrethird-party-advisory
News mentions
0No linked articles in our index yet.