FixVibe
Covered by FixVibehigh

Protección de Next.js + Supabase: Prevención de omisiones de seguridad a nivel de fila (RLS)

Las aplicaciones creadas con Next.js y Supabase a menudo dependen de la seguridad de nivel de fila (RLS) para proteger los datos. No habilitar RLS o configurar mal el cliente Supabase puede provocar una exposición total de la base de datos, lo que permite a usuarios no autorizados leer o modificar registros confidenciales.

CWE-284

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_role en 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, UPDATE y DELETE para restringir el acceso según el UID [S1] del usuario.
  • Usar clientes SSR: Implemente el paquete @supabase/ssr para 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.