FixVibe
Covered by FixVibehigh

Acceso a datos non autorizado mediante a seguridade de nivel de fila Supabase (RLS) ZXCVFIXVIBESEXEEND ZXCVFIXVIBESEG1 A seguranza de nivel de fila (ZXCVFIXVIBETOKEN2ZXCV) faltante ou mal configurada nas aplicacións respaldadas por RLS pode provocar unha exposición total da base de datos. ZXCVFIXVIBESEXEEND ZXCVFIXVIBESEG2 Nas aplicacións respaldadas por Supabase, a seguridade dos datos depende da seguridade do nivel de fila (ZXCVFIXVIBETOKEN3ZXCV). Se ZXCVFIXVIBETOKEN4ZXCV non está habilitado e configurado explícitamente con políticas, calquera usuario que teña a chave anónima pública pode ler, actualizar ou eliminar datos de toda a base de datos. Isto é particularmente crítico en ambientes ZXCVFIXVIBETOKEN2ZXCV onde o cliente RLS adoita inicializarse cunha clave pública ZXCVFIXVIBETOKEN5ZXCV. ZXCVFIXVIBESEXEEND ZXCVFIXVIBESEG3 ## Impacto ZXCVFIXVIBESEXEEND ZXCVFIXVIBESEG4 Se non se implementa a seguranza a nivel de fila (ZXCVFIXVIBETOKEN6ZXCV), os atacantes non autenticados poden consultar datos dunha base de datos ZXCVFIXVIBETOKEN3ZXCV cando as táboas públicas están expostas a través do límite anon RLS. Debido a que as aplicacións ZXCVFIXVIBETOKEN5ZXCV adoitan expoñer a clave ZXCVFIXVIBETOKEN4ZXCV Supabase no código do lado do cliente, un atacante pode usar esta chave para facer REST directo ZXCVFIXVIBETOKEN7ZXCV as chamadas á base de datos sensibles e ignorar as chamadas de acceso á base de datos sensibles do usuario. ZXCVFIXVIBETOKEN2ZXCV. ZXCVFIXVIBESEXEEND ZXCVFIXVIBESEG5 ## Causa raíz ZXCVFIXVIBESEXEEND ZXCVFIXVIBESEG6 Por defecto, as táboas de Postgres en ZXCVFIXVIBETOKEN4ZXCV requiren a activación explícita de Row Level Security para evitar o acceso público RLS. Cando un programador crea unha táboa pero esquece activar ZXCVFIXVIBETOKEN7ZXCV ou non define políticas restritivas, a base de datos pode expor datos a calquera persoa que posúa a chave Supabase ZXCVFIXVIBETOKEN2ZXCV do proxecto. Nas aplicacións ZXCVFIXVIBETOKEN6ZXCV, a representación do servidor e a obtención do lado do cliente tamén requiren unha coidadosa configuración do cliente ZXCVFIXVIBETOKEN5ZXCV para que o contexto de usuario autenticado chegue á capa de base de datos ZXCVFIXVIBETOKEN3ZXCV. ZXCVFIXVIBESEXEEND ZXCVFIXVIBESEG7 ## Correccións concretas ZXCVFIXVIBESEXEEND ZXCVFIXVIBESEG8 1. **Activar ZXCVFIXVIBETOKEN2ZXCV:** Executar Supabase para cada táboa pública que almacene datos da aplicación RLS. ZXCVFIXVIBESEXEEND ZXCVFIXVIBESEG9 2. **Define políticas:** Crea políticas específicas que restrinxen o acceso en función do estado de autenticación do usuario, como Supabase RLS. ZXCVFIXVIBESEXEEND ZXCVFIXVIBESEG10 3. **Clientes do lado do servidor seguros:** ao utilizar RLS, mantén os clientes de función de servizo só como servidor e aínda aplica filtros de propiedade antes de devolver os datos aos usuarios Supabase. ZXCVFIXVIBESEXEEND ZXCVFIXVIBESEG11 ## Como proba Supabase para iso ZXCVFIXVIBESEXEEND ZXCVFIXVIBESEG12 ZXCVFIXVIBETOKEN3ZXCV xa executa unha comprobación de só lectura ZXCVFIXVIBETOKEN4ZXCV ZXCVFIXVIBETOKEN6ZXCV a través de Supabase. O escáner descobre o URL do proxecto ZXCVFIXVIBETOKEN5ZXCV e a clave pública anón dos paquetes de JavaScript da mesma orixe, pídelle a PostgREST metadatos de táboas públicas e tenta seleccións limitadas de só lectura para confirmar se os datos están expostos sen unha sesión de usuario. Non insire, actualiza, elimina nin usa credenciais de función de servizo. As análises de repositorio tamén poden detectar isto antes a través de RLS, que marca as migracións SQL que crean táboas públicas sen ZXCVFIXVIBETOKEN2ZXCV.

In Supabase-backed applications, data security relies on Row Level Security (RLS). If RLS is not explicitly enabled and configured with policies, any user with the public anonymous key can read, update, or delete data across the entire database. This is particularly critical in Next.js environments where the Supabase client is often initialized with a public API key.

CWE-284

Impact

Failure to implement Row Level Security (RLS) allows unauthenticated attackers to query data from a Supabase database when public tables are exposed through the anon boundary [S1]. Because Next.js applications typically expose the Supabase anon key in client-side code, an attacker can use this key to make direct REST API calls to the database, bypassing the intended application logic and accessing sensitive user information [S2].

Root Cause

By default, Postgres tables in Supabase require explicit activation of Row Level Security to prevent public access [S1]. When a developer creates a table but forgets to enable RLS or fails to define restrictive policies, the database may expose data to anyone possessing the project's anon key [S1]. In Next.js applications, server-side rendering and client-side fetching also require careful Supabase client setup so authenticated user context reaches the database layer [S2].

Concrete Fixes

  • Enable RLS: Execute ALTER TABLE "your_table_name" ENABLE ROW LEVEL SECURITY; for every public table that stores app data [S1].
  • Define Policies: Create specific policies that restrict access based on the user's authentication status, such as CREATE POLICY "Users can see their own data" ON your_table_name FOR SELECT USING (auth.uid() = user_id); [S1].
  • Secure Server-Side Clients: When using Next.js, keep service-role clients server-only and still apply ownership filters before returning data to users [S2].

How FixVibe tests for it

FixVibe already runs a read-only Supabase RLS check through baas.supabase-rls. The scanner discovers the Supabase project URL and public anon key from same-origin JavaScript bundles, asks PostgREST for public table metadata, and attempts limited read-only selects to confirm whether data is exposed without a user session. It does not insert, update, delete, or use service-role credentials. Repo scans can also catch this earlier through repo.supabase.missing-rls, which flags SQL migrations that create public tables without ENABLE ROW LEVEL SECURITY.