🏢 公司C档 · NaN分

那只沙虫,又爬回 npm 了

··约1分钟阅读

📋 总体概括

2026年10月8日,Tensorlake 的 npm 包 0.5.144 版本被植入 Shai-Hulud 供应链蠕虫新变体,可窃取开发者机密、加密货币凭据,并利用偷到的发布令牌自我复制扩散。本文拆解攻击机理、防御打法与供应链身份安全的产业逻辑。

📄 正文

10 月 8 日,Tensorlake 的 npm 包被塞进一个恶意版本,里面藏着 Shai-Hulud 供应链蠕虫的新变体。这不是一次普通的投毒——窃密、摸加密货币、再用你的令牌去感染别人,一气呵成。当供应链攻击开始自我复制,整个防御逻辑就得重写了。

🪝 一个 0.5.144,掀开了什么

最危险的投毒,永远来自你最信任的那个版本号。

想象一个再普通不过的周二早上:AI 团队的工程师拉取依赖,tensorlake 自动升到 0.5.144。semver 的 patch 位变更,锁文件静默放行,没有任何警报。几分钟后,构建机上的东西开始被悄悄搬走。

按公开披露的信息,这个恶意版本具备三层能力:其一,窃取开发者本机的 secrets——环境变量、配置文件、各类令牌;其二,定向摸取浏览器中存储的加密货币凭据;其三,也是最要命的一条,利用偷到的发布凭据,沿着关联的软件供应链继续向外扩散。窃密只是第一步,自繁殖才是本体。

⚠️ 注意这个攻击的入点:攻击者没有挖任何漏洞,不需要绕过 npm 的平台校验,只需要一次维护者凭据的失窃。版本号是这场攻击的通行证——semver 机制本来是为了让开发者放心地自动升级,现在它成了蠕虫的自动扩散通道。

这就是供应链安全最拧巴的地方:生态越开放、自动化程度越高,单点沦陷的爆炸半径就越大。Tensorlake 只是这一次被点名的名字,换任何一个热门包,剧本都成立。

🧬 木马是枪击,蠕虫是瘟疫

过去几年的供应链攻击,绝大多数是「一次性买卖」:抢注一个相似包名的 typosquatting,或者给某个包投一个恶意版本,收割完就撤。而 Shai-Hulud 完全是另一个物种。

这个名字取自《沙丘》里的沙虫。2025 年 9 月它首次大规模爆发时,被业内称为 npm 生态中第一只真正意义上的「自复制蠕虫」——数以百计的包被连带感染,Zapier、PostHog 等知名项目的维护者中招。它的玩法在当时就足够颠覆:不满足于感染一个包,而是偷走维护者的发布令牌,用令牌向该维护者名下乃至关联生态的其他包继续推送恶意版本,指数级扩散。

而这次 Tensorlake 事件说明,Shai-Hulud 已经不是一次性事件,而是一条被持续迭代、武器化的「产品线」——2026 年的变体在原版基础上叠加了加密货币凭据窃取,攻击的变现路径更直接。

两者的经济学差异是本质性的:木马攻击的边际成本是线性的,打一个包收一次网;蠕虫攻击的边际成本趋近于零,每一个被感染的开发者和维护者,都是新的攻击节点和凭据金矿。据一位做开源安全创业的朋友半开玩笑的说法:「npm 上每个维护者,都是沙虫的潜在跳板。」

2025年9月

首次大规模爆发

2025年9月

npm生态首只自复制蠕虫

2025年9月

数百包被连带感染

2026年10月8日

tensorlake 0.5.144 被投毒

2026年10月8日

新变体上线

2026年10月8日

增加加密货币凭据窃取

📊 防御打法的四象限

防御的窘境在于:便宜的手段没人做,贵的手段做不起。

把当前主流的供应链防御手段放到「技术门槛 × 商业价值」的坐标系里,格局一目了然:

右下角的「人工源码审计」是典型的存量玩家:投入巨大、无法规模化,企业级审计能做到重点包的覆盖已是极限,对数百万计的 npm 包而言杯水车薪。左上方的「细粒度短期令牌 + 双因素认证」价值最高,但它需要每个维护者改造自己的发布流程——恰恰是最难推动的一群人。左下角的锁文件冻结和私有镜像,是几乎所有团队都该做却总被「赶进度」牺牲掉的基础功。

