硅谷中转站

硅谷中转站

追踪全球 AI 最前线 · 每 3 小时一篇 · 不鸡汤、不水

·

短答案:如果你装的是 lightning 的 2.6.2 或 2.6.3 版本,4 月 30 日发的那两版,有概率中招——立刻去检查 .claude/settings.json 跟项目根目录里有没有出现 .claude/router_runtime.js 这个 14.8 MB 的文件。Semgrep 安全团队在昨天披露了一起新的 PyPI 供应链攻击,他们把这个东西叫”Mini Shai-Hulud”,直白说就是去年 npm 圈那个 Shai-Hulud 蠕虫的 AI 生态版本——这次入口换成了 PyPI 上深度学习圈最常用的 lightning 包。受影响的是所有在过去 48 小时内主动或被动升级了 lightning 的环境:跑图像分类、跑 LLM finetune、跑 diffusion 模型、跑分布式训练的 team 都在风险范围里。

为什么这件事值得在你滚 feed 的时候停下来三分钟看清楚。第一,这是”AI 工具链 + 开发者 secret”这条攻击线第一次在公开记录里被标记利用了 Claude Code 的 hook 系统;第二,被攻击的不是某个小众包,是 AI 训练栈里几乎人人都装的 Lightning;第三,它的传染机制是跨 ecosystem 的——PyPI 入口,npm 出口,这意味着你哪怕没用 Python,只要你机子上有 npm publish token,也可能成为下一个分发节点。

具体怎么发作。装上有问题的版本之后,在 import 的那一瞬间,恶意脚本会从远端拉一份针对你系统的二进制 payload(macOS arm64/x64、Linux、Windows arm64/x64 都覆盖好),把这份 14.8 MB 的混淆 JavaScript 落地到 .claude/router_runtime.js。然后它在 .claude/settings.json 里写一条 SessionStart hook,matcher 写 *——意思是只要你下次打开 Claude Code,这个 payload 就被自动调起来,无声执行。Semgrep 在那篇文章里直接点出来:这可能是有据可查的第一起利用 Claude Code hook 系统的真实攻击。VSCode 用户也别松气,它同时往 .vscode/tasks.json 里写一条,机制一样,只是触发点换成 VSCode 的任务系统。

入口选在 PyPI 这一点很关键。Mini Shai-Hulud 的源头其实是 npm 圈的 Shai-Hulud 蠕虫,但这一回攻击者把入口移到 Python 生态——AI 训练栈这边 PyPI 是核心仓库,lightning 又是被 Trainer 们普遍 import 的库,影响面比直接打 npm 大得多。但 payload 跑起来之后,扩散方向反而走回 npm。攻击者拿到任何能拿到的 npm publish token,就立刻往那个 token 能 publish 的每一个包里再投一遍 dropper + payload——这是供应链蠕虫的经典做法,在 PyPI 跟 npm 之间形成一个跨语言的传播链。这种入口 vs 出口分开的设计,在以前的供应链攻击里不常见,过去大多是同一个仓库内部传染。这一波相当于把两个 ecosystem 第一次串到了一起,审查难度直接上一个台阶——npm 那边的安全团队看不到 PyPI 的源头,PyPI 那边看不到 npm 的扩散结果。

它要偷的东西很标准也很全。GitHub 个人 token + 组织 secrets,AWS(环境变量、~/.aws/credentials、IMDSv2、ECS 元数据接口都试一遍),GCP、Azure 凭证,npm 的 publish token——一旦拿到 npm 写权限,它会自己往每个能 publish 的包里再投一份 dropper 跟 payload,这就是为什么入口在 PyPI、扩散却走 npm。如果它捞到你 GitHub 写权限的 token,还会往 repo 推一个叫 Formatter 的 GitHub Actions workflow,以后每次 push 都自动 dump 一遍仓库 secrets。

具体怎么补,分四步走,顺序很重要。

第一步,锁版本。pip show lightning 看版本号,如果是 2.6.2 或 2.6.3,立刻 pip uninstall 退回 2.6.1,顺手把 requirements.txt、pyproject.toml、Pipfile 那种锁文件里的版本固定下来,不让自动升级再把你拽回坑里。

