mcpField
F
firebase-apk-scanner

firebase-apk-scanner

github.com/trailofbits安全7.9k5.5k 次安装今天更新
代码仓库

关于 firebase-apk-scanner

firebase-apk-scanner 是用于经授权的 Firebase Android APK 安全评估的技能。它提取 Firebase 配置,探测多个后端服务的错误配置,并生成文本和 JSON 报告。

主要功能

  1. 01提取 Firebase 配置
  2. 02测试身份验证设置
  3. 03探测数据库和存储访问
  4. 04枚举 Cloud Functions
  5. 05生成文本和 JSON 报告

适用场景

  1. 01审计使用 Firebase 的 Android 应用
  2. 02检查端点访问控制
  3. 03在授权渗透测试中评估 APK

安装

复制下面的命令,在终端中运行。

$npx skills add https://github.com/trailofbits/skills --skill firebase-apk-scanner

安装后在 Claude Code 中输入/firebase-apk-scanner确认已加载。

包含的文件

除 SKILL.md 外,安装时一起下载的参考资料和脚本。

scanner.sh
agents/
openai.yaml
assets/
trail-of-bits-mark.svg
references/
manual-fallback.md
vulnerabilities.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"

扫描器将:

  1. 使用 apktool 反编译 APK
  2. 从所有来源提取 Firebase 配置(google-services.json、XML 资源、assets、smali 代码、DEX 字符串)
  3. 测试身份验证端点(开放注册、匿名身份验证、电子邮件枚举)
  4. 测试 Realtime Database(未经身份验证的读取/写入、身份验证绕过)
  5. 测试 Firestore(文档访问、集合枚举)
  6. 测试 Storage 存储桶(列表、写入权限)
  7. 测试 Cloud Functions(枚举、未经身份验证的访问)
  8. 检查 Remote Config 暴露情况
  9. 以文本和 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 密钥。

按以下格式呈现发现:


扫描摘要

指标值
已扫描的 APKX
存在漏洞X
扫描失败X
无 Firebase 配置X
问题总数X

从 scan_report.json 中的 failed_apks 和 untested_apks 获取这些数据。这两组均未经过测试——扫描失败的 APK 从未反编译,而没有 Firebase 配置的 APK 没有可探测的端点——因此它们既不能归为存在漏洞,也不能归为安全。请明确报告这些数据,不要让它们消失在“存在 0 个漏洞”的表述中;同时说明 NO_CONFIG 结果的含义:应用可能根本没有使用 Firebase,也可能其配置经过混淆或打包处理,超出了扫描器的提取能力。

提取的配置

字段值
项目 IDextracted_value
数据库 URLextracted_value
存储桶extracted_value
API 密钥extracted_value
身份验证域名extracted_value

发现的漏洞

严重性问题证据
严重描述简要证据
高描述简要证据

修复建议

为发现的每个漏洞提供具体修复方案。请参阅漏洞模式,了解安全代码示例。


手动测试(扫描器失败时)

仅当扫描器未生成报告时,才按照 references/manual-fallback.md 操作。

严重性分类

  • 严重:未通过身份验证即可读写数据库、写入存储、私有应用允许开放注册
  • 高:启用了匿名身份验证、可列出存储桶、可枚举集合
  • 中:可枚举电子邮件、可访问云函数、远程配置暴露
  • 低:泄露信息,但不涉及敏感数据

重要指南

  1. 需要获得授权 - 仅扫描获准测试的 APK
  2. 清理测试数据 - 扫描器会自动删除其创建的测试条目
  3. 保存令牌 - 如果匿名身份验证成功,请使用该令牌测试已验证身份的绕过情形
  4. 测试所有区域 - 云函数可能部署在 us-central1、europe-west1、asia-east1 等区域
  5. 多个实例 - 一些应用使用多个 Firebase 项目;请测试发现的所有配置

评论

支持 Markdown