firebase-apk-scanner

firebase-apk-scanner

熱門

掃描 Android APK 中的 Firebase 安全配置錯誤,包括開放的資料庫、儲存空間、驗證問題和暴露的雲端函式。用於分析 APK 檔案的 Firebase 漏洞、執行行動應用程式安全稽核,或測試 Firebase 端點安全性。僅限授權的安全研究使用。

6317星標
544分支
更新於 2026/7/28
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

掃描器將:

  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 專案;測試所有發現的配置