Firebase Security Rules Review · v0.1.0 · 2026-06-29 · sha256 26458b28bb3e1c8f
Firebase Security Rules Review v0.1.0A
Immutable. This exact content is served forever at /api/v1/blob/26458b28bb3e1c8f.
---
id: 'firebase-security-rules'
name: 'Firebase Security Rules Review'
description: 'Detects over-permissive Firestore/Storage rules (allow read, write: if true / auth-only without ownership), missing auth checks on writes, and admin SDK private key exposure to client bundles.'
version: 0.1.0
category: midstream
phase: midstream
applyTo:
- '**/*.rules'
- '**/firestore.rules'
- '**/storage.rules'
- '**/firebase*.{ts,js}'
tags: [firebase, security, baas, authorization, midstream, community]
severity: critical
inputContext: [diff]
outputKind: [findings, actions]
modelHint: balanced
---
## Pattern declaration
Primary pattern: Reviewer
Secondary patterns: Inversion
Why: Firebase Security Rules の過剰許可と認可漏れ、機密 config 露出をチェックリスト型で検査する
## Goal / 目的
- `allow read, write: if true;` や `request.auth != null` だけの所有者チェック欠如ルールを検出し、他人のドキュメント書き換えを防ぐ。
- `allow write` に `request.auth` 条件が無い認証チェック欠如を検出する。
- admin SDK の秘密鍵(service account の `private_key`)がソースに混入しクライアントバンドルへ露出するのを検出する。
## Non-goals / 扱わないこと
- Firestore のクエリ効率やインデックス設計。
- Cloud Functions のロジック妥当性。
- ルールの粒度(コレクション分割方針)の良し悪し(要件依存のため一律指摘しない)。
## Pre-execution Gate / 実行前ゲート
このスキルは以下の条件が**すべて**満たされない限り`NO_REVIEW`を返す。
- [ ] 差分に Security Rules(`*.rules` / firestore.rules / storage.rules)の追加・変更、または `firebase*.{ts,js}` の config 変更が含まれている
- [ ] diff コンテキストが利用可能である
ゲート不成立時の出力: `NO_REVIEW: rr-midstream-firebase-security-rules-001 — Security Rules / config の変更なし`
## False-positive guards / 抑制条件
- 公開コレクション(公開ブログ記事等)で `allow read` の公開が要件上正当であり、その旨のコメントが明記されている場合は read の公開を指摘しない(`write` の公開は別途指摘する)。
- Firebase の **API key(`apiKey`)はクライアント公開が公式仕様**であり秘密情報ではない。これを「秘密露出」と誤検出しない(admin SDK の `private_key` とは明確に区別する)。
- emulator / test 用のルールファイル(`*.test.rules` 等)は別スコープのため指摘しない。
## Rule / ルール
- `allow read, write: if true;` のような無条件許可は禁止。所有者・認可条件を必須とする。
- `request.auth != null` のみで write を許可しているものは所有者チェック(`request.auth.uid == resource.data.ownerId` 等)を追加する。
- `allow write` に `request.auth` 条件が無いものは認証チェックを追加する。
- service account の `private_key` / admin SDK 初期化用秘密鍵がクライアント側コードに含まれていないか確認する(サーバー専用に隔離する)。
## Evidence / 根拠の取り方
- 指摘は `<file>:<line>` で差分に紐づけ、公式規約(rules/basics / rules-and-auth)を 1 行で添える。
- 所有者条件が diff 外の関数定義にある可能性がある場合は断定せず慎重に扱う。
## Output / 出力(短文版の推奨)
コメントは日本語で返す。
- Finding: 過剰許可 / 認可欠如 / 秘密露出のどれか(1文)
- Impact: 他人のデータ書き換え / 不正アクセス / 鍵漏洩
- Fix: 所有者条件追加 / `request.auth` 条件追加 / 秘密鍵のサーバー隔離の最小案
## Sources / 出典
- Firebase — Security Rules basics: <https://firebase.google.com/docs/rules/basics>
- Firebase — Rules and authentication: <https://firebase.google.com/docs/rules/rules-and-auth>