【Bug已解决】[Security] Incomplete Fix for CVE-2026-44513: community Pipeline Branch Bypasses trust_remo…

发布时间:2026/8/15 22:44:08

【Bug已解决】[Security] Incomplete Fix for CVE-2026-44513: community Pipeline Branch Bypasses trust_remo…
【Bug已解决】[Security] Incomplete Fix for CVE-2026-44513: community Pipeline Branch Bypasses trust_remote_code Check 解决方案一、现象长什么样diffusers 的trust_remote_code机制是用来防止加载不可信自定义流水线community pipeline时执行任意代码的。按设计只要你没有显式写trust_remote_codeTrue加载任何需要远程代码的 pipeline 都必须被拦下来并抛错# 期望行为trust_remote_code 没开应该被拦 ValueError: Loading ... requires you to execute the modeling file in the repo. Make sure you have read the code and are confident it is safe to run. You can avoid this by passing trust_remote_codeTrue.但 CVE-2026-44513 的修复是不完整的当加载路径走某个特定分支比如本地已经有缓存、或走custom_pipeline字符串而非从 hub 拉取时trust_remote_code的检查被跳过了于是即使trust_remote_codeFalse远程代码仍然被执行了。现象有两种# 症状 A本该抛错却静默成功远程代码已经跑完 pipeline DiffusionPipeline.from_pretrained( some-community/pipeline, trust_remote_codeFalse) # 竟然加载成功 # 症状 B能加载但根本没问过用户同不同意等于安全开关形同虚设这是一个典型的安全回归它不是功能崩了而是安全闸门在某个分支上没关紧用户以为关着的门其实开着。二、背景diffusers 在DiffusionPipeline.from_pretrained里有两条加载自定义流水线的路径标准 hub 路径从模型仓库拉取modeling_*.py这种会走完整的trust_remote_code校验community pipeline 分支通过custom_pipelineorg/name或在缓存已存在时走本地加载这条分支本应同样校验但 CVE 修复只在路径 1 上加了检查路径 2 漏了。trust_remote_code的语义很明确远程代码 会exec仓库里的 Python 文件有执行任意代码的能力。所以加载前必须“要么用户显式同意True要么拒绝加载”。这是个授权检查authorization不是可选项。一旦某个分支绕过它就等于任何能诱导用户加载特定 pipeline 的人都能在他机器上跑代码。为什么是“incomplete fix”因为修复只堵了“从网络拉取时”的那一处没堵“本地缓存命中时”或“custom_pipeline 字符串解析时”的那一处——安全修复最忌讳的就是只补一个入口留下并行入口。三、根因根因是授权检查没有收敛到单一入口存在并行加载分支检查只加在一个分支CVE 补丁在get_class/ hub 下载逻辑里加了if not trust_remote_code: raise但custom_pipeline的处理函数里有另一条直接importlib加载本地文件的路径没加同样的守卫。缓存命中短路了检查当本地snapshots/缓存里已经有这份远端代码时加载逻辑走“直接读本地文件”分支跳过了“是否信任远程代码”的判断因为代码已经“在本地了”。但本地这份代码正是之前从远程来的信任状态不该因为“已经下载过”就失效。trust_remote_code默认语义被分支忽略主路径读kwargs.get(trust_remote_code, False)但 community 分支用了另一个局部变量或默认值导致False没传进去。本质这是授权检查分散在多个加载入口、且缓存状态被错误当作信任状态导致的绕过。和所有“安全修复只补一半”的问题一样根因是缺少一个所有加载路径都必须经过的“信任闸门”。四、最小可运行复现下面用最小代码模拟“两个加载入口只有一个做信任检查”的绕过不真联网用本地文件模拟远程代码importosimportimportlib.utilimporttempfile# 模拟一份“远程”自定义 pipeline 代码危险会执行任意语句remote_code print([evil] remote code executed!) class DummyPipeline: pass tmptempfile.mkdtemp()mod_pathos.path.join(tmp,modeling_dummy.py)withopen(mod_path,w)asf:f.write(remote_code)defload_via_hub_check(mod_path,trust_remote_code):标准 hub 路径做了信任检查。ifnottrust_remote_code:raiseValueError(trust_remote_code must be True to load remote code)specimportlib.util.spec_from_file_location(dummy,mod_path)modimportlib.util.module_from_spec(spec)spec.loader.exec_module(mod)# 执行远程代码returnmoddefload_via_community_branch(mod_path,trust_remote_code):community 分支CVE 修复漏掉的入口没做检查。# 注意这里根本没有读 trust_remote_code直接加载specimportlib.util.spec_from_file_location(dummy,mod_path)modimportlib.util.module_from_spec(spec)spec.loader.exec_module(mod)# 远程代码被执行了returnmod# 用户明确关掉信任trustFalsetry:load_via_hub_check(mod_path,trust)# 正确被拦下exceptValueErrorase:print(hub path blocked:,e)load_via_community_branch(mod_path,trust)# 绕过直接执行了 [evil]运行后会看到[evil] remote code executed!—— 即便trustFalsecommunity 分支依然执行了远程代码。这就是 incomplete fix 的精确缩影。五、解决方案第一层最小直接修复最小修复把信任检查加进那个漏掉的分支并在缓存命中时也重新校验而不是因为“已经在本地”就跳过。importimportlib.utilimportosdef_assert_trusted(trust_remote_code:bool,name:str):所有加载入口都必须先过的信任闸门。ifnottrust_remote_code:raiseValueError(fLoading{name}requires executing remote modeling code. fPass trust_remote_codeTrue only if you trust its source.)defload_via_community_branch_fixed(mod_path,trust_remote_code):_assert_trusted(trust_remote_code,os.path.basename(mod_path))# ← 补上specimportlib.util.spec_from_file_location(dummy,mod_path)modimportlib.util.module_from_spec(spec)spec.loader.exec_module(mod)returnmoddefload_from_cache_fixed(mod_path,trust_remote_code):# 缓存命中不等于信任仍然先过闸门_assert_trusted(trust_remote_code,os.path.basename(mod_path))# ... 再读本地文件这一层改动最小在漏掉的分支和缓存分支各加一行_assert_trusted就能堵住绕过。但它依赖“每个新分支都记得加”下看第二层怎么把闸门收口。六、解决方案第二层结构性改进把“任何加载远程/自定义代码的入口都必须先过信任闸门”固化成单一事实来源。下面这个 dataclass 是信任策略的集中地所有加载函数只通过它的require_trusted方法执行加载从结构上保证不存在能绕过闸门的并行入口。fromdataclassesimportdataclass,fieldfromtypingimportCallable,Dict,Tupleimportimportlib.utilimportosdataclassclassTrustRemoteCodeGuardPolicy:单一事实来源集中管理 trust_remote_code 授权闸门。_loaders:Dict[str,Callable[[str],object]]field(default_factorydict)defregister_loader(self,name:str,loader:Callable[[str],object])-None:self._loaders[name]loaderdefrequire_trusted(self,trust_remote_code:bool,label:str)-None:唯一授权点信任未开启则一律拒绝。ifnottrust_remote_code:raiseValueError(fLoading{label}requires executing remote code. fSet trust_remote_codeTrue only if you trust the source.)defload(self,name:str,mod_path:str,trust_remote_code:bool)-object:# 无论走 hub / community / cache 哪个分支这里都是唯一入口self.require_trusted(trust_remote_code,name)ifnamenotinself._loaders:raiseKeyError(fno loader registered for{name})returnself._loaders[name](mod_path)# 注册各分支的“纯加载器”不含信任逻辑逻辑全在 policy.load 里policyTrustRemoteCodeGuardPolicy()policy.register_loader(hub,lambdap:_exec_module(p))policy.register_loader(community,lambdap:_exec_module(p))policy.register_loader(cache,lambdap:_exec_module(p))def_exec_module(mod_path:str):specimportlib.util.spec_from_file_location(m,mod_path)modimportlib.util.module_from_spec(spec)spec.loader.exec_module(mod)returnmod这一层的关键收益单点授权require_trusted是唯一闸门新增 hub/community/cache 任何分支都只调policy.load不可能绕过信任状态与缓存解耦缓存命中也走load所以“已经下载过”不再等于“自动信任”单一事实来源所有“什么情况下能执行远程代码”的约定都收口在TrustRemoteCodeGuardPolicy安全审计只盯它。七、解决方案第三层断言 / CI 守护把第二层的闸门钉成 pytest挂进 CI确保任何分支都不可能在trust_remote_codeFalse时执行远程代码importosimporttempfileimportpytestfromyour_package.trust_guardimportTrustRemoteCodeGuardPolicy,_exec_moduledef_make_remote_file(tmp_path):ptmp_path/modeling_dummy.pyp.write_text(class DummyPipeline:\n pass\n)returnstr(p)deftest_all_branches_blocked_when_untrusted(tmp_path):# 断言 1hub / community / cache 三个分支在 trustFalse 时全部被拦policyTrustRemoteCodeGuardPolicy()policy.register_loader(hub,lambdap:_exec_module(p))policy.register_loader(community,lambdap:_exec_module(p))policy.register_loader(cache,lambdap:_exec_module(p))path_make_remote_file(tmp_path)forbranchin(hub,community,cache):withpytest.raises(ValueError):policy.load(branch,path,trust_remote_codeFalse)deftest_branch_allowed_when_trusted(tmp_path):# 断言 2trustTrue 时三个分支都能正常加载policyTrustRemoteCodeGuardPolicy()policy.register_loader(hub,lambdap:_exec_module(p))policy.register_loader(community,lambdap:_exec_module(p))policy.register_loader(cache,lambdap:_exec_module(p))path_make_remote_file(tmp_path)forbranchin(hub,community,cache):assertpolicy.load(branch,path,trust_remote_codeTrue)isnotNonedeftest_cache_hit_still_requires_trust(tmp_path):# 断言 3即便“已经在本地缓存”未信任也必须拒绝缓存≠信任policyTrustRemoteCodeGuardPolicy()policy.register_loader(cache,lambdap:_exec_module(p))path_make_remote_file(tmp_path)withpytest.raises(ValueError):policy.load(cache,path,trust_remote_codeFalse)三条断言从“三分支全拦”“信任时放行”“缓存仍须信任”三面把绕过钉死确保 CVE 修复不再“补一半”。八、排查清单遇到trust_remote_code形同虚设、或自定义 pipeline 在False时仍加载时先确认是哪个加载分支是custom_pipeline字符串还是本地缓存命中还是从 hub 拉取找到对应代码路径。在该分支里搜importlib/exec_module/from_pretrained的加载点确认前面有没有trust_remote_code判断。没有就漏了。缓存命中分支最容易漏检查它是否因为“文件已在本地”就跳过了信任判断。缓存状态 ≠ 信任状态。把所有加载入口都改为只经过第二层的policy.load单一闸门删掉散落的if trust_remote_code判断避免多入口不一致。跑第三层 pytest断言hub/community/cache三个分支在False时全抛ValueError。安全修复的原则闸门只允许有一个且必须每个入口都过。任何“只在某一处加检查”的改法都是 incomplete fix。九、小结CVE-2026-44513 的 incomplete fix本质是**trust_remote_code这个授权闸门只加在了 hub 下载分支而 community pipeline / 本地缓存命中分支绕过了它**导致用户明明设了trust_remote_codeFalse远程代码仍被执行。根因是授权检查分散在多个加载入口、且缓存状态被错误当成信任状态。修复分三层——第一层在漏掉的分支和缓存分支各补一行信任断言打通最小闭环第二层用TrustRemoteCodeGuardPolicy这个 dataclass 把所有加载入口收口到唯一的require_trusted闸门从结构上消灭并行绕过第三层用三条 pytest 把“三分支全拦、信任时放行、缓存仍须信任”钉死在 CI。安全心法一句话授权检查只能有一个入口且必须每个加载路径都经过它少一个就是 incomplete fix。

