FixVibe
Covered by FixVibehigh

Protegendo Next.js + Supabase: Evitando desvios de segurança em nível de linha (RLS)

Os aplicativos desenvolvidos com Next.js e Supabase geralmente dependem da segurança em nível de linha (RLS) para proteger os dados. A falha na ativação do RLS ou a configuração incorreta do cliente Supabase pode levar à exposição total do banco de dados, permitindo que usuários não autorizados leiam ou modifiquem registros confidenciais.

CWE-284

Impacto

Os invasores podem ignorar a lógica do aplicativo para ler, atualizar ou excluir registros no banco de dados se a segurança em nível de linha (RLS) não for aplicada corretamente [S1]. Isso geralmente resulta na exposição de informações de identificação pessoal (PII) ou dados confidenciais de aplicativos a usuários que só têm acesso à chave pública anônima API.

Causa Raiz

Supabase usa Postgres Row Level Security para gerenciar o acesso aos dados no nível do banco de dados, o que é fundamental para proteger os dados [S1]. Em um ambiente Next.js, os desenvolvedores devem criar um cliente Supabase que lide corretamente com cookies e sessões para manter a segurança durante a renderização do lado do servidor [S2]. As vulnerabilidades normalmente surgem quando:

  • As tabelas são criadas sem RLS habilitado, tornando-as acessíveis através da chave anônima pública [S1].
  • O cliente Supabase está configurado incorretamente em Next.js, falhando ao passar corretamente os tokens de autenticação do usuário para o banco de dados [S2].
  • Os desenvolvedores usam acidentalmente a chave service_role no código do lado do cliente, que ignora todas as políticas RLS [S1].

Correções de concreto

  • Ativar RLS: Certifique-se de que a segurança em nível de linha esteja ativada para todas as tabelas em seu banco de dados Supabase [S1].
  • Definir políticas: Crie políticas Postgres específicas para operações SELECT, INSERT, UPDATE e DELETE para restringir o acesso com base no UID [S1] do usuário.
  • Use clientes SSR: Implemente o pacote @supabase/ssr para criar clientes em Next.js que gerenciam corretamente a autenticação do lado do servidor e a persistência de sessão [S2].

Como FixVibe testa isso

FixVibe já cobre isso por meio de verificações de aplicativos implantados e repositórios. O módulo passivo baas.supabase-rls descobre URL Supabase e pares de chaves anônimas de pacotes JavaScript da mesma origem, solicita ao PostgREST metadados de tabela pública e executa seleções limitadas somente leitura para confirmar a exposição de dados anônimos sem alterar os dados do cliente. As varreduras de repositório também executam repo.supabase.missing-rls para sinalizar migrações SQL que criam tabelas públicas sem ENABLE ROW LEVEL SECURITY, e as varreduras secretas procuram exposição de chave de função de serviço antes que ela chegue ao navegador.