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.
-- 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!-- 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
Data Hogo detecta esta vulnerabilidad automáticamente.
Escanea Tu Repo GratisVulnerabilidades Relacionadas
Row Level Security Deshabilitado
criticalLas tablas de Supabase sin RLS habilitado permiten a cualquier usuario autenticado o anónimo leer, insertar, actualizar y eliminar todas las filas usando la librería cliente.
Política RLS con USING(true)
criticalLas políticas RLS que usan USING(true) o WITH CHECK(true) efectivamente deshabilitan la seguridad a nivel de fila al permitir todas las operaciones para todos los usuarios.
RLS Habilitado Sin Políticas
highRLS está habilitado en una tabla pero no hay políticas definidas, lo que silenciosamente bloquea todo el acceso incluyendo queries legítimos de tu aplicación.
Service Role Key Expuesta
criticalLa service_role key de Supabase está hardcodeada en código frontend, comiteada en un repo o expuesta en bundles del cliente, dando acceso admin completo a la base de datos a cualquiera.