Impacto
Los atacantes pueden eludir la lógica de la aplicación para leer, actualizar o eliminar registros en la base de datos si la seguridad de nivel de fila (RLS) no se aplica correctamente [S1]. Esto a menudo resulta en la exposición de información de identificación personal (PII) o datos confidenciales de aplicaciones a usuarios que solo tienen acceso a la clave pública anónima API.
Causa raíz
Supabase utiliza Postgres Row Level Security para administrar el acceso a los datos en el nivel de la base de datos, lo cual es fundamental para proteger los datos [S1]. En un entorno Next.js, los desarrolladores deben crear un cliente Supabase que maneje correctamente las cookies y las sesiones para mantener la seguridad durante la representación del lado del servidor [S2]. Las vulnerabilidades suelen surgir cuando:
- Las tablas se crean sin habilitar RLS, lo que las hace accesibles a través de la clave pública anónima [S1].
- El cliente Supabase está mal configurado en Next.js y no puede pasar correctamente los tokens de autenticación de usuario a la base de datos [S2].
- Los desarrolladores utilizan accidentalmente la clave
service_roleen el código del lado del cliente, lo que omite todas las políticas RLS [S1].
Arreglos concretos
- Habilite RLS: Asegúrese de que la seguridad de nivel de fila esté habilitada para cada tabla en su base de datos Supabase [S1].
- Definir políticas: Cree políticas de Postgres específicas para las operaciones
SELECT,INSERT,UPDATEyDELETEpara restringir el acceso según el UID [S1] del usuario. - Usar clientes SSR: Implemente el paquete
@supabase/ssrpara crear clientes en Next.js que administren correctamente la autenticación del lado del servidor y la persistencia de la sesión [S2].
Cómo lo prueba FixVibe
FixVibe ya cubre esto mediante comprobaciones de repositorios y aplicaciones implementadas. El módulo pasivo baas.supabase-rls descubre la URL Supabase y pares de claves anónimas de paquetes de JavaScript del mismo origen, solicita a PostgREST metadatos de tablas públicas y realiza selecciones limitadas de solo lectura para confirmar la exposición de datos anónimos sin mutar los datos del cliente. Los análisis de repositorio también ejecutan repo.supabase.missing-rls para marcar las migraciones de SQL que crean tablas públicas sin ENABLE ROW LEVEL SECURITY, y los análisis secretos buscan la exposición de la clave de la función de servicio antes de que llegue al navegador.
