Zum Inhalt springen

Prüfregel · RSC-SEC-066

RLS-Policy prüft nur die Anmeldung, nicht den Eigentümer

SicherheitSchweregrad: HochCWE-639OWASP A01:2021

Findet Policies mit `auth.role() = 'authenticated'` oder `auth.uid() is not null` ohne Bezug auf den Datensatz-Eigentümer.

Warum das zählt

Das ist das häufigste Mandantentrennungs-Leck in KI-gebauten Supabase-Apps — und das unauffälligste. Die Policy verlangt, dass jemand angemeldet ist, aber nicht, dass ihm der Datensatz gehört. Wer sich irgendein Konto anlegt, liest die Daten aller anderen.

Von außen ist das unsichtbar: Der anonymen Rolle gibt diese Policy nichts, die Tabelle antwortet mit null Zeilen und sieht in jedem Außen-Scan sauber aus. Erst ein angemeldetes Konto zeigt den Unterschied — deshalb rutscht der Fehler durch fast jede Prüfung.

Fix: Jede Bedingung an auth.uid() binden, typischerweise `auth.uid() = user_id`. Bei geteilten Datensätzen über eine Mitgliedschaftstabelle prüfen, nicht über die bloße Rolle. Wichtig: für jede Operation einzeln — SELECT, INSERT, UPDATE und DELETE haben getrennte Bedingungen.

Prüfstufe

Quellcode aus Source MapsRepo-Zugang (Deep-Scan)

So behebt ihr es

Die Bedingung an die Identität binden: `using (auth.uid() = user_id)`.

Eigene App kostenlos prüfen