文章总结: 2026年5月19日微步情报局监测到npm生态系统特大规模供应链投毒事件,攻击者通过沦陷的atool账户发布323个包的639个恶意版本,主要影响@antv系列及echarts-for-react等高流量包。攻击手法包括在package.json植入preinstall脚本执行高强度混淆的恶意代码,系统性窃取开发者主机与CI/CD环境的凭证、Token及敏感数据,并通过HTTPS加密外传或利用GitHubToken创建仓库备份。事件与5月11日TanStack投毒事件高度相似,疑似基于Shai-Hulud攻击源码的模仿犯罪。文档提供详细排查方法(检查依赖、IOCs、网络日志)及处置建议(隔离环境、凭证轮换、代码回滚)。 综合评分: 85 文章分类: 供应链安全,漏洞预警,恶意软件,安全运营,WEB安全
Shai-Hulud投毒竞赛开场,npm 639个版本被黑
微步情报局 微步情报局
微步在线研究响应中心
2026年5月19日 16:34 北京
在小说阅读器读本章
去阅读
5月19日,微步情报局监测到一起针对npm生态系统的特大规模供应链投毒事件。攻击者利用被攻陷的npm维护者账户atool,在短时间内批量发布了大量恶意软件包版本,涉及323个独立程序包的639个恶意版本,受影响最严重的是@antv(数据可视化开源品牌)系列包。
影响范围
● 核心受控账户:npm维护者账户 atool。
● 波及数据:在此次攻击活动中,共发现了323个独立程序包的639个恶意版本。
● 主要影响生态:受影响最严重的是 @antv系列包。
● 其他受影响范围:攻击还波及到一些其他的npm包。
● 关键受影响包列表:
echarts-for-react:一个React封装的图表库,周下载量约110万次,是本次攻击中影响最大的包。
@antv 系列核心库:@antv/g2, @antv/g6, @antv/x6, @antv/l7, @antv/s2, @antv/f2, @antv/g, @antv/g2plot, @antv/graphin, @antv/data-set 等。
其他社区包:timeago.js, size-sensor, canvas-nest.js 等。
手法分析
● 初始入侵:在package.json中添加”preinstall” : “bun run index.js”命令,导致在npm包安装时执行该命令,运行恶意脚本。
● 代码混淆:恶意脚本index.js经过高强度混淆处理,使用大字符串数组查找表和运行时字符串解码来隐藏其行为。
● 信息窃取:载荷主要针对开发者主机和CI/CD环境,系统性地搜索和窃取各类高价值敏感信息,包括但不限于:
凭证与Token:GitHub Token, npm Token, AWS Access Key, Vault Token, SSH私钥, Docker认证文件。
CI/CD平台:涵盖GitHub Actions, GitLab CI, CircleCI, Jenkins等18个主流CI/CD平台。
其他关键数据:数据库连接字符串和Kubernetes服务账户材料。
● 数据外传:
主信道:将窃取的数据压缩后,通过 AES-256-GCM 加密,再将密钥用 RSA-OAEP 加密,最终通过HTTPS POST请求发送到
https://t.m-kosche.com:443/api/public/otel/v1/traces。
备用信道:如果载荷成功获取到有效的GitHub Token,它会在受害者账户下创建一个名称带有特定模式的仓库(如<单词>–<单词>–<3位数字>),并将窃取的数据保存在仓库的results/results-*.json文件中。
● 蠕虫式传播:载荷能验证窃取的npm Token有效性,然后下载、篡改并重新发布受害者维护的其他包,表现出极强的自我复制与横向移动能力。
溯源分析
此次攻击方式和恶意代码特征和5月11日针对TanStack的投毒事件高度相似,在TanStack的投毒事件中,攻击者通过污染了Github Actions中的pnpm store cache来将恶意代码在release runner中运行,从而窃取了npm token,导致TanStack一系列的npm包被投毒攻击。
TanStack的投毒事件是Mini Shai-Hulud供应链攻击中的事件之一,该攻击被归属于TeamPCP组织,但是值得注意的是,TeamPCP组织已经开放了Shai-Hulud攻击源码,并且和知名暗网论坛BreachForums一起组织了Shai-Hulud供应链攻击竞赛:
所以此次针对antv的供应链投毒事件可能不是源自TeamPCP组织,而是利用Shai-Hulud攻击源码实现的模仿犯罪。
排查方法
-
检查项目依赖:审查项目根目录和node_modules下所有package.json文件,排查是否存在被篡改的preinstall脚本。
-
搜索失陷指标(IOCs):在项目中搜索上述提及的网络、文件、代码和行为指标。
-
审查网络流量日志:检查CI/CD流水线和开发环境是否有到t.m-kosche.com的DNS解析请求或HTTPS连接记录。
-
检查GitHub账户活动:检查组织或个人GitHub账户下,是否出现了来源不明、命名模式可疑的新仓库。
处置建议
● 隔离环境:立即断开受影响机器或容器的网络连接。
● 凭证轮换:立即轮换所有可能暴露的密钥和Token。这包括但不限于npm Token、GitHub Personal Access Token、所有云服务商(AWS等)的Access Key、数据库密码、CI/CD平台密钥等。
● 代码回滚:将受影响的依赖回滚至确认安全的版本,或暂时使用官方提供的安全替代品。
● 彻底清理:删除整个node_modules目录和package-lock.json文件后重新安装依赖。建议在受控环境中进行,防止二次感染。
● 安全审计:对受影响的CI/CD流水线进行全面的安全审计。
IOCs
网络指标
● 恶意域名和URL:
t.m-kosche.com
https://t.m-kosche.com:443/api/public/otel/v1/traces
● 可疑的合法服务API调用(被恶意脚本滥用于验证令牌或证书):
https://fulcio.sigstore.dev/api/v2/signingCert
https://rekor.sigstore.dev/api/v1/log/entries
文件与代码指标
● 恶意npm生命周期脚本:”preinstall” : “bun run index.js”
● 恶意GitHub依赖:
“@antv/setup” : “github:antvis/G2#1916faa365f2788b6e193514872d51a242876569”
行为指标
● GitHub仓库特征:攻击者创建的仓库通常遵循 <单词>–<单词>–<3位数字> 的命名模式,例如 sayyadina-stillsuit-852, atreides-ornithopter-112 等。
● 仓库反标记:仓库描述或README中包含反转的字符串 niagA oG eW ereH :duluH-iahS 或 niaga og ew ereh :duluh-iahs,正序为Shai-Hulud: Here We Go Again。
·END·
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:微步在线研究响应中心 微步情报局 微步情报局《Shai-Hulud投毒竞赛开场,npm 639个版本被黑》
版权声明
本站仅做备份收录,仅供研究与教学参考之用。
读者将信息用于其他用途的,全部法律及连带责任由读者自行承担,本站不承担任何责任。










评论