firebase-apk-scanner

firebase-apk-scanner

热门

扫描 Android APK 以发现 Firebase 安全配置错误,包括开放的数据库、存储桶、身份验证问题和暴露的云函数。适用于分析 APK 文件中的 Firebase 漏洞、执行移动应用安全审计或测试 Firebase 端点安全性。仅限授权的安全研究。

6317Star
544Fork
更新于 2026/7/28
SKILL.md
readonly只读
name
firebase-apk-scanner
description

扫描 Android APK 以发现 Firebase 安全配置错误,包括开放的数据库、存储桶、身份验证问题和暴露的云函数。适用于分析 APK 文件中的 Firebase 漏洞、执行移动应用安全审计或测试 Firebase 端点安全性。仅限授权的安全研究。

Firebase APK 安全扫描器

你是一名 Firebase 安全分析师。当此技能被调用时,扫描提供的 APK 以发现 Firebase 配置错误并报告发现。

使用时机

  • 审计 Android 应用程序的 Firebase 安全配置错误
  • 测试从 APK 中提取的 Firebase 端点(实时数据库、Firestore、存储)
  • 检查身份验证安全性(开放注册、匿名认证、邮箱枚举)
  • 枚举云函数并测试未授权访问
  • 涉及 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. 从所有来源(google-services.json、XML 资源、assets、smali 代码、DEX 字符串)提取 Firebase 配置
  3. 测试身份验证端点(开放注册、匿名认证、邮箱枚举)
  4. 测试实时数据库(未授权读/写、认证绕过)
  5. 测试 Firestore(文档访问、集合枚举)
  6. 测试存储桶(列出、写入权限)
  7. 测试云函数(枚举、未授权访问)
  8. 测试 Remote Config 暴露
  9. 生成文本和 JSON 格式的报告

步骤 3:呈现结果

扫描完成后,读取并总结结果:

cat firebase_scan_*/scan_report.txt

按以下格式呈现发现:


扫描摘要

指标
扫描的 APK 数 X
存在漏洞 X
总问题数 X

提取的配置

字段
项目 ID extracted_value
数据库 URL extracted_value
存储桶 extracted_value
API 密钥 extracted_value
认证域名 extracted_value

发现的漏洞

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

修复建议

针对每个发现的漏洞提供具体修复措施。参考漏洞模式获取安全代码示例。


手动测试(如果扫描器失败)

如果扫描脚本不可用或失败,执行手动提取和测试:

提取配置

在反编译的 APK 中搜索 Firebase 配置:

# 反编译
apktool d -f -o ./decompiled $ARGUMENTS

# 查找 google-services.json
find ./decompiled -name "google-services.json"

# 搜索 XML 资源
grep -r "firebaseio.com\|appspot.com\|AIza" ./decompiled/res/

# 搜索 assets(混合应用)
grep -r "firebaseio.com\|AIza" ./decompiled/assets/

测试端点

获取 PROJECT_ID 和 API_KEY 后:

身份验证:

# 测试开放注册
curl -s -X POST -H "Content-Type: application/json" \
  -d '{"email":"test@test.com","password":"Test123!","returnSecureToken":true}' \
  "https://identitytoolkit.googleapis.com/v1/accounts:signUp?key=API_KEY"

# 测试匿名认证
curl -s -X POST -H "Content-Type: application/json" \
  -d '{"returnSecureToken":true}' \
  "https://identitytoolkit.googleapis.com/v1/accounts:signUp?key=API_KEY"

数据库:

# 实时数据库读取
curl -s "https://PROJECT_ID.firebaseio.com/.json"

# Firestore 读取
curl -s "https://firestore.googleapis.com/v1/projects/PROJECT_ID/databases/(default)/documents"

存储:

# 列出存储桶
curl -s "https://firebasestorage.googleapis.com/v0/b/PROJECT_ID.appspot.com/o"

Remote Config:

curl -s -H "x-goog-api-key: API_KEY" \
  "https://firebaseremoteconfig.googleapis.com/v1/projects/PROJECT_ID/remoteConfig"

严重性分类

  • 严重:未授权数据库读/写、存储写入、私有应用上的开放注册
  • :启用匿名认证、存储桶列出、集合枚举
  • :邮箱枚举、可访问的云函数、Remote Config 暴露
  • :信息泄露但不含敏感数据

重要指南

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