相关新闻

ArcGIS数据裁剪全攻略:从矢量到栅格的精准提取技巧

ArcGIS数据裁剪全攻略:从矢量到栅格的精准提取技巧

2026/8/15 22:44:08

1. 先搞清楚“裁剪”在ArcGIS里到底指什么很多人一看到“裁剪”就觉得是简单的切图,但在ArcGIS里,这个操作远不止如此。它解决的核心问题是:如何从一个大的地理数据图层(比如全国的行政区划图)中,精确地提取…

EEAT内容体系搭建全流程|5个阶段、12个步骤、3-6个月落地

EEAT内容体系搭建全流程|5个阶段、12个步骤、3-6个月落地

2026/8/15 22:34:07

EEAT内容体系搭建全流程|5个阶段、12个步骤、3-6个月落地 一、为什么需要标准化的EEAT建设流程 很多企业在了解EEAT后,面临的共同困惑是:“我们知道应该做什么,但不知道从哪里开始。” EEAT内容体系建设不是一个“写几篇文章”…

DeepSeek AI开发实战:从API集成到工作流重构的完整指南

DeepSeek AI开发实战:从API集成到工作流重构的完整指南

2026/8/15 22:34:07

最近几天,技术圈和财经圈被一份报告搅动得有点热闹。报告里说,全球亿万富翁的财富版图正在经历一场由AI驱动的剧烈重塑。最引人注目的不是那些老牌科技巨头,而是一个在开发者社区里被频繁讨论的名字——DeepSeek的创始人梁文锋,其…