第二步,清现场。在工程目录下跑 find . -path '*.claude/router_runtime.js' -o -path '*.claude/setup.mjs' -o -path '*.vscode/tasks.json',看有没有不该出现的文件——尤其是 .claude/router_runtime.js 这个 14.8 MB 的大块头,它的存在本身就是 IOC。有就删。同步打开 .claude/settings.json 看 hooks 字段,任何不是你自己写的 SessionStart 规则都要清掉。

第三步,查 GitHub。这条最容易被忽略——如果攻击者有时间窗口拿到了你的 GitHub 写权限 token,它会往你 repo 推一个叫 Formatter 的 GitHub Actions workflow,以后每次 push 都自动 dump 一遍仓库 secrets。去 .github/workflows/ 翻一遍,看有没有不眼熟的文件,有就删 + 走 git history 复盘。

第四步,rotate 一切能 rotate 的东西。你过去 48 小时在那台开发机上能碰到的所有 secret——GitHub 个人 token、组织 secrets、AWS access key、GCP service account JSON、Azure 凭证、npm token、CI/CD pipeline token、Anthropic API key、OpenAI API key——一个都不能跳过。Semgrep 给的 IOC 里特别标了它会试 IMDSv2 跟 ECS 元数据接口(169.254.169.254 / 169.254.170.2),所以如果你在 AWS 里跑过这台机,临时凭证也要假设泄露。这一步最痛但最该做——重发的成本就是几十分钟登录各家平台,留着不换的成本可能是被人按 git history 翻完整个公司项目。

这是一套已经被打磨过的 secret-harvesting 工具链,不是临时拼凑的脚本——它会按预设顺序去试每一种可能的凭证存放方式,失败一种立刻试下一种,一台开发机上能找出来的凭证基本会被一网打尽。

往大了看一件事。AI 工具链已经够大,大到值得攻击者专门为它设计 vector——上一波是冲 npm,这一波是冲 PyPI 加 Claude Code 的 hook 系统。问题不是 Claude Code 的 hook 设计本身有漏洞,是它太灵活了:配置文件能被任何能写工程目录的进程修改,SessionStart 规则能用 matcher 通配符覆盖任何会话,这一套灵活性既是生产力的来源,也是攻击面。MCP server、agent skill、自定义 hook,每一个能让你”扩展 agent”的接口,都是同等程度的”扩展攻击者”接口。

这是 Claude Code 用户群第一次集体被这个问题点名,大概率不会是最后一次。短期 Anthropic 那边大概会在 Claude Code 里加 hook 改动的可见提示——你不写过的 hook 突然出现,IDE 弹个红条问你是不是同意——这种最低的防御现在还没有。中期看,这一波之后 PyPI 跟 npm 的供应链审查会重新被推一波,我们这种把 Claude Code 当生产工具用的人,得开始把”装一个 Python 包”重新当回需要审一眼的事来对待了——尤其是开发者机器上有 cloud credential、organization GitHub token、生产 npm publish 权限的那一类账户,过去几年我们对装包的安全假设是”挑大的、看 stars”,这套假设这一次直接被攻破了。

操作上有几个习惯可以从今天开始重新建。一是工程目录跟生产环境分离,不要在跑生产 deploy 的同一台机子上随手 pip install 实验性的包。二是 npm publish 跟 GitHub 写权限的 token 用最小作用域,别图省事开 admin。三是把 .claude/、.vscode/ 这种配置目录纳入 git 仓库,但配上 git diff 提醒——任何”我没改它怎么变了”都该被看到。四是关键开发机定期跑一次 find ~ -newer some-marker -name "*.json",异常新文件至少肉眼过一遍。这都是过去十年安全圈嘴皮子磨破的老话,但 AI agent 的灵活性把这些老话又一次推回工作流的中心。

补一句给真在用 lightning 做 LLM finetune 的同学——除了上面四步之外,如果你的训练机已经被攻陷,任何在那台机器上下载过的模型 weight、训练数据、代码 checkpoint 都要假设是被读过的。模型本身泄露不一定是大事,但如果训练数据里有用户隐私或公司内部资料,这一关要走完合规流程,该报的事件要报、该通知的客户要通知。”装一个包”在过去是几秒钟的事,这一波之后它的真实成本可能是一整轮事件响应,合规、法务、客户沟通一起上。

链接 · 评论区取 ↓

关注 @svtransit1 · 写给真在用 AI 的人

#AI #ClaudeCode #安全 #供应链攻击


关注 @svtransit1 · 每 3 小时一篇 AI 前线 · RSS