SEC-010 P1: Biometric Fallback 無失敗次數限制

Resolved 💬 2 comments Opened Mar 22, 2026 by stephen-taipei Closed Mar 25, 2026

問題描述

BiometricManager 的 authenticateWithPasscode() 使用裝置密碼作為 biometric 的 fallback,但無 App 層面的失敗次數限制,可能被暴力破解。

檔案位置

ios-swift/Connectors/Managers/BiometricManager.swift:343-354

詳細說明

private func authenticateWithPasscode(reason: String) async -> Bool {
    let context = LAContext()
    do {
        let success = try await context.evaluatePolicy(
            .deviceOwnerAuthentication,  // 使用裝置密碼
            localizedReason: reason
        )
        // 無 App 層面的失敗次數限制
    }
}

iOS 系統在 6 次失敗後會強制等待,但 App 層面應提供額外的安全機制。

風險評估

  • 如果使用者設備密碼簡單,容易被暴力破解
  • 系統級限制可能被繞過(某些設備情景)
  • 無法進行安全審計

解決方案

  1. 追蹤 App 層面的裝置密碼驗證失敗次數
  2. 失敗超過限制(如 5 次)後:
  • 鎖定該設備,要求重新完整認證
  • 強制簽出並清除本地會話
  1. 記錄所有驗證嘗試供安全審計
  2. 考慮實施漸進式延遲(失敗 1 次延遲 1 秒,2 次延遲 2 秒等)

View original on GitHub ↗

This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