故事是这样的。
昨天,也就是4月30号晚上,我在刷Hacker News,突然看到一条帖子炸出来了,340多点,117条评论,标题写着「Shai-Hulud主题的恶意软件在PyTorch Lightning AI训练库里被发现」。
Shai-Hulud,这名字听着就很科幻,查了一下原来是《沙丘》里那种巨大的沙虫。然后我仔细看完了Semgrep的分析报告,看完后背一阵发凉。
发生了什么
PyPI上的lightning包,也就是那个大名鼎鼎的PyTorch Lightning深度学习框架,在2.6.2和2.6.3这两个版本里,被植入了恶意代码。
这个包有多通用呢?但凡你做图像分类、微调LLM、跑扩散模型、或者开发时序预测的,lightning十有八九就在你的依赖树里。
更恐怖的是激活方式,你什么都不用做,pip install lightning就够了。甚至只是import lightning一下,恶意代码就自动运行了。包里面藏了一个隐藏的_runtime目录,里面有混淆过的JavaScript payload,一import就触发。
它偷了什么
攻击者用的是四通道并行数据外传,即使某个路径被封堵,其他通道照样能把数据送出去。域名和路径信息都加密存储,静态分析,根本看不出名堂。
而且这不是单纯的偷数据,它还会蠕虫式传播。如果它发现你有npm发布权限,它会往你所有能发布的包里面,注入一个setup.mjs dropper和router_runtime.js,然后把你的scripts.preinstall改成执行这个dropper,再自动patch版本号重新发布。
任何下游开发者装了这些被污染的包,就会中招,Token继续被偷,包继续被污染。链条就这么一直传下去。
Dune粉丝还是蓄谋已久
有意思的是病毒的主题。Semgrep判断这是同一个威胁组织的手笔,之前他们搞过一次「Mini Shai-Hulud」攻击,直接攻击npm圈。这次换了路子,从PyPI下手,但JavaScript payload和蠕虫逻辑几乎一模一样。
命名也很有意思,用的是《沙丘》宇宙的梗。commit信息前缀是EveryBoiWeBuildIsAWormyBoi,跟原始的Mini Shai-Hulud活动区分开来。
说真的,看到这种「我就是故意用你熟悉的IP来掩护」的思路,还是有点佩服攻击者的,这不是随便起的名字,是有设计感的。
你现在需要做什么
立刻检查你的项目。
查一下你装的是不是2.6.2或2.6.3这两个版本,
pip show lightning | grep Version
如果是,立刻回退到2.6.1或者升级到官方已修复的最新版本(如果有的话)。同时去 Semgrep 的Advisories页面查一下你有没有中招,
https://semgrep.dev/orgs/-/advisories
如果你用了GitHub Token、npm Token、或者在任何可能暴露的环境变量里跑过这个版本,别犹豫,全部轮换一遍。GitHub Token、npm token、所有云服务的Access Key。
还要查一下你的.claude/和.vscode/目录有没有异常内容,这些都是攻击者用来持久化的位置。
为什么这件事值得你认真对待
你会说,我不做深度学习,我不用lightning。
但问题是,这个包已经成了整个AI开发圈的基础设施之一。它的依赖树连接着无数项目,你用的某个开源AI项目就依赖它。而且这种「供应链攻击」的逻辑很简单,攻击一个最大的节点,所有下游全中招。
就像之前的left-pad事件,npm上一个不到20行的包被删了,整个互联网炸了一大片。而这次更狠,不只是删包,是直接往包里塞病毒。
我不是想制造恐慌,但这种攻击只会越来越多,而且会越来越精准。攻击者知道AI开发者手里的Token值钱,知道云服务密钥值钱,知道你的GitHub仓库里有东西可以污染。
说实话我第一反应是慌的。你想想,光天化日之下,import一下就能被偷东西,这事儿搁谁身上不懵。
你的AI开发环境安全吗?
PyTorch Lightning、LangChain这类AI开发框架已成为攻击者的新目标。定期检查依赖包版本、使用锁文件、隔离环境,是每个AI开发者必备的习惯。
← 查看更多AI热点追踪