FixVibe

// docs / baas security / firebase rules scanner

Firebase-Rules-Scanner: offene Regeln in Firestore, Realtime Database und Storage finden

Firebase-Apps scheitern sicherheitstechnisch auf eine konsistente Weise: allow read, write: if true;-Regeln, die vom Test-Mode-Quickstart übrig blieben und nie vor der Produktion ersetzt wurden. KI-Coding-Tools generieren diese Regeln wortwörtlich aus den Dokumentationsbeispielen und fordern den Entwickler selten zur Härtung auf. Dieser Artikel zeigt, wie ein Firebase-Rules-Scanner offene Regeln über Firestore, Realtime Database und Cloud Storage von außerhalb des Projekts erkennt — und wie man behebt, was er findet.

Wie der Scanner offene Firebase-Regeln findet

Firebase services are reachable at predictable public addresses, so a scanner with no credentials can check each one the way an anonymous visitor would. FixVibe's Firebase check covers all three services independently:

  • Firestore. FixVibe finds the project from the deployed app's own Firebase configuration and reports collections that anonymous visitors can read.
  • Realtime Database. FixVibe reports a database whose data anonymous visitors can read — often the whole tree at once.
  • Cloud Storage. FixVibe reports buckets that anonymous visitors can list. Listable storage is a finding even when individual downloads are denied, because it lets attackers find guessable filenames.

Wie der Test-Mode-Footgun tatsächlich aussieht

Die Quickstart-Dokumentation von Firebase enthält einen der am häufigsten kopierten Regelblöcke im Internet:

firebase
rules_version = '2';
service cloud.firestore {
  match /databases/{database}/documents {
    match /{document=**} {
      allow read, write: if true;
    }
  }
}

Firebase fügte diesen Regeln früher eine automatische 30-Tage-Ablaufzeit hinzu. Das hat sich geändert: heute persistieren die Regeln ewig, sofern der Entwickler sie nicht ersetzt. KI-Coding-Tools — trainiert auf jahrelanger Dokumentation, die den Test-Mode-Block enthält — geben ihn häufig wortwörtlich aus und sagen dem Entwickler „das ist deine Sicherheitsregel". Ist sie nicht.

Andere Varianten, die in Produktion auftauchen, aber genauso permissiv sind:

firebase
// future-date variant — equivalent to "if true"
allow read, write: if request.time < timestamp.date(2099, 1, 1);

// authenticated-user variant — any signed-in user reads and writes anything
allow read: if true;
allow write: if request.auth != null;

// any-auth variant — any signed-in user owns every document
allow read, write: if request.auth != null;
  • Eine Variante mit zukünftigem Zeitstempel: eine Regel, die alles bis zu einem weit in der Zukunft liegenden Datum erlaubt. Läuft effektiv nie ab (siehe den hervorgehobenen Block oben).
  • allow read: if true; allow write: if request.auth != null; — öffentliche Lesezugriffe, jeder authentifizierte Nutzer darf schreiben.
  • allow read, write: if request.auth != null; — jeder angemeldete Nutzer kann jedes Dokument lesen oder schreiben, einschließlich der Daten anderer Nutzer.

Was zu tun ist, wenn der Scanner eine offene Regel findet

Offene Firebase-Regeln sind ein Runtime-Notfall. Der Fix hat in allen drei Diensten dieselbe Form: grenze jede Regel auf request.auth.uid gegen ein explizites Eigentümerfeld ein. Jeder Dienst hat seine eigene Regelsyntax:

Firestore

match /users/{userId} { allow read, write: if request.auth != null && request.auth.uid == userId; }. Die Pfad-Segment-Bindung {userId} wird zum einzigen Dokument, das der Nutzer berühren kann.

firebase
match /users/{userId} {
  allow read, write: if request.auth != null
                     && request.auth.uid == userId;
}

Echtzeitdatenbank

{ "rules": { "users": { "$uid": { ".read": "$uid === auth.uid", ".write": "$uid === auth.uid" } } } }. Der $uid-Wildcard erfasst das Pfadsegment für den Vergleich.

json
{
  "rules": {
    "users": {
      "$uid": {
        ".read":  "$uid === auth.uid",
        ".write": "$uid === auth.uid"
      }
    }
  }
}

Cloud-Speicher

