Key takeaway

AI can dramatically reduce the skill and time required to build an application, but it does not remove the need to understand database permissions. A working app should not be considered production-ready until its RLS policies, grants and privileged credentials have been independently checked.

16,326 Supabase Databases Had Readable Tables

AI tools can now produce a functioning app in hours. New research from cybersecurity firm UpGuard shows why functioning and secure are still very different standards.

UpGuard gathered roughly 300,000 domains showing signs of Supabase use and identified 16,326 databases exposing readable tables. More than half showed schema indicators of personally identifiable information, while smaller numbers appeared to contain passwords or authentication tokens.

That does not mean Supabase suffered a breach, and the research does not establish that every exposed application was AI-built. Supabase CISO Bil Harmer told TechCrunch that its projects are “secure by default” and described security as a shared responsibility, while UpGuard argues that AI-assisted development is helping insecure configuration scale faster.

The consequences were not theoretical. UpGuard examined one database used by an African government consulate containing about 25,000 users’ personal information and physical addresses, including emergency-housing locations. Other cases included identity-document information, private messages, customer records and plaintext passwords.

The public key is not the secret

A common mistake is treating a visible Supabase anon or publishable key as though its exposure is itself the vulnerability. Supabase explicitly designs publishable keys for browsers, mobile apps and other public clients. They identify the application; they are not meant to secure the underlying data by secrecy. Access control comes from PostgreSQL grants and Row Level Security (RLS), which determines which rows the anon or authenticated role can read or change.

A public key in frontend code can therefore be normal. A customer table that lets that public client retrieve every row is not. Supabase’s current documentation says RLS should be enabled on exposed tables and database privileges limited to what each role actually needs. Secret or service-role credentials are different: they bypass RLS and should never be shipped in frontend code.

AI makes an old mistake easier to reproduce

Database misconfiguration predates generative AI. What has changed is the number of people who can now create and deploy software without first learning how authentication, databases and authorisation fit together.

That is also why TechView Africa’s guide to building a working app with AI treated a successful interface as only the beginning. Its guide to AI permissions makes the same broader point: useful access should still be limited to what the system actually needs.

UpGuard’s methodology has limits. Researchers initially queried for the common users table, so the dataset naturally leans toward user information. For most of the 16,326 databases, they assessed schemas rather than reading every stored record.

The finding is therefore not evidence that every AI-built app is unsafe. It is evidence that fast software generation does not remove the need to design and test permissions deliberately.

Our Recommendation

Treat an AI-generated app as a prototype until its database access has been tested independently. Before launch, verify RLS on every exposed table, test what signed-out and signed-in users can actually query, minimise grants, and keep privileged credentials on the server.

Sources & Verification

UpGuard — Everything Everywhere: Systemic Data Exposure in Supabase Apps

Supabase — Row Level Security

Supabase — API Keys

TechCrunch — Some Supabase Customers Are Publicly Exposing Reams of People’s Data to the Web

Frequently asked questions

Does the research mean Supabase was hacked?

No. The finding concerns Supabase projects whose database permissions allowed information to be read publicly. It is not evidence that Supabase itself suffered a breach affecting 16,326 databases.

Is it dangerous if a Supabase anon key is visible in website code?

Not by itself. Supabase’s public or anon credentials are designed to be used by browser and mobile applications. Security depends on what that role is permitted to access through database grants and Row Level Security policies.

What is Row Level Security in Supabase?

Row Level Security, or RLS, is a PostgreSQL feature that controls which database rows a user or application role can read, create, change or delete. Proper RLS policies can allow an app to expose its public API while preventing users from accessing records that do not belong to them.

Are AI-built or vibe-coded apps less secure?

Not automatically. The security problem exists when applications are deployed without properly checking authentication, database permissions, secrets and access policies. AI coding can increase the scale of that risk because people can now build and deploy software without necessarily understanding all of the infrastructure generated behind the interface.

Comment
Reader discussion

Leave a comment

Comments cannot be edited or deleted after posting. Please review your comment before submitting.

No comments yet. Start the conversation.

Found an error, outdated step or safety concern? Contact the desk.