Service Role Key Expuesta
La 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.
Cómo Funciona
La service_role key de Supabase bypasea todas las políticas RLS y da acceso CRUD completo a cada tabla. Cuando esta key se expone en bundles de JavaScript del frontend, repos públicos o variables de entorno del cliente (NEXT_PUBLIC_), cualquiera puede extraerla del DevTools del navegador o del código fuente. Con esta key, un atacante puede leer, modificar y eliminar todos los datos, crear o eliminar usuarios y acceder a buckets de storage — efectivamente convirtiéndose en superusuario de la base de datos.
// In a React component or Next.js client code
const supabase = createClient(
'https://abc123.supabase.co',
'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJyb2xlIjoic2VydmljZV9yb2xlIn0...'
);// Client-side: always use the anon key
const supabase = createClient(
process.env.NEXT_PUBLIC_SUPABASE_URL!,
process.env.NEXT_PUBLIC_SUPABASE_ANON_KEY!
);
// Server-side only (API routes, server actions):
const supabaseAdmin = createClient(
process.env.SUPABASE_URL!,
process.env.SUPABASE_SERVICE_ROLE_KEY!
);Ejemplo Real
En 2023, una auditoría de seguridad de proyectos Supabase open-source en GitHub reveló cientos de repos con service_role keys comiteadas en texto plano. Varias aplicaciones en producción tuvieron sus bases de datos exfiltradas antes de que las keys fueran rotadas.
Cómo Prevenirlo
- Nunca uses el prefijo NEXT_PUBLIC_ o VITE_ para la service_role key
- Solo usa service_role en código del servidor (API routes, webhooks, cron jobs)
- Agrega las keys de Supabase a .gitignore y usa variables de entorno
- Rota las keys inmediatamente si aparecen en cualquier historial de commits
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.
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.