FixVibe
Covered by FixVibehigh

Sécurisation de Next.js + Supabase : prévention des contournements de sécurité au niveau des lignes (RLS)

Les applications créées avec Next.js et Supabase s'appuient souvent sur la sécurité au niveau des lignes (RLS) pour protéger les données. L'incapacité d'activer RLS ou une mauvaise configuration du client Supabase peut entraîner une exposition complète de la base de données, permettant aux utilisateurs non autorisés de lire ou de modifier des enregistrements sensibles.

CWE-284

##Impact Les attaquants peuvent contourner la logique de l'application pour lire, mettre à jour ou supprimer des enregistrements dans la base de données si la sécurité au niveau des lignes (RLS) n'est pas correctement appliquée [S1]. Cela entraîne souvent l'exposition d'informations personnelles identifiables (PII) ou de données d'application sensibles à des utilisateurs qui n'ont accès qu'à la clé publique anonyme API.

Cause première

Supabase utilise la sécurité au niveau des lignes de Postgres pour gérer l'accès aux données au niveau de la base de données, ce qui est fondamental pour sécuriser les données [S1]. Dans un environnement Next.js, les développeurs doivent créer un client Supabase qui gère correctement les cookies et les sessions pour maintenir la sécurité lors du rendu côté serveur [S2]. Les vulnérabilités surviennent généralement lorsque :

  • Les tables sont créées sans l'activation de RLS, ce qui les rend accessibles via la clé anonyme publique [S1].
  • Le client Supabase est mal configuré dans Next.js et ne parvient pas à transmettre correctement les jetons d'authentification utilisateur à la base de données [S2].
  • Les développeurs utilisent accidentellement la clé service_role dans le code côté client, qui contourne toutes les politiques RLS [S1].

Réparations concrètes

  • Activez RLS : Assurez-vous que la sécurité au niveau des lignes est activée pour chaque table de votre base de données Supabase [S1].
  • Définir des politiques : Créez des politiques Postgres spécifiques pour les opérations SELECT, INSERT, UPDATE et DELETE afin de restreindre l'accès en fonction de l'UID [S1] de l'utilisateur.
  • Utilisez les clients SSR : Implémentez le package @supabase/ssr pour créer des clients dans Next.js qui gèrent correctement l'authentification côté serveur et la persistance de session [S2].

Comment FixVibe le teste

FixVibe couvre déjà cela via des contrôles d'applications déployées et de dépôt. Le module passif baas.supabase-rls découvre l'URL Supabase et les paires de clés anonymes à partir de bundles JavaScript de même origine, demande à PostgREST les métadonnées de la table publique et effectue des sélections limitées en lecture seule pour confirmer l'exposition des données anonymes sans muter les données client. Les analyses de dépôt exécutent également repo.supabase.missing-rls pour signaler les migrations SQL qui créent des tables publiques sans ENABLE ROW LEVEL SECURITY, et les analyses secrètes recherchent l'exposition de la clé de rôle de service avant qu'elle n'atteigne le navigateur.