Install
openclaw skills install firebase-rules-auditorAudit Firebase Security Rules for vulnerabilities, data exposure, performance issues, and best practices across Firestore, Realtime Database, and Storage.
openclaw skills install firebase-rules-auditorAudit Firebase Security Rules across Firestore, Realtime Database, and Cloud Storage for vulnerabilities, data exposure risks, performance issues, and best practices. Use when reviewing security rules before deployment, after incidents, or during security audits.
"Audit my Firestore security rules"
"Check Firebase rules for data exposure"
"Review my Realtime Database rules"
"Are my Storage rules secure?"
Locate and parse security rules:
# Firestore rules
cat firestore.rules 2>/dev/null
# Realtime Database rules
cat database.rules.json 2>/dev/null
# Storage rules
cat storage.rules 2>/dev/null
# Firebase config
cat firebase.json 2>/dev/null
Critical vulnerabilities:
allow read, write: if true; — anyone can read/write everythingrequest.auth != nulladmin: true fieldData exposure:
Write vulnerabilities:
createdAt)get() and exists() calls count toward read quotasgetAfter() for atomic operations.validate rules for schema enforcement.indexOn for query performanceget() calls## Firebase Security Rules Audit
**Services:** Firestore ✅ | RTDB ❌ (not found) | Storage ✅
### 🔴 Critical Vulnerabilities (3)
1. **Open read on users collection** — firestore.rules:12
match /users/{userId} { allow read: if request.auth != null;
Any authenticated user can read ALL user documents
→ Change to: `allow read: if request.auth.uid == userId;`
2. **No write validation** — firestore.rules:15
allow write: if request.auth.uid == userId;
User can write ANY fields (including `role: "admin"`)
→ Add field validation: only allow specific fields
3. **Storage allows any file type** — storage.rules:8
No content type validation — users can upload executables
→ Add: `request.resource.contentType.matches('image/.*')`
### 🟡 Warnings (4)
4. No rate limiting on writes (potential abuse)
5. Collection group query on `comments` bypasses parent checks
6. Timestamp field writable by client (should use serverTimestamp)
7. Missing `.indexOn` for 3 query patterns
### ✅ Good Practices
- Auth check present on all rules
- Custom claims used for admin role
- File size limits on storage (10MB)
- Subcollections properly scoped
### 📋 Recommended Rules
```javascript
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /users/{userId} {
allow read: if request.auth.uid == userId
|| request.auth.token.admin == true;
allow write: if request.auth.uid == userId
&& request.resource.data.keys().hasOnly(['name', 'bio', 'avatar'])
&& request.resource.data.name is string
&& request.resource.data.name.size() <= 100;
}
}
}