mediumCWE-732

Buckets de Storage Públicos

Los buckets de storage de Supabase con políticas permisivas permiten a cualquier usuario subir, leer o eliminar archivos incluyendo documentos privados e imágenes de otros usuarios.

Cómo Funciona

Supabase Storage usa políticas similares a RLS para controlar el acceso a archivos. Cuando los buckets están marcados como públicos o tienen políticas permisivas, cualquier usuario puede listar, descargar, subir o eliminar archivos. Los atacantes pueden enumerar rutas de archivos, acceder a uploads privados (fotos de ID, documentos, registros médicos) o subir contenido malicioso. Incluso si el bucket es privado, una política como USING(true) en la tabla storage.objects hace cada archivo accesible a cualquiera con la anon key.

Código Vulnerable
-- Overly permissive storage policy
CREATE POLICY "allow_all_uploads" ON storage.objects
  FOR ALL USING (bucket_id = 'user-files')
  WITH CHECK (bucket_id = 'user-files');
-- Anyone can read/write/delete any file in user-files!
Código Seguro
-- Scoped storage policies
CREATE POLICY "users_upload_own" ON storage.objects
  FOR INSERT WITH CHECK (
    bucket_id = 'user-files' AND
    (storage.foldername(name))[1] = auth.uid()::text
  );
CREATE POLICY "users_read_own" ON storage.objects
  FOR SELECT USING (
    bucket_id = 'user-files' AND
    (storage.foldername(name))[1] = auth.uid()::text
  );

Ejemplo Real

En 2023, un SaaS de salud construido en Supabase tenía políticas de storage públicas en su bucket de documentos. Registros médicos, resultados de laboratorio e imágenes de recetas eran accesibles a cualquiera que adivinara la estructura de rutas de archivos, afectando miles de pacientes.

Cómo Prevenirlo

  • Organiza archivos en carpetas por usuario: {user_id}/filename.ext
  • Limita las políticas de storage a auth.uid() que coincida con la ruta de carpeta
  • Nunca marques buckets como públicos a menos que los archivos sean intencionalmente públicos
  • Usa signed URLs para acceso temporal a archivos privados

Tecnologías Afectadas

SupabaseNode.jsNext.jsReact

Data Hogo detecta esta vulnerabilidad automáticamente.

Escanea Tu Repo Gratis

Vulnerabilidades Relacionadas