service firebase.storage { match /b/{bucket}/o { match /users/{userId}/{allPaths=**} { allow read, write: if request.auth.uid == userId; } } }. Konvention: speichere Dateien unter users/[uid]/[filename] und lass den Pfad das Eigentum erzwingen.

firebase
service firebase.storage {
  match /b/{bucket}/o {
    match /users/{userId}/{allPaths=**} {
      allow read, write: if request.auth.uid == userId;
    }
  }
}

Deploy rules via the Firebase CLI: firebase deploy --only firestore:rules, firebase deploy --only database, firebase deploy --only storage. Verify the new rules are in production by re-running the FixVibe scan — the open-rules finding should clear.

bash
firebase deploy --only firestore:rules
firebase deploy --only database
firebase deploy --only storage

Wie sich das mit Firebases eingebauten Tools vergleicht

Die Firebase-Konsole zeigt dir die aktuellen Regeln, auditiert sie aber nicht gegen das Runtime-Verhalten. Der Firebase-Rules-Simulator lässt dich Regel-Logik gegen synthetische Requests testen — nützlich, aber lokal. Keines der beiden Tools sagt dir, was deine Produktionsregeln tatsächlich einem anonymen Angreifer im öffentlichen Internet zurückgeben. Ein externer Scanner wie FixVibe (oder Burp Suite mit manueller Konfiguration) ist das Einzige, was aus dem gleichen Winkel sondiert wie ein Angreifer. Googles eigener App Check mildert Missbrauch, ersetzt aber nicht korrekt eingegrenzte Regeln.

Häufig gestellte Fragen

Liest oder modifiziert der Scanner meine Firestore-Daten?

Passive Scans geben höchstens einen anonymen Lesezugriff pro Dienst ab, um zu bestätigen, ob die Regeln es erlauben. Der Scanner notiert Response-Form und Vorhandensein von Daten — er paginiert nicht, zählt keine Dokumente auf und schreibt nicht. Schreib-Sondierungen sind hinter verifizierter Domain-Eigentümerschaft eingegrenzt und laufen nie gegen unverifizierte Ziele.

Was, wenn mein Firebase-Projekt App Check verwendet?

App Check lehnt nicht authentifizierte Requests mit 403 ab. Ein Scanner ohne App-Check-Token sieht bei jeder Sondierung 403 — was das korrekte Ergebnis ist. App Check ist kein Ersatz für Regel-Korrektheit (ein gestohlenes App-Check-Token plus eine offene Regel leakt immer noch Daten), aber es blockiert opportunistische externe Scans.

Kann der Scanner partielle Regel-Fehlkonfigurationen erkennen (Lesen offen, Schreiben geschlossen)?

Yes. Open read access and open write access are reported as separate findings, because data exfiltration and data manipulation are separate risks.

Funktioniert das für Firebase-Apps, die unter einer eigenen Domain deployed sind?

Ja. Der Scanner extrahiert die Firebase-Projekt-ID aus dem deployten Bundle, nicht aus der Domain. Eigene Domains, app.web.app-Subdomains und selbstgehostete Firebase-Apps funktionieren alle gleich, solange das JavaScript-Bundle erreichbar ist.

Nächste Schritte

Run a free FixVibe scan against your production URL — the Firebase rules check runs on every plan and flags open rules across Firestore, Realtime Database, and Cloud Storage. For a deeper explainer on the allow read, write: if true pattern specifically, see Firebase allow read, write: if true explained. For the umbrella view across Supabase, Firebase, Clerk, and Auth0, read BaaS misconfiguration scanner.

// scanne deine baas-oberfläche

Finde die offene Tabelle, bevor es jemand anderes tut.

Gib eine Produktions-URL ein. FixVibe ermittelt die BaaS-Anbieter, mit denen deine App spricht, identifiziert ihre öffentlichen Endpunkte und meldet, was ein nicht authentifizierter Client lesen oder schreiben kann. Kostenlos, ohne Installation, ohne Karte.

  • Kostenloser Tarif — 3 Scans pro Monat, ohne Anmeldekarte.
  • Passives BaaS-Fingerprinting — keine Domain-Verifizierung erforderlich.
  • Supabase, Firebase, Clerk, Auth0, Appwrite und mehr.
  • Coding-agent prompts where code/config applies, plus provider-console steps for hosted BaaS fixes.
Kostenlosen BaaS-Scan starten →

keine anmeldung erforderlich

Firebase-Rules-Scanner: offene Regeln in Firestore, Realtime Database und Storage finden · FixVibe