4月30日,两个看似寻常的版本更新悄然登上Python包索引仓库。数小时后,全球数万名AI开发者的机器上,一个隐藏的运行时目录开始自动下载11MB的混淆代码——而这一切,只需要一行import lightning。
事件现场:恶意版本如何潜伏
被污染的版本号是2.6.2和2.6.3。根据Aikido Security、OX Security、Socket及StepSecurity的联合分析,这两个版本于2026年4月30日同日发布,目前已被PyPI管理员隔离。
攻击手法并不复杂,但足够隐蔽。Socket的描述很直接:「恶意包包含一个隐藏的_runtime目录,内含下载器和一个经过混淆的JavaScript载荷。」
整个执行链在lightning模块被导入时自动触发,无需用户任何额外操作。这意味着开发者按照惯例安装、导入,攻击就已经完成。
具体路径是这样的:Python脚本"start.py"首先下载并执行Bun JavaScript运行时,随后用这个运行时加载11MB的混淆载荷"router_runtime.js"。目标很明确——全面窃取凭证。
人物动作:攻击者的双重渗透策略
攻击者没有止步于单点突破。从窃取的凭证中,GitHub令牌会被单独拎出来验证,验证接口是api.github.com/user。确认有效后,这些令牌被用于向最多50个分支注入蠕虫式载荷——每个令牌能写入的仓库,每个仓库最多50个分支。
Socket补充了一个关键细节:「操作是upsert模式:创建尚不存在的文件,静默覆盖已存在的文件。」没有预先检查现有内容。每一次被污染的提交,作者身份都被硬编码为Anthropic的Claude Code——一个精心设计的伪装。
但这只是第一层。攻击者还埋设了npm传播通道:修改开发者本地的npm包,在package.json中植入postinstall钩子来调用恶意载荷,提升补丁版本号,重新打包.tgz文件。如果开发者不慎从本地环境发布这些被篡改的包,恶意代码就会进入npm,进而感染下游用户系统。
两条路径,一条针对Python生态,一条针对Node生态,彼此独立又相互放大。
背后逻辑:供应链攻击的"无感知"设计
PyTorch Lightning的定位很清晰——为PyTorch提供高层接口的开源框架。GitHub上超过31,100颗星,说明它在AI开发者中的渗透率。这种"基础设施型"项目的特点是:被依赖得多,被审查得少。
攻击者选择它的逻辑也很清晰。不是因为它代码质量差,恰恰相反——是因为它足够主流、足够被信任、足够"理所当然"地出现在requirements.txt里。
整个攻击链的设计都在降低被发现概率:
自动触发,消除人为交互环节;混淆载荷,增加静态分析难度;硬编码身份伪装,让恶意提交看起来像是正规AI工具的行为;双渠道传播,即使Python端被发现,npm端可能仍在扩散。
更微妙的是版本号策略。2.6.2和2.6.3是连续的补丁版本,符合日常更新节奏。开发者看到小版本号变动,通常不会警觉。
项目维护方的回应目前停留在调查阶段。「我们已知晓该问题并正在积极调查」,这是官方声明。Lightning在另一份公告中承认,「受影响版本引入了与凭证收集机制一致的功能」,但确切根因仍在排查。现有迹象指向GitHub账户被入侵。
行业影响:信任模型的系统性压力
这次事件与本周三针对SAP相关npm包的Mini Shai-Hulud供应链攻击被评估为同一活动的延伸。攻击者正在跨语言、跨平台地寻找高影响力节点。
对开发者的即时影响很明确:需要封锁2.6.2和2.6.3版本,如已安装则移除,降级至最后一个已知干净版本2.6.1,并轮换所有可能暴露的凭证。
但更深层的冲击在于开发流程本身。postinstall钩子的滥用、本地包的静默篡改、版本号的自动递增——这些原本用于提升效率的机制,正在被武器化为传播工具。一个不小心的npm publish,就可能让自己成为攻击者的分发节点。
PyPI的隔离动作是事后止损。从4月30日发布到被隔离,窗口期内的下载量、实际感染范围,目前尚无公开数据。但对于依赖持续集成/持续部署管道的团队来说,哪怕短暂的窗口也足以让恶意代码进入构建环境。
GitHub令牌的特殊处理也值得注意。攻击者没有直接滥用,而是先验证、再批量注入分支。这种"慢速+扩散"模式,比立即转售或利用更能逃避检测——直到某个被污染的分支被合并,或者被注入的载荷在下游触发。
硬编码Claude Code身份是一个有趣的信号。它暗示攻击者对AI开发工具链的熟悉,也可能是一种针对特定受众的心理战术——看到熟悉的工具名,警觉性自然降低。
目前维护方尚未公布账户被入侵的具体方式。是钓鱼、凭证泄露、还是供应链上游的进一步污染,这些细节将决定后续防御措施的针对性。但无论如何,一个31,000+星项目的发布管道被攻破,本身就是对开源治理结构的拷问。
对于每天pip install的开发者来说,这次事件提供了一个残酷的提醒:星标数量不等于安全审计深度,版本号的小幅跳动可能藏着完整的攻击链,而你最信任的基础设施,可能正在你最不经意的导入语句中执行11MB的混淆代码。
热门跟贴