SKILL.md
readonlyread-only
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、網頁應用程式)——此技能僅限 APK
- 目標應用程式未使用 Firebase
應拒絕的合理化藉口
稽核時,拒絕這些常見的合理化藉口,它們會導致遺漏或低估發現結果:
- 「資料庫是唯讀的,所以沒問題」 - 資料暴露仍然是重大發現;可能洩漏 PII、API 金鑰和業務資料
- 「只是匿名驗證,不是真實帳戶」 - 匿名令牌可以繞過
auth != null規則,存取「僅限已驗證」的資源 - 「API 金鑰本來就是公開的」 - 公開的 API 金鑰不能合理化開放的資料庫規則或停用的驗證限制
- 「裡面沒有敏感資料」 - 你無法知道未來會儲存什麼資料;不安全的規則無論當前內容如何都是漏洞
- 「這是內部應用程式」 - APK 可以從任何裝置提取;「內部」應用程式無法防止逆向工程
- 「我們會在發布前修復」 - 記錄發現結果;發布前的漏洞經常會進入正式環境
參考文件
有關詳細的漏洞模式和利用技術,請參閱:
如何使用此技能
使用者將提供一個 APK 檔案或目錄:$ARGUMENTS
工作流程
步驟 1:驗證輸入
首先,確認目標存在:
ls -la $ARGUMENTS
如果 $ARGUMENTS 為空,請要求使用者提供 APK 路徑。
步驟 2:執行掃描器
對目標執行內建的掃描腳本:
{baseDir}/scanner.sh $ARGUMENTS
掃描器將:
- 使用 apktool 反編譯 APK
- 從所有來源(google-services.json、XML 資源、assets、smali 程式碼、DEX 字串)提取 Firebase 配置
- 測試驗證端點(開放註冊、匿名驗證、電子郵件枚舉)
- 測試即時資料庫(未經授權的讀取/寫入、驗證繞過)
- 測試 Firestore(文件存取、集合枚舉)
- 測試儲存空間(列出、寫入權限)
- 測試雲端函式(列舉、未經授權的存取)
- 測試 Remote Config 暴露
- 以文字和 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 暴露
- 低:不含敏感資料的資訊揭露
重要準則
- 需要授權 - 僅掃描你有權測試的 APK
- 清理測試資料 - 掃描器會自動移除它建立的測試條目
- 儲存令牌 - 如果匿名驗證成功,使用該令牌進行已驗證繞過測試
- 測試所有區域 - 雲端函式可能部署在 us-central1、europe-west1、asia-east1 等
- 多個實例 - 某些應用程式使用多個 Firebase 專案;測試所有發現的配置






