Zum Inhalt springen

Firebase-Nutzer kann sich selbst Rechte geben

Prüfregel · RSC-SEC-133

  • Sicherheit
  • Schweregrad: Hoch
  • CWE-269
  • OWASP A01-2021

Findet `match /users/{uid}` (bzw. Profil-Collection) mit `allow write: if request.auth.uid == uid` ohne Schutz des Rollen-/Rechte-Felds — gemeldet, wenn die Regeln ein solches Feld (`role`, `isAdmin`, `admin`, `plan`, `premium`) als Berechtigung lesen.

Warum das zählt

Das ist das Firebase-Gegenstück zur Selbst-Beförderung in Supabase (RSC-SEC-111). `allow write: if request.auth.uid == uid` sieht sauber aus und bindet an den Eigentümer — beantwortet aber nur, WESSEN Dokument geändert wird, nicht WELCHE Felder. Firestore kennt keinen Feldschutz von sich aus.

Trägt dasselbe Dokument die Rolle, den Tarif oder ein `isAdmin`-Flag — und die Regeln verraten das, weil sie es anderswo als Berechtigung lesen (`get(/…/users/$(uid)).data.role == 'admin'`) —, schreibt ein in Sekunden selbst angelegtes Konto sein eigenes `role` auf `admin` einfach mit.

Fix: In der Schreibregel das Rollen-Feld gegen den bisherigen Wert pinnen oder mit `request.resource.data.diff(resource.data).affectedKeys().hasOnly([...])` nur die harmlosen Felder zulassen. Sauberer ist, Rollen in einer eigenen Collection zu führen, die nur Admins bzw. der Server beschreiben.

Prüfstufe

  • Repo-Zugang (Deep-Scan)

So behebt ihr es

Das Rollen-Feld in der Schreibregel gegen den Altwert pinnen (`request.resource.data.role == resource.data.role`) oder mit `affectedKeys().hasOnly([...])` nur harmlose Felder zulassen — am besten die Rolle gar nicht im Nutzer-Dokument führen.

Eigene App kostenlos prüfen