外观
模型仓库、格式与加载器安全研究综述
摘要
模型并不总是“纯数据”。Pickle 等格式允许对象反序列化触发代码,某些仓库还支持远程自定义模型代码、转换器和预处理组件。即使采用数据型格式,解析器的内存安全、路径处理和资源限制仍可能被恶意制品攻击。
分类介绍
本领域覆盖模型 Registry、上传下载、序列化格式、转换工具和加载器。Registry 服务本身的未授权访问或 RCE 归 A4.2;恶意文件在解析和加载时触发行为归本类。对手可上传公开模型、替换内部制品或诱导消费者加载外部文件。
主要安全风险
- Pickle 和同类通用对象格式可在反序列化时执行攻击者控制代码。
- Sleepy Pickle 展示了加载时动态修改模型权重或 hook 推理方法;Sticky Pickle 进一步 hook
pickle.dump(),把载荷复制到派生模型。技术链与边界详见pickle-model-artifact-sleepy-sticky-pickle.md。 trust_remote_code等扩展机制把模型下载升级为软件安装。- 路径穿越、压缩炸弹、超大张量和畸形元数据可攻击转换或扫描服务。
- 安全格式与旧格式间的自动回退可能绕过组织策略。
防护措施与验证方法
优先采用数据型、边界明确的格式;禁止默认执行远程代码和安全格式失败后的 Pickle 回退;在无凭据、无外网和资源受限环境解析未知制品;对格式、加载器版本和转换结果做允许列表及摘要校验。扫描结论应绑定解析路径,不能将“未检测到 Pickle 指令”解释为模型行为安全,也不能将“转换为 SafeTensors”解释为已经移除权重中的语义后门。
局限与待验证问题
- 安全格式解析器在畸形输入和资源耗尽方面是否经过系统 Fuzzing?
- 转换为 SafeTensors 等格式后,恶意模型行为应如何继续检测?
- Registry 的扫描、隔离和发布状态如何形成可验证工作流?
历史研究成果
该分类下的独立研究覆盖对象语义和底层解析器两类风险。Pickle 模型制品攻击梳理 Sleepy Pickle 在加载时动态改权重或 hook 方法,以及 Sticky Pickle 借 pickle.dump() 跨派生模型自复制;根因是把可执行 Python 序列化格式当成被动模型数据。PyTorch weights_only 加载链的内存破坏风险进一步说明,即使对象构造白名单生效,storage 大小、张量形状和归档数据之间缺少一致性校验仍可触发内存破坏;CVE-2026-24747 影响 2.9.1 及更早版本、2.10.0 修复。两项研究共同表明,安全加载模式既要限制对象能力,也要验证格式不变量并隔离解析进程。
相关研究文章
模型加载器与反序列化
PyTorch weights_only 加载链的内存破坏风险分析恶意模型制品如何绕过 weights_only 的对象限制并利用张量存储元数据触发内存破坏,以及下游推理服务为何不能把安全加载模式视为完整隔离。2026-08-13攻击方法研究
Pickle 模型制品攻击:Sleepy Pickle 与 Sticky Pickle分析恶意 Pickle 模型如何在反序列化时动态篡改模型,以及自复制载荷如何进入后续派生模型。2024-06-11参考链接
- Trail of Bits: Fickling, a Python Pickle Decompiler and Static Analyzer
- Trail of Bits: Exploiting ML Models with Pickle File Attacks, Part 1
- Trail of Bits: Exploiting ML Models with Pickle File Attacks, Part 2
- SafeTensors Format
- OWASP LLM05: Improper Supply Chain(2026)
- CNCF Software Supply Chain Best Practices