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_roleno 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,UPDATEeDELETEpara restringir o acesso com base no UID [S1] do usuário. - Use clientes SSR: Implemente o pacote
@supabase/ssrpara 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.
