大模型安全:模型加载过程的代码执行

威胁描述

许多大模型文件采用序列化格式存储,加载过程中需进行反序列化操作。若代码实现中使用了不安全的反序列化方法,且攻击者能够控制模型文件内容,则可能触发反序列化漏洞,导致远程代码执行(RCE),严重危害AI系统安全。

 

PyTorch 为例:

  • 使用 torch.load() 加载模型时,若未采取安全措施,攻击者可构造恶意 .pth 文件。
  • 当受害者加载该文件时,将触发任意代码执行。
  • PyTorch 官方文档早已明确警告:torch.load() 仅应加载可信来源的模型文件
  • 新版本(≥2.6.0)已默认启用更安全的加载机制,但开发人员仍可能因疏忽或兼容性考虑误用不安全方式,引入风险。
 

 

威胁场景

  1. 模型上传/转换服务:AI平台支持用户上传模型进行预训练、微调或格式转换(如 .pth.safetensors)。
  2. 不可信模型加载:用户从第三方(如 Hugging Face、开源社区)下载未经验证的预训练模型并直接加载。

威胁触发条件

  1. 攻击者可控制或篡改模型文件内容(如构造恶意序列化载荷);
  2. 模型加载代码使用了不安全的反序列化函数(如未设置安全参数的 torch.load())。

 

缓解措施

1. 安全加载模型(首选方案)

  • PyTorch 推荐用法
    python
    state_dict = torch.load('model.pth', weights_only=True, map_location='cpu')
     
  • 重要说明
    • 即使加载自研可信模型,也应使用 weights_only=True,因基于 pickle 的模型文件存在固有 RCE 风险。
    • CVE-2025-32434:PyTorch ≤2.5.1 版本中,weights_only=True 无法防御 TAR 格式模型的绕过攻击(因早期默认使用 TAR 而非 ZIP)。
    • 修复建议:升级至 PyTorch ≥2.6.0,此版本在加载 TAR 模型时若启用 weights_only=True 将直接报错,阻断攻击。
 

2. 采用更安全的模型格式

  • 在条件允许时,将模型转换为 Safetensors 格式(无代码执行能力,仅存储张量数据)。
 

3. 验证模型来源可信性

  • 仅从官方或可信渠道获取模型;
  • 使用 哈希校验(SHA-256)数字签名 确保模型完整性与真实性。
 

4. 特殊场景下的补充措施

  • 若无法使用 weights_only=True 且无法转换格式:
    • 使用 PyTorch 内置安全选项(谨慎使用):
      python
       
      model = torch.load(
          'model.pth',
          map_location='cpu',
          pickle_module=torch.serialization._get_default_restore_pickle_module(),
          pickle_load_args={'strict': True}
      )
      

        

       
       
    • 实施 反序列化白名单机制,限制可加载的类或模块。
 

5. 其他纵深防御措施

  • 模型文件 漏洞/后门扫描(如 Picklescan);
  • 沙箱或隔离环境 中加载不可信模型;
  • 遵循 最小权限原则,限制模型加载进程的系统权限。
 

 

威胁案例

1. Hugging Face Hub 上的 “nullifAI” 恶意模型(2025年2月)

  • 攻击者上传两个含隐藏恶意代码的模型,利用 “broken pickle” 技巧绕过 Picklescan 扫描;
  • 加载时触发反向 Shell,但属 PoC 性质,未造成实际破坏;
  • Hugging Face 随后全面升级 Picklescan 检测能力。
 

2. NVIDIA TensorRT-LLM Python 执行器漏洞(CVE-2025-23254,2025年4月)

  • 框架在进程间通信中使用不安全的 pickle 反序列化;
  • 本地攻击者可构造恶意数据,实现 任意代码执行、信息泄露、数据篡改
 

3. Hugging Face 平台模型加载 RCE 漏洞(2024年)

  • JFrog 安全团队发现部分模型在加载时执行恶意代码(如反弹 Shell);
  • 根源为 torch.load().pkl 文件的不安全反序列化。
 

4. Hugging Face 模型格式转换服务 RCE(2024年)

  • 转换服务使用 torch.load() 处理用户提交的 .pth 文件;
  • 攻击者通过提交恶意模型,在转换过程中执行任意代码,实现 供应链攻击
posted @ 2025-12-02 14:55  bonelee  阅读(0)  评论(0)    收藏  举报