Row Level Security Deshabilitado
Las 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.
Cómo Funciona
En Supabase, cada tabla tiene Row Level Security (RLS) deshabilitado por default. Sin RLS, cualquier usuario con la anon key puede hacer operaciones CRUD completas en la tabla a través de la API PostgREST. Esto significa que cualquiera con tu URL de proyecto y anon key (que es pública) puede leer cada fila, borrar datos o insertar registros maliciosos. La anon key está diseñada para ser pública, así que RLS es la única barrera que previene acceso no autorizado a datos. Una sola tabla sin RLS puede exponer todo tu dataset.
-- Migration file
CREATE TABLE public.documents (
id uuid DEFAULT gen_random_uuid() PRIMARY KEY,
user_id uuid REFERENCES auth.users(id),
title text NOT NULL,
content text,
created_at timestamptz DEFAULT now()
);
-- No ALTER TABLE ... ENABLE ROW LEVEL SECURITY!CREATE TABLE public.documents (
id uuid DEFAULT gen_random_uuid() PRIMARY KEY,
user_id uuid REFERENCES auth.users(id),
title text NOT NULL,
content text,
created_at timestamptz DEFAULT now()
);
ALTER TABLE public.documents ENABLE ROW LEVEL SECURITY;
CREATE POLICY "Users can access own documents" ON public.documents
FOR ALL USING (auth.uid() = user_id);Ejemplo Real
Múltiples startups usando Supabase han sido encontradas con RLS deshabilitado en tablas de datos de usuario. En 2023, investigadores de seguridad revelaron que varias startups respaldadas por YC tenían tablas de Supabase públicamente accesibles exponiendo emails, datos de pago y mensajes privados — todo porque RLS nunca fue habilitado.
Cómo Prevenirlo
- Siempre agrega ALTER TABLE ... ENABLE ROW LEVEL SECURITY en cada migración
- Usa el Dashboard de Supabase para auditar el estado de RLS en todas las tablas
- Agrega un check en CI que escanee migraciones buscando ENABLE ROW LEVEL SECURITY faltante
- Nunca asumas que la anon key es secreta — es pública por diseño
Tecnologías Afectadas
Data Hogo detecta esta vulnerabilidad automáticamente.
Escanea Tu Repo GratisVulnerabilidades Relacionadas
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.
Buckets de Storage Públicos
mediumLos 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.