从零部署高性能Trino集群:联邦查询引擎的配置、调优与运维实战

从零部署高性能Trino集群:联邦查询引擎的配置、调优与运维实战

2026/8/15 23:34:12

1. 项目概述:为什么我们需要一个高性能的分布式SQL查询引擎?如果你处理过海量数据,尤其是数据分散在HDFS、MySQL、Kafka、Cassandra等五花八门的存储系统中,你肯定体会过“数据孤岛”的烦恼。想写一个跨库的关联查询,要…

基于Bash的轻量级LLM Agent实现:Dora项目实战解析

基于Bash的轻量级LLM Agent实现:Dora项目实战解析

2026/8/15 23:34:12

最近在探索 LLM Agent 的实现方案时,发现很多框架为了追求功能强大,引入了复杂的依赖和抽象层,导致学习曲线陡峭,部署也略显笨重。如果你只是想快速体验一个能调用系统命令、处理文件、与外部简单交互的智能体,有没有更…

Linux命令行高效开发:从基础工具到自动化实践

Linux命令行高效开发:从基础工具到自动化实践

2026/8/15 23:34:12

1. 为什么命令行是Linux开发者的生产力倍增器在2023年Stack Overflow开发者调查中,Linux命令行工具的使用率在专业开发者中达到87%,这个数字背后反映的不仅是习惯,更是一种效率哲学。我曾在接手一个遗留项目时,用一行find命令替代…

