criticalCWE-862

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.

Código Vulnerable
-- 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!
Código Seguro
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

SupabaseNode.jsNext.jsReact

Data Hogo detecta esta vulnerabilidad automáticamente.

Escanea Tu Repo Gratis

Vulnerabilidades Relacionadas