Hijacked npm and Go Packages Exploit VS Code Tasks to Deploy Python Infostealer(2026-07-05)
2026年7月5日,一个令人不安的安全事件在开发者社区引发震动:攻击者通过劫持流行的npm和Go软件包,利用VS Code任务系统作为恶意载荷的载体,向受害者的开发环境中悄无声息地植入Python信息窃取器。这起攻击再次证明:开源依赖的供应链安全,从来不是小事。
事件还原:开发工具如何变成“内鬼”
二级标题:攻击链的四个关键步骤
三级标题:1. 劫持合法包,伪装升级
研究人员发现,攻击者盯上了两个日均下载量过万的npm包(@ui-lib/ui-utils)以及一个Go库(gopkg.in/crypto-helpers)。他们通过窃取维护者的API密钥,向这些包的最新版本中注入了恶意代码。
三级标题:2. 隐藏依赖:指向一个“无害”的配置文件
恶意代码并非直接下载并执行二进制文件。相反,它利用npm包的postinstall脚本,自动向开发者本地的.vscode/tasks.json文件中插入一条预设任务。这条任务伪装为“一键格式化代码”,实际上却指向攻击者控制的远程服务器上的一份Python脚本。
三级标题:3. 触发执行,静默安装InfoStealer
当开发者下次打开VS Code并按下“格式化文档”快捷键(如Shift+Alt+F),预设任务便自动运行。curl/wget下载的Python脚本会迅速执行,从系统剪贴板、浏览器密码库以及SSH私钥文件中窃取敏感信息。
三级标题:4. 数据外传:隐蔽且难以察觉
窃取的数据被Base64编码后,通过DNS TXT记录或伪装成API请求的HTTP POST包外传。由于流量特征与正常开发活动高度重合,传统网络防火墙很难识别。
受影响的范围与数据
根据Snyk和GitHub Security Lab联合发布的报告,在发现时,已有超过3.2万个项目直接或间接依赖了这两个被污染的软件包。估算受影响的开发者约4万余人。攻击自2026年6月中旬起已持续活跃约三周,期间至少有3400个唯一IP地址触发了恶意任务,其中大量为个人开发者及中小企业服务器。
关键事实:
- 攻击无需用户执行可疑文件,所有操作均通过VS Code内置任务完成。
- 大多数防病毒软件在发布时尚未将该Python脚本标记为恶意,因为其动态加载的代码在每次执行时都会随机变形。
实用建议:如何保护自己的开发环境
面对这种“工具即恶意”的新型攻击,普通开发者绝不能掉以轻心。
-
严格审核依赖更新:不要盲目运行
npm update或go get -u。在升级前,先检查包的GitHub页面,查看最近commit记录和Release Notes是否有异常。 -
清理VS Code任务:定期打开
.vscode/tasks.json文件,查看是否有自己不记得添加的陌生任务。一旦发现,立即删除并核查来源。 -
运行前预览
postinstall脚本:在npm中,可以通过npm install --ignore-scripts跳过安装脚本,手动审查每个包的package.json中的scripts字段。 -
启用文件系统白名单:使用如
CodeQL或NodeSeal等工具,设置规则阻止tasks.json等配置文件被意外修改。 -
启用Two-Factor Authentication:对于维护开源包的关键账户,务必开启双因素认证,防止攻击者通过撞库或钓鱼窃取发布权限。
正确的行动,胜过之后的焦虑
别等到你的SSH密钥被泄露、代码仓库被清空之后才后悔。立即检查你本地的~/.vscode或项目中的.vscode/tasks.json文件,确认其中是否有多余任务。如果你发现自己的项目正在使用@ui-lib/ui-utils(版本≤1.8.4)或gopkg.in/crypto-helpers(版本≤2.1.0),请立即升级到已修复的版本。
安全的开发环境,始于每一个谨慎的执行。今天抽出十分钟,保护你过去几个月的所有代码。
免责声明:本文所述安全事件基于公开研究报告分析整理,仅作为知识传播和风险提示之用。文中提及的具体软件包及版本在安全研究团队介入后已由作者或社区发布修复版本。我们不鼓励用户直接复制或执行任何疑似恶意的代码片段,也不对第三方安全工具的有效性作任何担保。开发者在采取任何技术操作前,请自行评估风险并遵循合法合规的流程。