射频连接器入门与使用实践(下)

射频连接器入门与使用实践(下)

2026/8/15 23:34:12

四、SMA、2.92 mm、3.5 mm:机械能接,不等于电气等价 这是本文最值得反复强调的一条:SMA、2.92 mm、3.5 mm 之间存在机械兼容关系,但“机械能拧上 ≠ 电气性能达标”。在高频下混用,可能造成驻波恶化、反射增大和测试误差。 接口 本文频率口径 介质信息 外导体内径 机…

大模型量化后非英语能力为何退化 2-4 倍?LCD 语言条件反量化方法解析

大模型量化后非英语能力为何退化 2-4 倍?LCD 语言条件反量化方法解析

2026/8/15 23:34:12

【技术解读】本文深度解析 Nirmal Thomas 于 2026-08-12 提交的 LCD(Language-Conditional Dequantization,arXiv:2608.11786):它把 LoRA 从"任务适配工具"改造成"量化误差的定向补丁",专门修复激…

从LLM裸用到智能体框架:Agent Harness核心架构与LangGraph实战

从LLM裸用到智能体框架:Agent Harness核心架构与LangGraph实战

2026/8/15 23:24:11

1. 项目概述:从“裸奔”到“上马具”的LLM应用进化如果你最近在捣鼓大语言模型(LLM),比如调用OpenAI的API或者部署一个开源的Llama、Qwen,大概率经历过这样的场景:你兴冲冲地写了几行代码,把问题…

比较好的亚太EMBA,问了6位校友师资差别真的挺大

比较好的亚太EMBA,问了6位校友师资差别真的挺大

