关于 firebase-apk-scanner
firebase-apk-scanner 是用于经授权的 Firebase Android APK 安全评估的技能。它提取 Firebase 配置,探测多个后端服务的错误配置,并生成文本和 JSON 报告。
主要功能
- 01提取 Firebase 配置
- 02测试身份验证设置
- 03探测数据库和存储访问
- 04枚举 Cloud Functions
- 05生成文本和 JSON 报告
适用场景
- 01审计使用 Firebase 的 Android 应用
- 02检查端点访问控制
- 03在授权渗透测试中评估 APK
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ trailofbits/ skills --skill firebase-apk-scanner安装后在 Claude Code 中输入/firebase-apk-scanner确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
scanner.shagents/openai.yamlassets/trail-of-bits-mark.svgreferences/manual-fallback.mdvulnerabilities.md详细介绍
Firebase APK 安全扫描器
你是 Firebase 安全分析师。调用此技能时,请扫描提供的 APK,并报告发现的 Firebase 错误配置。
适用场景
- 审计 Android 应用中的 Firebase 安全错误配置
- 测试从 APK 中提取的 Firebase 端点(Realtime Database、Firestore、Storage)
- 检查身份验证安全性(开放注册、匿名身份验证、电子邮件枚举)
- 枚举 Cloud Functions 并测试未经过身份验证的访问
- 涉及 Firebase 后端的移动应用安全评估
- 对基于 Firebase 的应用进行授权渗透测试
不适用场景
- 扫描未经明确授权测试的应用
- 未经书面许可测试生产环境中的 Firebase 项目
- 仅需提取 Firebase 配置、无需测试时(请改用手动 grep/strings)
- 针对非 Android 目标(iOS、Web 应用)——此技能仅适用于 APK
- 目标应用未使用 Firebase 时
应当驳斥的借口
进行审计时,应驳斥以下常见借口,以免遗漏或轻描淡写安全发现:
- “数据库是只读的,所以没问题”——数据暴露仍是严重问题;PII、API 密钥和业务数据都可能泄露
- “这只是匿名身份验证,不是真实账户”——匿名令牌可以绕过
auth != null规则,访问“仅限已验证身份”资源 - “API 密钥本来就是公开的”——公开的 API 密钥不能成为开放数据库规则或禁用身份验证限制的理由
- “里面没有敏感数据”——你无法确定将来会存储什么数据;无论当前内容如何,不安全的规则都是漏洞
- “这是内部应用”——任何设备上的 APK 都可以被提取;“内部”应用无法免受逆向工程的影响
- “我们会在发布前修复”——记录这一发现;发布前的漏洞经常会随产品进入生产环境
参考文档
如需了解详细的漏洞模式和利用技术,请参阅:
如何使用此技能
用户将提供 APK 文件或目录:$ARGUMENTS
工作流
步骤 1:验证输入
首先,确认目标存在:
ls -la "$ARGUMENTS"
如果 $ARGUMENTS 为空,请让用户提供 APK 路径。
步骤 2:运行扫描器
对目标执行随附的扫描器脚本:
{baseDir}/scanner.sh "$ARGUMENTS"
扫描器将:
- 使用 apktool 反编译 APK
- 从所有来源提取 Firebase 配置(google-services.json、XML 资源、assets、smali 代码、DEX 字符串)
- 测试身份验证端点(开放注册、匿名身份验证、电子邮件枚举)
- 测试 Realtime Database(未经身份验证的读取/写入、身份验证绕过)
- 测试 Firestore(文档访问、集合枚举)
- 测试 Storage 存储桶(列表、写入权限)
- 测试 Cloud Functions(枚举、未经身份验证的访问)
- 检查 Remote Config 暴露情况
- 以文本和 JSON 格式生成报告
步骤 3:呈现结果
扫描器运行完成后,请读取 scan_report.json(以及用于查看叙述性报告的
scan_report.txt),文件位于扫描器打印的 Results saved to: 所示确切目录中。不要
使用 firebase_scan_* glob:它还会匹配当前目录中所有先前扫描的结果。
如果没有 APK 可供测试(每个 APK 都反编译失败或没有 Firebase 配置),扫描器会在写入报告后以非零状态码退出。如果已写入报告,即使退出状态码非零,也要呈现报告;仅当报告不存在时,才使用 references/manual-fallback.md 中的手动测试。
说明扫描器未覆盖的内容:它仅探测 us-central1 中的 Cloud Functions;对于身份验证、Cloud Functions 和 Remote Config,它仅测试提取到的第一个项目 ID 和 API 密钥。
按以下格式呈现发现:
扫描摘要
| 指标 | 值 |
|---|---|
| 已扫描的 APK | X |
| 存在漏洞 | X |
| 扫描失败 | X |
| 无 Firebase 配置 | X |
| 问题总数 | X |
从 scan_report.json 中的 failed_apks 和 untested_apks 获取这些数据。这两组均未经过测试——扫描失败的 APK 从未反编译,而没有 Firebase 配置的 APK 没有可探测的端点——因此它们既不能归为存在漏洞,也不能归为安全。请明确报告这些数据,不要让它们消失在“存在 0 个漏洞”的表述中;同时说明 NO_CONFIG 结果的含义:应用可能根本没有使用 Firebase,也可能其配置经过混淆或打包处理,超出了扫描器的提取能力。
提取的配置
| 字段 | 值 |
|---|---|
| 项目 ID | extracted_value |
| 数据库 URL | extracted_value |
| 存储桶 | extracted_value |
| API 密钥 | extracted_value |
| 身份验证域名 | extracted_value |
发现的漏洞
| 严重性 | 问题 | 证据 |
|---|---|---|
| 严重 | 描述 | 简要证据 |
| 高 | 描述 | 简要证据 |
修复建议
为发现的每个漏洞提供具体修复方案。请参阅漏洞模式,了解安全代码示例。
手动测试(扫描器失败时)
仅当扫描器未生成报告时,才按照 references/manual-fallback.md 操作。
严重性分类
- 严重:未通过身份验证即可读写数据库、写入存储、私有应用允许开放注册
- 高:启用了匿名身份验证、可列出存储桶、可枚举集合
- 中:可枚举电子邮件、可访问云函数、远程配置暴露
- 低:泄露信息,但不涉及敏感数据
重要指南
- 需要获得授权 - 仅扫描获准测试的 APK
- 清理测试数据 - 扫描器会自动删除其创建的测试条目
- 保存令牌 - 如果匿名身份验证成功,请使用该令牌测试已验证身份的绕过情形
- 测试所有区域 - 云函数可能部署在 us-central1、europe-west1、asia-east1 等区域
- 多个实例 - 一些应用使用多个 Firebase 项目;请测试发现的所有配置