CVE-2026-79784:Vocos 模型加载框架曝任意类实例化漏洞,AI 模型供应链再敲警钟

事件概述

2026 年 8 月 25 日,研究人员披露了 AI 音频模型框架 Vocos 中一处高危漏洞 CVE-2026-79784,CVSS v3.1 评分 8.8,CWE 分类为 CWE-749: Exposed Dangerous Method or Function。Vocos 被广泛用于文本转语音、语音克隆、音频编解码等场景,是 Hugging Face 上多款明星级语音合成模型(WavLLM、Vall-E 系列等)的核心后端。该漏洞位于 vocos/pretrained.pyinstantiate_class 函数中,允许 Hugging Face 上的仓库所有者通过 config.yaml 直接构造任意 class_pathinit_args,在用户调用 Vocos.from_pretrained() 时执行任意 Python 代码——这是继 8 月初 ChainDrop / Shai-Hulud npm 蠕虫之后,又一次典型的”模型供应链”攻击面曝光。

技术细节

Vocos 提供 from_pretrained() 入口,自动从 Hugging Face 拉取 config.yaml 并实例化模型各组件。该流程的具体执行路径如下:

# vocos/pretrained.py(简化)
def instantiate_class(class_path, init_args):
    module_path, attr = class_path.rsplit(".", 1)
    module = importlib.import_module(module_path)
    cls = getattr(module, attr)
    return cls(**init_args)

# Vocos.from_pretrained 调用链
config = load_config(repo_id)        # 从 Hugging Face 拉 config.yaml
feature_extractor = instantiate_class(config["feature_extractor"]["class_path"],
                                      config["feature_extractor"]["init_args"])
backbone = instantiate_class(config["backbone"]["class_path"],
                             config["backbone"]["init_args"])
head = instantiate_class(config["head"]["class_path"],
                         config["head"]["init_args"])

关键缺陷在于:class_path 完全无白名单校验。当用户访问一个恶意 Hugging Face 仓库时,仓库所有者在 config.yaml 中指定任意 Python 可调用对象,包括但不限于 os.systemsubprocess.Popenshutil.rmtreeurllib.request.urlretrieve 等系统级危险调用。漏洞触发条件如下:

  • CVSS AV:N — 攻击发生在模型下载阶段(网络可达即触发)
  • CVSS AC:L — 无需复杂绕路,仅构造 class_path 即可
  • CVSS PR:N — Vocos 侧无认证要求
  • CVSS UI:R — 需用户主动调用 from_pretrained,符合”用户加载模型”的标准交互
  • CVSS C/I/A 均为 High — 攻击者可任意执行命令、读写文件、外联下载后续载荷

影响评估

从攻击面角度分析,CVE-2026-79784 的威胁等级与近期其他模型/包供应链攻击高度对齐:

  • 模型仓库托管平台:Hugging Face 上 WavLLM、Vocos、ESPnet 等多款主流语音模型每日下载量合计数十万次;任意一次 config.yaml 篡改即可影响全球下游用户
  • 企业 AI 团队:研发、生产、CI/CD 流水线通常会在初始化脚本中自动加载模型,攻击载荷可在 CI runner 或生产 GPU 主机上稳定执行
  • 科研与教育:研究人员在评估新模型时常直接 from_pretrained() 任意仓库,属高风险用户群体
  • POC 状态:截至发稿无公开 PoC,但研究人员描述明确,经验丰富的攻击者从”无 PoC 到 exploit”通常不超过 72 小时
  • 横向风险:受感染环境因可执行任意 Python,下游可能被用于植入挖矿木马、后门、凭据窃取或 SSH 密钥替换
  • 合规与审计:在金融、医疗、政府等强合规行业,AI 模型加载动作需纳入变更管理与 SBOM 审计;本次漏洞说明”模型即代码”理念必须落到实际流程上

修复与缓解建议

  • 官方补丁:等待 Vocos 官方在 pretrained.py 中加入 class_path 白名单校验或将 instantiate_class 改造为只接受已注册的类型。短期内用户必须从官方仓库地址加载,避免信任任何”分享”的 repo_id
  • 沙箱加载:在 CI/CD、训练主机、推理服务器上使用容器、gVisor、Firecracker 等隔离手段加载模型;对 from_pretrained 调用启用 seccomp、AppArmor、Landlock 等内核级限制
  • 依赖审计:将 Vocos、transformers、Hugging Face Hub 等核心依赖纳入 SBOM;使用 pip-auditsafetypip-audit --strict 等工具持续扫描
  • Hugging Face 上游治理:限制组织内用户从公共仓库下载模型,仅启用企业版私有 Hub 或经过审查的”白名单仓库”列表;为外部模型仓库启用官方签名校验(Hub 已支持 Sigstore 签名)
  • 运行时检测:使用 Falco、Tetragon 等 eBPF 工具监测模型加载阶段是否发生 os.systemsubprocesssocket.connect 等敏感调用;在 SIEM 中对”模型加载后 60 秒内的异常出网”设硬告警
  • 凭据治理:在 CI/CD 环境中使用短时效 OIDC 令牌、避免长期 IAM 密钥落盘;将 Hugging Face 凭证与生产 SSH 凭证完全隔离,使用不同的 vault 命名空间
  • 开发者终端:与 ChainDrop 经验一致,开发者终端必须部署与生产服务器同等强度的 EDR 与出站流量监控,避免被”模型加载动作”间接突破

检测规则参考

# 主机层(auditd)— 模型加载进程派生命令异常
auditctl -w /usr/bin/python3 -p x -k vocos_loading
ausearch -k vocos_loading -ts recent | grep -E 'execve.*(curl|wget|nc|bash|sh|ssh)'

# 网络层 — 模型下载阶段异常出网
tcpdump -i any -nn 'src host <训练主机> and not dst net 10.0.0.0/8 and not dst net 172.16.0.0/12'

# 应用层 — Vocos.from_pretrained 调用前后短暂 shell 行为
strace -f -e trace=execve -p <pid> 2>&1 | grep -E 'class_path|init_args|/bin/(ba)?sh'

# SBOM 级依赖监测
pip-audit --strict -r requirements.txt | grep -i vocos

参考来源