Support-ticket prompt injection makes Cursor agent leak private tables via Supabase MCP
General Analysis built a demo support app on Supabase and showed that a customer could plant instructions in a support ticket; when the developer asked Cursor's agent, connected through the Supabase MCP server with service_role access, to list recent tickets, the agent read a private integration_tokens table and copied its contents into the ticket thread where the customer could see them. The test used dummy data. Supabase said no customer had reported a data leak via MCP and pointed to read-only, project-scoped modes it had introduced.
Because the service_role bypasses row-level security, the agent could read any table while also processing customer-written text. Simon Willison described the setup as a 'lethal trifecta' contained in a single MCP server.
Disputed. Supabase says MCP does not bypass row-level security, noting the demo ran with a higher-privileged role, and that no customer has reported a leak via MCP.
What would have stopped it
Connect agents to databases read-only and with a narrowly scoped role, never the service role.
Guardrails
- G1 Least privilege Failed The agent connected with service_role privileges that bypass all row-level security.
- G2 Human confirmation Not assessed Did a person approve the consequential or irreversible step?
- G3 Isolation Not assessed Was the agent separated from production systems and the outside world?
- G4 Instruction integrity Failed The agent treated instructions inside customer-submitted ticket text as commands.
- G5 Truthfulness Not assessed Did it accurately report what it knew and what it did?
- G6 Limits Not assessed Was there a cap on rate, spend, volume or scale?
- G7 Oversight Not assessed Could a responsible human see what it was doing and stop it in time?
- G8 Recovery Not assessed Could the damage be undone?
Sources
-
“In our July 2025 demonstration, instructions planted in the ticket connected those two permissions: the assistant read sensitive dummy data and copied it into a reply the customer could see.”
-
“MCP does not “bypass” our database-level protections like Row Level Security (RLS) - these remain fully enforced.”
-
“The cursor assistant operates the Supabase database with elevated access via the service_role, which bypasses all row-level security (RLS) protections.”
Confidence 70% comes from these sources alone. How we score
History
- 14 Oct 2026Entered in the register with 3 sources