VibeGuard
Detection rules
highexposureconnected project

Storage bucket is public

PUBLIC_BUCKET_EXPOSURE

Objects 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