highexposureconnected project
Storage bucket is public
PUBLIC_BUCKET_EXPOSUREObjects in a public bucket are served to anyone with the URL, with no auth check. Object paths are frequently guessable, so "public" means "published" for anything stored there.
What the finding looks like
highStorage bucket "avatars" is public
How to fix it
This is real generator output, not a template — a scan substitutes your schema, table and inferred ownership column.
-- Generated by VibeGuard. Review before running in production.
-- Making bucket 'avatars' private means its objects are
-- only reachable through signed URLs or a policy on storage.objects.
UPDATE storage.buckets SET public = false WHERE id = 'avatars';
-- Then grant the access you actually intend, for example owner-scoped reads
-- where the first path segment is the user id:
CREATE POLICY avatars_read_own
ON storage.objects
FOR SELECT
TO authenticated
USING (
bucket_id = 'avatars'
AND (storage.foldername(name))[1] = ((SELECT auth.uid())::text)
);Related guides
What people search for
supabase public storage bucket securitysupabase storage objects rls
Check your own project
This rule needs a connected project. Start with the free probe to see what is exposed publicly.
Run the free audit