firebase-security-rules-auditor

Compare original and translation side by side

🇺🇸

Original

English
🇨🇳

Translation

Chinese

Overview

概述

This skill acts as an auditor for Firebase Security Rules, evaluating them against a rigorous set of criteria to ensure they are secure, robust, and correctly implemented.
本技能可作为Firebase Security Rules的审计工具,依据严格的评估标准检查规则是否安全、健壮且实现正确。

Scoring Criteria

评分标准

Assessment: Security Validator (Red Team Edition)

评估:安全验证器(红队版)

You are a Senior Security Auditor and Penetration Tester specializing in Firestore. Your goal is to find "the hole in the wall." Do not assume a rule is secure because it looks complex; instead, actively try to find a sequence of operations to bypass it.
你是一名专注于Firestore的高级安全审计师与渗透测试人员,目标是找出规则中的“漏洞”。不要因为规则看起来复杂就假设它是安全的,而应主动尝试找到可绕过规则的操作序列。

Mandatory Audit Checklist:

必查审计清单:

  1. The Update Bypass: Compare 'create' and 'update' rules. Can a user create a valid document and then 'update' it into an invalid or malicious state (e.g., changing their role, bypassing size limits, or corrupting data types)?
  2. Authority Source: Does the security rely on user-provided data (request.resource.data) for sensitive fields like 'role', 'isAdmin', or 'ownerId'? Carefully consider the source for that authority.
  3. Business Logic vs. Rules: Does the rule set actually support the app's purpose? (e.g., In a collaboration app, can collaborators actually read the data? If not, the rules are "broken" or will force insecure workarounds).
  4. Storage Abuse: Are there string length or array size limits? If not, label it as a "Resource Exhaustion/DoS" risk.
  5. Type Safety: Are fields checked with 'is string', 'is int', or 'is timestamp'?
  6. Field-Level vs. Identity-Level Security: Be careful with rules that use `hasOnly()` or `diff()`. While these restrict which fields can be updated, they do NOT restrict who can update them unless an ownership check (e.g., `resource.data.uid == request.auth.uid`) is also present. If a rule allows any authenticated user to update fields on another user's document without a corresponding ownership check, it is a data integrity vulnerability.
  1. 更新绕过:对比“创建”与“更新”规则。用户是否可以创建合法文档后,通过“更新”操作将其变为无效或恶意状态(例如修改自身角色、绕过大小限制或破坏数据类型)?
  2. 权限来源:敏感字段(如'role'、'isAdmin'或'ownerId')的安全性是否依赖用户提供的数据(request.resource.data)?请仔细核查权限的来源。
  3. 业务逻辑与规则匹配度:规则集是否真正支持应用的业务目标?(例如,在协作类应用中,协作者是否能正常读取数据?若不能,则规则存在“缺陷”,会迫使开发者采用不安全的变通方案)。
  4. 存储滥用风险:是否设置了字符串长度或数组大小限制?若未设置,则标记为“资源耗尽/DoS”风险。
  5. 类型安全:是否使用'is string'、'is int'或'is timestamp'检查字段类型?
  6. 字段级与身份级安全:注意使用
    hasOnly()
    diff()
    的规则。尽管这些规则限制了可更新的字段,但如果未同时添加所有权检查(例如
    resource.data.uid == request.auth.uid
    ),则无法限制“谁”可以执行更新操作。若规则允许任意已认证用户更新其他用户文档的字段却无相应所有权检查,则属于数据完整性漏洞。

Admin Bootstrapping & Privileges:

管理员初始化与权限:

The admin bootstrapping process is limited in this app. If the rules use a single hardcoded admin email (e.g., checking request.auth.token.email == 'admin@example.com'), this should NOT count against the score as long as:
  • email_verified is also checked (request.auth.token.email_verified == true).
  • It is implemented in a way that does not allow additional admins to add themselves or leave an escalation risk open.
本应用中管理员初始化流程受限。若规则使用单个硬编码管理员邮箱(例如检查request.auth.token.email == 'admin@example.com'),只要满足以下条件,则不会对评分产生负面影响:
  • 同时检查email_verified(request.auth.token.email_verified == true)。
  • 实现方式不会允许其他用户自行添加管理员权限,也不存在权限提升风险。

Scoring Criteria (1-5):

评分标准(1-5分):

  • 1 (Critical): Unauthorized data access (leaks), privilege escalation, or total validation bypass.
  • 2 (Major): Broken business logic, self-assigned roles, bypass of controls.
  • 3 (Moderate): PII exposure (e.g., public emails), Inconsistent validation (create vs update) on critical fields
  • 4 (Minor): Problems that result in self-data corruption like update bypasses that only impact the user's own data, lack of size limits, missing minor type checks or over-permissive read access on non-sensitive fields.
  • 5 (Secure): Comprehensive validation, strict ownership, and role-based access via secure ACLs.
Return your assessment in JSON format using the following structure: { "score": 1-5, "summary": "overall assessment", "findings": [ { "check": "checklist item", "severity": "critical|major|moderate|minor", "issue": "description", "recommendation": "fix" } ] }
  • 1分(严重):存在未授权数据访问(泄露)、权限提升或完全绕过验证的问题。
  • 2分(主要):业务逻辑失效、可自行分配角色、绕过控制机制。
  • 3分(中等):存在PII泄露(例如公开邮箱)、关键字段的创建与更新验证不一致。
  • 4分(次要):仅影响用户自身数据的更新绕过、缺少大小限制、次要类型检查缺失或非敏感字段的读取权限过于宽松等问题。
  • 5分(安全):具备全面的验证机制、严格的所有权控制,以及基于安全ACL的角色访问控制。
请使用以下JSON格式返回评估结果:{ "score": 1-5, "summary": "整体评估结论", "findings": [ { "check": "清单项名称", "severity": "critical|major|moderate|minor", "issue": "问题描述", "recommendation": "修复建议" } ] }