模型仓库出现陌生脚本,下载过不等于已经中招
- 2026-09-28 19:22:24

九月二十一日,安天披露有人向千问和DeepSeek的两个模型仓库投递了七十一个文件,内容与目标模型无关,涉及具有攻击能力的脚本。据报告,厂商当时均未接受合并请求。问题由此变得具体:文件挂在官方仓库页面下,能不能证明你部署的模型已经带上它们?
截至九月二十八日上午,本文核对原始记录发现,千问对应请求已被删除;DeepSeek的第五十四号请求仍显示开放,相关提交能够访问。把该提交的新增文件路径与当前主干目录逐一比较,交集为零。这个结果支持先核对实际下载版本,不支持直接把所有模型使用者都列为受害者。
需要分别举证的是三件事:陌生文件是否进入了发布版本,是否落到了自己的机器,是否被程序执行。上一层成立,不会自动替下一层提供答案。对开发者而言,第一项动作应是找部署记录里的完整提交标识,而不是看到厂商名字就清空缓存、重装整套环境。
先审一份提交
平台原始接口记载,DeepSeek这次提交发生于九月十六日世界协调时十点十五分五十三秒,换算为北京时间是当天十八点十五分五十三秒。提交标题声称上传七十一个文件。按日期计,提交早于研究披露五天、早于本次核对十二天,不能写成今天才出现的新攻击。
本文没有只采信标题里的数字,而是读取原始差异文件,逐项清点变更记录:七十一处新增文件标记,没有删除文件标记。这个统计证明了该次提交加入多少条路径,却不能证明七十一个文件全都运行过,更不能换算成七十一个感染样本或七十一个受害项目。
这些文件由外部账号提交,出现在请求合并的记录中。维护者接受贡献,和任何人提出贡献,是两个不同的动作。平台账号属于谁、页面使用哪家机构的仓库名称,都不能代替合并状态。原报告对恶意意图的判断应归属于安天,公开记录不能单独确定操作者身份。
主干没有它,本地仍要查版本
这次核对中,主干提交与可疑提交的父版本相同,新增路径也没有出现在主干文件列表里。这是可复查的版本关系,不是对整座仓库的安全认证;它只回答本次新增内容是否在这个时点进入主干,不能担保其他分支、镜像或未来版本。
平台官方下载文档给出了另一个关键条件:默认下载主干,但调用者可以指定分支、标签、合并请求或具体提交。因此,来自官方地址不等于来自正式主干。若部署记录指向特定请求,或者教程把下载版本改成某个提交,维护者尚未合并也不能替本地环境排除文件落地。
反过来,只因同一仓库里存在可疑提交,就要求所有使用者停机,也跳过了必要证据。一个团队若能提供实际部署的完整提交标识、文件清单及构建记录,而且与这次新增内容不相交,合理结论是尚未发现本次投递进入该部署的证据,而不是模型一定被污染。
这里不能只看今天配置文件写着什么。平台缓存文档说明,缓存可以同时保存多个版本的快照,分支引用只是指向其中某个提交。更新下载配置,不必然清掉旧快照;现在指向主干,也不能反证此前从未取过其他版本。核对对象应包括当时的构建产物和仍被任务使用的缓存。
研发负责人可以先圈定九月十六日之后调整过模型来源的流水线,再对照下载参数与产物清单。重点是曾临时试用贡献者版本、复现讨论区示例、复用他人模型缓存的任务。没有上述路径的项目不应仅凭同一模型名称与这些任务一起被判定为受影响。
文件在盘上,还缺一份运行证据
安天报告有一处需要读者停下来辨认。可视化页在描述可达提交时用了“拉取即中招”的措辞,另一处又明确说明没有自动执行入口,单纯克隆不会运行其中脚本。二者不能等量采用:文件进入磁盘与脚本开始执行,是不同的安全状态。
文字版报告把它限定为有条件的运行风险,并说明两家厂商未接受合并请求。本文没有运行其中脚本,也没有复现报告所述能力。因此可以写存在可疑代码投递、需要核对是否执行,不能据此宣布下载动作本身已经触发远程控制,更不能声称目标模型的回答被植入后门。
发现同名文件以后,还要核对路径和内容摘要。文件可能随整个快照下载,也可能只是分析人员留存的证据;名称相同不代表内容相同。记录命中理由时,应保留完整路径、文件摘要、首次出现时间与对应提交,不能把一个文件名搜索结果直接交成失陷报告。
运行层面应寻找终端审计或作业日志,核对进程启动时间、父进程、工作目录及访问资源。文件记录能回答是否到达,进程记录才可能回答是否运行。如果只发现缓存而没有执行记录,先按可疑资产隔离核查;若已有进程证据,就把调查扩展到该任务能够读取的凭据和数据。
日志缺失不是安全证明。终端未开审计、容器已销毁、构建日志过期,都可能使运行情况无法确认。此时应把结论标为无法排除执行,并保留现有产物交给安全人员研判,而不是用“没搜到进程”替代已经验证的未执行。处置强度应随证据变化,不随标题变化。
把检查写成四个可交付结果
模型使用者先交一份版本清单:列出受关注任务的仓库来源、完整提交标识、下载时间及产物位置。平台文档要求使用完整提交哈希指定版本,短标识只适合阅读,不宜作为唯一资产凭据。清单不能只有模型名称与发布日期,那样无法对应到本次提交。
构建维护者随后交一份差异结果:在已保留的产物或缓存中比对新增路径,命中后核对内容摘要。先保存清单与日志,再决定清理方式。不要为了检查而把可疑版本下载到生产主机,也不要执行仓库里自称修复、安装或检测的陌生脚本。
安全人员对命中机器交一份运行结论:明确是仅有文件、已见执行,还是日志不足。出现执行证据时,暂停相关任务并限制其继续接触生产资源,再按实际权限核查凭据使用和异常外联;仅有缓存时,不能直接把整个账号的所有操作都归因于这次投递。
仓库与发布负责人最后交一份防再入记录:将经过审核的完整提交与文件清单绑定到构建任务,改变版本必须留下审批与差异。合并请求适合讨论和测试,不应因页面位于官方组织名下,就被自动纳入生产发布来源。这项检查专门针对贡献入口与发布入口混用。
目前公开证据没有给出真实受害数量。千问请求被删除,也不能推出删除发生的时间、执行者或全部本地副本已经消失;主干比对则只代表核对时点。值得保存的诊断问题是:这台机器实际拿到哪个提交,哪条记录证明其中代码运行过?答不出来的部分,应写进证据缺口,而不是用“中毒”二字填满。