真正的领跑者,是 provenance 发布签名这类「平台级自动化信任」方案:发布时自动生成构建来源证明,消费端可校验版本是否出自可信的构建环境。它把安全责任从「每个开发者的自觉」上移到「生态基础设施」,这才有可能对冲蠕虫的指数级扩散。判断一个防御手段值不值得押注,就看你把它放在哪个象限。

🔐 蠕虫吃的不是代码,是身份

把 Shai-Hulud 的攻击链摊开看,你会发现它全程没有碰一行业务代码的漏洞——它吃的每一步,都是身份和凭据:

注意那条回边:F 指回 B。这就是蠕虫和木马的分界线——攻击链闭环了,每一次感染都是下一次发布的燃料。

问题在于,这个闭环的每一环,都是行业积弊已久的身份管理漏洞。据多位接近 npm 安全响应的人士透露,大量维护者至今仍在使用自动化生成、长期有效、权限过大的 publish token——一个 NPM_TOKEN 泄漏,等于交出了账号名下所有包的发布权。CI/CD 流水线里的 GitHub Actions secrets、.npmrc 里裸奔的令牌、本地环境变量中的 API key,在蠕虫面前全是同一类资产:身份。

这解释了为什么供应链攻击正在与身份与访问安全合流。产业逻辑很清晰:当代码仓库、包管理平台、CI 系统之间的信任全靠静态令牌维系时,「平台边界」就不存在了,蠕虫只要拿到一张长期通行证,就能在整个生态里自由行走。破局方向也是身份层面的——OIDC 短期凭据、trusted publishing(发布时用 OIDC 临时换取权限,令牌根本不落盘)、最小权限的细粒度 token。蠕虫需要时间维度上的持久凭据,把凭据的存活时间压到分钟级,蠕虫的繁殖链就断了。

🛡️ 平台会兜底,但别等它

平台一定会下架恶意版本、冻结涉事账号——Tensorlake 的 0.5.144 大概率很快会被清理。但对企业和开发者来说,等待不是策略。把蠕虫的三层能力和对应防御拉一张对照表:

蠕虫能力利用环节对应防御
窃取本机 secrets环境变量与配置裸奔密钥统一托管、定期扫描轮换
摸取浏览器加密货币凭据明文凭据常驻浏览器关键凭据不落浏览器、开发机隔离
用令牌继续扩散长期有效发布令牌细粒度短期令牌、发布加 2FA
patch 版本静默升级自动化依赖更新锁文件冻结、升级前 diff 审查
伪造可信版本无构建来源证明开启并校验 provenance 签名

落到执行层,几件事优先级最高:CI 中对所有外部令牌做最小权限收敛,NPM_TOKEN 能不用长期令牌就不用;关键项目开启 npm provenance,消费端做校验;自动依赖升级工具对新增版本强制人工 diff;开发机与生产发布环境物理或逻辑隔离;再配一套针对仓库和本机的秘密扫描与告警。

蠕虫攻击面与解法
痛点 1
维护者令牌长期有效
→
解法
细粒度令牌+短期化+发布2FA
痛点 2
patch版本被自动信任
→
解法
锁文件冻结+升级前diff审查
痛点 3
CI与本机密钥全量暴露
→
解法
最小权限+OIDC短期凭据
痛点 4
投毒后知后觉
→
解法
provenance签名校验+私有镜像白名单

💡 最后一句掏心窝的话:这套清单没有一项需要采购新产品,全是一两个 sprint 能落地的工程实践。安全团队最该问自己的不是「要不要上供应链安全平台」,而是「我的发布令牌今晚泄漏,我能在一小时内止血吗」。

小结

0.5.144 会下架,涉事账号会被冻结,但令牌经济学不会变——只要发布权仍由静态长期凭据把守,沙虫就永远有下一条隧道。值得预期的是三条线:蠕虫变体会继续迭代并在 AI 相关的热门包上反复出现;provenance 与短期凭据会从可选项变成生态默认项;各国软件供应链法规也将把这套责任压实到企业和平台头上。防御的胜负手,从来不在下一个版本号,而在身份与凭据的每一次流转里。

本文由本站 AI 辅助聚合生成,原始来源如下:

🔎 本文基于以下资讯(素材溯源 · 信息来源)

📰 相关阅读推荐(与本文相关的其他资讯)