Política RLS con USING(true)
Las 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.
Cómo Funciona
Los devs frecuentemente habilitan RLS pero luego crean políticas demasiado permisivas para que las cosas funcionen rápido. Una política como USING(true) da acceso a cada fila para cada usuario, incluyendo anónimos. Esto es funcionalmente equivalente a tener RLS deshabilitado. Crea una falsa sensación de seguridad porque el badge de RLS aparece habilitado en el Dashboard de Supabase, pero no se aplica filtrado real. Los atacantes pueden consultar, modificar o eliminar cualquier fila de la tabla.
ALTER TABLE public.profiles ENABLE ROW LEVEL SECURITY;
CREATE POLICY "allow_all" ON public.profiles
FOR ALL
USING (true)
WITH CHECK (true);ALTER TABLE public.profiles ENABLE ROW LEVEL SECURITY;
CREATE POLICY "users_read_own" ON public.profiles
FOR SELECT USING (auth.uid() = id);
CREATE POLICY "users_update_own" ON public.profiles
FOR UPDATE USING (auth.uid() = id)
WITH CHECK (auth.uid() = id);Ejemplo Real
En 2024, una herramienta SaaS popular fue encontrada con políticas USING(true) en sus tablas de datos de clientes. Un atacante usó la anon key pública para consultar todos los registros de clientes a través del cliente Supabase, exfiltrando miles de registros de negocio antes de que el problema fuera parcheado.
Cómo Prevenirlo
- Nunca uses USING(true) excepto en tablas intencionalmente públicas de solo lectura
- Siempre limita las políticas a auth.uid() para datos del usuario
- Separa políticas SELECT, INSERT, UPDATE, DELETE para control granular
- Audita políticas existentes con: SELECT * FROM pg_policies
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.
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.