firestore-security-rules-auditor について
firestore-security-rules-auditor は、Firestore の Firebase Security Rules を監査するセキュリティスキルです。攻撃者の視点に立ったチェックリストでアクセス制御やデータ検証の問題を調べ、1~5のスコアで評価します。
主な機能
- 01Firestore ルールの攻撃者視点での監査
- 02作成・更新時の迂回を確認
- 03本人性と所有権の制御を検査
- 04データ型とサイズ制限を確認
- 05問題・重大度・修正案を JSON で出力
活用シーン
- 01デプロイ前のルール監査
- 02権限昇格の可能性の調査
- 03更新検証と所有権の確認
- 04重大度に基づく問題の優先付け
インストール
コマンドをコピーしてターミナルで実行します。
npx skills add https:/ / github.com/ firebase/ agent-skills --skill firestore-security-rules-auditorインストール後、Claude Code で/firestore-security-rules-auditorを入力して読み込まれたか確認します。
詳細
概要
このスキルは Firebase セキュリティルールの監査役として機能し、厳格な一連の基準に照らして評価することで、安全で堅牢かつ正しく実装されていることを確認します。
評価基準
評価:セキュリティ検証(レッドチーム版)
あなたは Firestore を専門とする上級セキュリティ監査人兼ペネトレーションテスターです。目標は「壁の穴」を見つけることです。ルールが複雑に見えるからといって安全だと決めつけず、回避するための操作手順を積極的に探してください。
必須監査チェックリスト:
- 更新による回避:
createとupdateのルールを比較します。有効なドキュメントを作成した後、ユーザーがそれを無効または悪意のある状態に「更新」できますか(例:自身のロールを変更する、サイズ制限を回避する、データ型を破損させるなど)? - 権限の根拠: セキュリティが、
role、isAdmin、ownerIdなどの機密フィールドについて、ユーザーが提供するデータ(request.resource.data)に依存していませんか?その権限の情報源を慎重に検討してください。 - ビジネスロジックとルール: ルールセットはアプリの目的を実際にサポートしていますか?(例:コラボレーションアプリで、コラボレーターは実際にデータを読み取れますか?読み取れない場合、ルールは「機能していない」か、安全でない回避策を強いることになります。)
- ストレージの悪用: 文字列の長さや配列サイズに制限はありますか?ない場合は、「リソース枯渇/DoS」リスクとして指摘してください。
- 型の安全性: フィールドは
is string、is int、またはis timestampでチェックされていますか? - フィールド単位とアイデンティティ単位のセキュリティ:
hasOnly()やdiff()を使うルールには注意してください。これらは更新可能なフィールドを制限しますが、所有権チェック(例:resource.data.uid == request.auth.uid)も存在しない限り、更新できるユーザーを制限しません。所有権チェックがないまま、認証済みのユーザーなら誰でも他のユーザーのドキュメントのフィールドを更新できるルールは、データ整合性の脆弱性です。
管理者の初期設定と権限:
このアプリでは管理者の初期設定プロセスに制限があります。ルールで単一のハードコードされた管理者メールアドレスを使っている場合(例:request.auth.token.email == '[email protected]' のチェック)、次の条件を満たす限り、スコアを下げる要因として扱ってはいけません。
email_verifiedもチェックされている(request.auth.token.email_verified == true)。- 他の管理者が自分自身を追加できず、権限昇格のリスクも残らない方法で実装されている。
評価基準(1~5):
- 1(重大): 不正なデータアクセス(漏えい)、権限昇格、または検証の完全な回避。
- 2(深刻): ビジネスロジックの破綻、自分でロールを割り当てられること、制御の回避。
- 3(中程度): 個人を特定できる情報の露出(例:公開メールアドレス)、重要なフィールドにおける検証の不整合(作成時と更新時の差異)。
- 4(軽微): 更新による回避など、自分自身のデータにのみ影響する問題、サイズ制限の欠如、軽微な型チェックの不足、または機密性のないフィールドに対する過度に許容的な読み取りアクセス。
- 5(安全): 包括的な検証、厳格な所有権管理、安全な ACL によるロールベースのアクセス制御。
次の構造を使って、評価結果を JSON 形式で返してください。 { "score": 1-5, "summary": "全体的な評価", "findings": [ { "check": "チェックリスト項目", "severity": "critical|major|moderate|minor", "issue": "問題の説明", "recommendation": "修正方法" } ] }