漏洞  ·  2026-11-02

Fickling pickle安全门绕过允许精心构造的ML模型文件通过为LIKELY_SAFE并在加载时执行代码(CVE-2026-118938)

漏洞High 影响GlobalCVE-2026-118938
在Trail of Bits fickling至0.1.12版本中,携带点分__qualname__(例如'Values.read_file')的pickle STACK_GLOBAL操作数由pickle的find_class通过_getattribute解析为任意属性路径,而非模块级函数。Fickling仅在其导入跟踪中记录首组件,因此尾部属性引用从未被视为或分析为调用;OvertlyBadEvals分析通过不标记它,check_safety()返回LIKELY_SAFE且零发现。一个精心构造的pickle到达optparse.Values.read_file时,在通过fickling.load()加载pickle时执行exec(open(filename).read(), vars)——该函数将check_safety()链接到pickle.loads()作为显式安全门。这与模块来源信任漏洞CVE-2026-16760不同,且截至2026-10-30在供应商主分支提交d011709中仍然存在;截至2026-11-01未验证有完整修复。
Fickling是一个用于审查不可信pickle/模型文件的防御工具——正是ML供应链(恶意.pkl/.pt模型、pickle训练的检查点)的武器化路径。其安全门的绕过意味着恶意模型文件可被清除为“安全”,然后在ML管道反序列化时执行任意代码,静默地击败防御者依赖的模型加载隔离控制。CVSS 8.8,尚无官方补丁。
攻击者构造一个pickle,其STACK_GLOBAL操作数使用点分属性路径,使Fickling的分析将其解析为无关模块属性;check_safety()返回LIKELY_SAFE,然后pickle被反序列化并命中一个类方法(optparse.Values.read_file),该方法执行文件内容,以应用程序的权限实现任意代码执行。
Trail of Bits fickling <= 0.1.12(截至2026-11-01未验证完整修复)
截至该窗口无官方补丁;将fickling结果视为建议性——避免仅凭扫描器判定反序列化不可信pickle,使用不可执行序列化格式(例如safetensors),在无秘密的环境下沙箱/隔离模型加载,并监控Bombadil Systems / Trail of Bits以获取解决点分属性路径解析的修复版本。
NVD — CVE-2026-118938Bombadil Systems advisoryThe Hacker Wire — CVE-2026-118938 technical writeup
在实时动态中查看 浏览更多 AI 安全与治理相关发现 — 每日清晨更新。
打开动态 →