
Security News
Happy Birthday, Shai-Hulud
It has been one year since Shai-Hulud made its first appearance on npm.
firebase-security
Advanced tools
Audit Firebase Firestore Rules for the infamous 'if true' / wildcard-match-all data leak patterns. Keyless --discover mode parses your repo + probes Firestore REST anon (no service account). Active probe confirms leaks live.
Detect the infamous Firebase data-leak patterns (
match /{document=**} { allow read, write: if true; }, expired test-mode rules, auth-without-ownership) in anyfirestore.rulesfile. Optional active probe sends an anonymous GET to the Firestore REST endpoint to PROVE the leak with real data.
▶ Run it without installing anything → apify.com/renzomacar/firebase-security-auditor (paste your firestore.rules + optional project ID, get HTML report)
⚡ Want me to run it for you and send back a written report? $99, 24h delivery → https://perufitlife.github.io/supabase-security-skill/ (one landing covers all five — Supabase, PocketBase, Appwrite, Hasura, Firebase)
Firebase Firestore rules are easy to get wrong, and the failure mode is the worst possible: silent + total. The patterns I see over and over:
match /{document=**} { allow read, write: if true; } — leftover from firebase init. Anyone with the project ID can dump every collection. Made HN multiple times.request.time < timestamp.date(2026, 6, 1) — Firebase generates this in test mode. Expires on a date but is wide-open BEFORE that date.if request.auth != null without ownership check — same anti-pattern as PocketBase @request.auth.id != "". Any anonymous-auth user can read/write everything.allow read: if true on user uploads — exposes private files (PII docs, payment proofs).Run against a local rules file (no auth needed):
npx firebase-security firestore.rules
With active probe (sends anonymous GET to your project's REST endpoint):
npx firebase-security firestore.rules --project-id my-firebase-project --html report.html
Probe-only mode (no rules file, just verify whether anonymous reads work against the deployed DB):
npx firebase-security --project-id my-firebase-project --html report.html
| # | Check | Severity |
|---|---|---|
| 1 | match /{document=**} with if true (the infamous wide-open pattern) | CRITICAL |
| 2 | if true literal anywhere in rules | CRITICAL |
| 3 | if request.auth != null without ownership check | HIGH |
| 4 | Test-mode timestamp rule (open until expiry date) | HIGH |
| 5 | Catch-all read open + write closed | MEDIUM |
| 6 | Storage rules with open read on user uploads | HIGH |
| 7 | Missing explicit default-deny block | INFO |
Each finding ships with a fix snippet you paste back into firestore.rules.
The probe sends an unauthenticated GET to:
https://firestore.googleapis.com/v1/projects/{project-id}/databases/(default)/documents
If documents come back, the project's default DB is leaking and the finding is confirmed: true with document count + bytes returned + sample paths.
--no-probe disables the network call.
In the Firebase console: Project Settings → General → Project ID (looks like my-app-1a2b3 or whatever you named it).
The probe only sends an unauthenticated GET — same thing any random visitor with your project ID could send. We don't need (or want) your service account key.
--html).MIT. Open source: https://github.com/Perufitlife/firebase-security-skill
For the BaaS family, see:
FAQs
Audit Firebase Firestore Rules for the infamous 'if true' / wildcard-match-all data leak patterns. Keyless --discover mode parses your repo + probes Firestore REST anon (no service account). Active probe confirms leaks live.
The npm package firebase-security receives a total of 3 weekly downloads. As such, firebase-security popularity was classified as not popular.
We found that firebase-security demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.

Security News
It has been one year since Shai-Hulud made its first appearance on npm.

Research
/Security News
Operators behind PolinRider used a compromised GitHub account to plant malware in four development versions of a Packagist package with 700,000+ downloads.

Security News
GitHub Actions now supports cache-mode, a least-privilege control on the Actions cache aimed at the cache poisoning technique behind recent compromises.