FirebaseAPK安全扫描器Skill firebase-apk-scanner

这个技能用于扫描Android APK文件中的Firebase安全配置错误,包括开放数据库、存储桶、认证问题和暴露的云函数。适用于移动应用安全审计、渗透测试和Firebase端点安全测试。关键词:Firebase安全、APK扫描、移动安全、漏洞挖掘、安全审计。

安全审计 0 次安装 0 次浏览 更新于 3/14/2026

name: firebase-apk-scanner description: 扫描Android APK文件中的Firebase安全配置错误,包括开放数据库、存储桶、认证问题和暴露的云函数。用于分析APK文件的Firebase漏洞、执行移动应用安全审计或测试Firebase端点安全。仅限授权安全研究使用。 argument-hint: [apk文件或目录] allowed-tools: Bash({baseDir}/scanner.sh:), Bash(apktool:), Bash(curl:*), Read, Grep, Glob disable-model-invocation: true

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. 从所有来源提取Firebase配置(google-services.json、XML资源、资产、smali代码、DEX字符串)
  3. 测试认证端点(开放注册、匿名认证、电子邮件枚举)
  4. 测试实时数据库(未经授权的读/写、认证绕过)
  5. 测试Firestore(文档访问、集合枚举)
  6. 测试存储桶(列表、写访问)
  7. 测试云函数(枚举、未经授权的访问)
  8. 测试远程配置暴露
  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/

# 搜索资产(混合应用程序)
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"

远程配置:

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

严重性分类

  • 严重:未经授权的数据库读/写、存储写、私有应用程序的开放注册
  • :启用匿名认证、存储桶列表、集合枚举
  • :电子邮件枚举、可访问的云函数、远程配置暴露
  • :无敏感数据的信息泄露

重要指南

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