2026/8/13 11:01:28

比较好的亚太EMBA核心差异先看什么?对于希望兼顾工作与系统管理能力提升的亚太区高管而言,筛选匹配度高的EMBA项目时,师资配置是决定学习体验与实际收获的核心要素之一。我们结合3-4个公开信息透明、办学历史较长的亚太区主流EMBA项目特点&am…

备考3个月对比6份资料 海外游学的亚洲EMBA面试注意点

备考3个月对比6份资料 海外游学的亚洲EMBA面试注意点

2026/8/14 10:48:24

备考海外游学的亚洲EMBA面试,核心要围绕项目国际化设计逻辑、个人跨文化管理经验匹配度两个维度准备,避免把游学模块等同于普通旅游参访的认知偏差。不少备考者花3个月对比6份资料,却容易忽略面试官对“国际视野落地能力”的考察——比如香港…

比较好的国内EMBA,问了二十位校友聊透人脉价值

比较好的国内EMBA,问了二十位校友聊透人脉价值

2026/8/13 17:17:06

比较好的国内EMBA核心差异体现在哪些方面?比较好的国内EMBA的核心长期价值,很大程度上依托于校友网络的连接质量与资源生态的活跃度,这也是不少高管在择校时优先考量的因素。我们结合3-4个市场关注度较高的项目公开信息,从课程、师…

一文读懂快消WMS怎么选?2026年国内外10大主流WMS品牌盘点

一文读懂快消WMS怎么选?2026年国内外10大主流WMS品牌盘点

2026/8/15 0:03:07

快消品(FMCG)是流通速度较快、竞争较为激烈的行业之一。一瓶饮料从出厂到消费者手中,往往只有几十天甚至几天的周转窗口。这决定了快消行业的仓储管理系统(WMS)与制造业、电商行业存在明显区别:它不仅需要管…

内景 空间站内部 中国空间站 太空 内仓

内景 空间站内部 中国空间站 太空 内仓

2026/8/15 0:03:07

本项目为前几天收费帮学妹做的一个项目,在工作环境中基本使用不到,但是很多学校把这个当作编程入门的项目来做,故分享出本项目供初学者参考。 一、项目描述 空间站内部 中国空间站 太空 内仓 地址:本地PC端运行(或Web…

重新定义数据接口:3个突破性场景让通达信数据读取更智能

重新定义数据接口:3个突破性场景让通达信数据读取更智能

2026/8/15 0:03:07

重新定义数据接口:3个突破性场景让通达信数据读取更智能 【免费下载链接】mootdx 通达信数据读取的一个简便使用封装 项目地址: https://gitcode.com/GitHub_Trending/mo/mootdx 当我们面对海量金融数据时,传统的数据获取方式往往让我们陷入困境—…

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

摆脱论文困扰!盘点2026年全网爆红的的AI论文写作工具

2026/8/15 1:04:46

一天写完毕业论文在2026年已不再是天方夜谭。2026年最炸裂、实测能大幅提速的AI论文写作工具,覆盖选题构思、文献整理、内容生成、格式排版等核心场景,真正帮你高效搞定论文难题。 一、全流程王者:一站式搞定论文全链路(一天定稿首…

导师推荐!2026最新AI论文工具测评与实用推荐

导师推荐!2026最新AI论文工具测评与实用推荐

2026/8/15 10:10:27

2026年真正好用的AI论文工具,核心看生成的论文质量、低AI味、格式正确、学术适配四大指标。综合实测,千笔AI、ThouPen、豆包、DeepSeek、Grammarly 是当前最值得推荐的梯队,覆盖从免费到付费、从中文到英文、从文科到理工的全场景需求。 一、…

告别游戏崩溃:XCOM 2模组管理器的智能革命

告别游戏崩溃:XCOM 2模组管理器的智能革命

2026/8/14 19:35:14

告别游戏崩溃:XCOM 2模组管理器的智能革命 【免费下载链接】xcom2-launcher The Alternative Mod Launcher (AML) is a replacement for the default game launchers from XCOM 2 and XCOM Chimera Squad. 项目地址: https://gitcode.com/gh_mirrors/xc/xcom2-lau…