Signup-Trigger übernimmt die Rolle aus selbst gesetzten Metadaten
Prüfregel · RSC-SEC-118
- Sicherheit
- Schweregrad: Kritisch
- CWE-269
- OWASP A01-2021
Findet einen Trigger auf `auth.users`, dessen Funktion beim Registrieren eine Berechtigungs-Spalte (Rolle, Plan, is_admin) aus `raw_user_meta_data` schreibt — Werte, die der Nutzer bei der Anmeldung selbst mitgibt.
Warum das zählt
Beim Registrieren kann der Client beliebige Metadaten mitsenden: `supabase.auth.signUp({ options: { data: { role: 'admin' } } })`. Übernimmt der `handle_new_user`-Trigger diesen Wert in die Rollen- oder Rechte-Spalte, macht sich jeder mit der Anmeldung selbst zum Admin.
Der Fehler ist unsichtbar für jeden Außen-Scan: Die Tabelle ist anonym leer, und die Policy kann korrekt an `auth.uid()` binden — die Rechteausweitung passiert vor der Policy, im Trigger.
So prüfen: ein Konto mit `data: { role: 'admin' }` anlegen und die eigene Zeile ansehen. Richtig ist ein fester Default im Trigger und eine getrennte, nur serverseitig beschreibbare Rollenverwaltung.
Prüfstufe
- Repo-Zugang (Deep-Scan)
So behebt ihr es
Die Spalte im Trigger auf einen festen Default setzen (z. B. 'user'); Rollen nur serverseitig vergeben, nie aus raw_user_meta_data übernehmen.