问题修复
审计 Android APK 中 Firebase…
当你获得授权、需要分析 Android APK 的 Firebase 后端安全配置错误(开放数据库、存储桶、认证问题、暴露的云函数)时,用这套流程提取配置并逐项验证。
🧪 尚未被验证(还没有小呱复用过的记录,不代表不好)
GDI C 49/100
进化评分(GDI)
综合排序依据 —— 四个维度的加权结果,让你看出「为什么这条排在前面」
内在质量 85/100 ×0.35
使用度 0/100 ×0.30
口碑 50/100 ×0.20
新鲜度 60/100 ×0.15
适用场景
审计 Android APK 中 Fir通用
解决思路
- 校验输入目标是否存在:运行 `ls -la $ARGUMENTS`;若 `$ARGUMENTS` 为空,要求用户提供 APK 路径。
- 执行随附扫描脚本 `{baseDir}/scanner.sh $ARGUMENTS`,它会:用 apktool 反编译 APK;从 google-services.json、XML 资源、assets、smali 代码、DEX 字符串等所有来源提取 Firebase 配置;测试认证端点(开放注册、匿名认证、邮箱枚举);测试 Realtime Database(未认证读写、认证绕过);测试 Firestore(文档访问、集合枚举);测试 Storage 存储桶(列举、写入权限);测试 Cloud Functions(枚举、未认证访问);测试 Remote Config 暴露;生成文本与 JSON 报告。
- 扫描完成后读取并汇总结果:`cat firebase_scan_*/scan_report.txt`。
- 按固定格式呈现结果:Scan Summary 表格(APKs Scanned、Vulnerable、Failed to scan、No Firebase config、Total Issues),这些数字取自 `scan_report.json` 中的 `failed_apks` 与 `untested_apks`;这两组都未被测试(失败的 APK 从未反编译成功,无 Firebase 配置的 APK 没有可探测端点),因此既不算有漏洞也不算干净,必须显式报告,不要让它们消失在“0 vulnerable”一行里,并说明 `NO_CONFIG` 的含义:应用可能根本不用 Firebase,或其配置被混淆/加壳到扫描器无法提取。
- 输出 Extracted Configuration 表格:Project ID、Database URL、Storage Bucket、API Key、Auth Domain。
- 输出 Vulnerabilities Found 表格:Severity、Issue、Evidence。
- 输出 Remediation:针对每个发现的漏洞给出具体修复方案,参考 references/vulnerabilities.md 中的安全代码示例。
- 若扫描脚本不可用或失败,则手动提取配置:`apktool d -f -o ./decompiled $ARGUMENTS`;`find ./decompiled -name "google-services.json"`;`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"`。
- 手动测试数据库:Realtime Database 读取 `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"`。
- 按严重级别分类:CRITICAL = 未认证数据库读写、存储写入、私有应用开放注册;HIGH = 启用匿名认证、存储桶列举、集合枚举;MEDIUM = 邮箱枚举、可访问的云函数、Remote Config 暴露;LOW = 无敏感数据的信息泄露。
- 遵守重要准则:仅扫描有权限测试的 APK;扫描器会自动清理其创建的测试数据;若匿名认证成功,保存 token 用于认证绕过测试;测试所有区域(Cloud Functions 可能部署在 us-central1、europe-west1、asia-east1 等);部分应用使用多个 Firebase 项目,需测试所有发现的配置。
- 审计时拒绝以下常见合理化借口,避免漏报或弱化发现:“数据库只读所以没事”(数据暴露仍是严重问题,PII、API key、业务数据可能泄露);“只是匿名认证不是真实账号”(匿名 token 可绕过 `auth != null` 规则访问“仅认证”资源);“API key 本来就是公开的”(公开 API key 不能成为开放数据库规则或禁用认证限制的理由);“里面没有敏感数据”(无法预知未来会存什么数据,不安全规则本身就是漏洞);“这是内部应用”(APK 可从任何设备提取,内部应用同样可被逆向);“上线前会修”(记录发现,上线前漏洞常常照样发布到生产)。
适用边界 · 注意事项
- 扫描你未获得明确授权的应用
- 在未获书面许可的情况下测试生产 Firebase 项目
- 仅需提取 Firebase 配置而不做测试时(改用手动 grep/strings)
- 非 Android 目标(iOS、Web 应用)——本技能仅针对 APK
- 目标应用不使用 Firebase 时