来源
1. 安天 针对开源模型代码仓的潜伏式投递研究;发布时间:2026-09-21 10:37;时区:论坛注明GMT+8;https://bbs.antiy.cn/thread-212661-1-1.html;恶意意图及脚本能力为安天分析;明确未合并、无自动执行入口。
2. 安天可视化报告;发布时间:同一9月21日报告,未另列时间;时区:未独立列时区;https://antiy.cn/research/notice&report/research_report/Antiy_Stealthy_Poisoning_of_OpenSource_AI_Repo_viz.html;与文字报告同源;正文核对拉取即中招和无自动执行入口的措辞冲突。
3. DeepSeek 原始合并请求54;发布时间:提交2026-09-16T10:15:53Z;请求晚1秒;时区:UTC;北京时间18:15:53;https://huggingface.co/deepseek-ai/DeepSeek-V4.1-Flash/discussions/54;9月28日上午实核open;71新增路径、0删除、与当时主干交集0。
4. 千问原合并请求198;发布时间:研究记录9月16日;当前状态核验9月28日;时区:核验UTC+8;https://huggingface.co/Qwen/Qwen3.8-27B/discussions/198;接口返回410已删除;不知道删除者、时间或本地副本情况。
5. Hugging Face 官方文件下载文档;发布时间:动态文档未显示首发时间;2026-09-28实读;时区:核验UTC+8;https://huggingface.co/docs/huggingface_hub/guides/download;默认main,可指定PR、标签及完整提交。
6. Hugging Face 官方缓存文档;发布时间:动态文档未显示首发时间;2026-09-28实读;时区:核验UTC+8;https://huggingface.co/docs/huggingface_hub/guides/manage-cache;多版本快照可并存,当前配置不证明历史从未下载。