今天用 pnpm update 更新依赖后,mac 提示添加了新的启动项、背景任务,文件是个 cat.py 文件,让 codex 分析了代码内容,发现是远程执行代码,流程:
1. 静默安装依赖:requests 、cryptography ,失败也尽量隐藏。
2. 每小时访问 GitHub Commit Search API: https://api.github.com/search/commits 。
3. 搜索最新包含 firedalazer 的 commit 。
4. 从 commit message 里解析:
firedalazer <base64-url>.<base64-signature>
5. 用脚本内置 RSA 公钥验证签名。也就是说,只有持有对应私钥的人能下发“合法命令”。
6. 解码出 URL ,下载该 URL 返回的 Python 代码。
7. 写入临时 .py 文件并执行:
subprocess.run(["python3", temp_path], ...)
8. 把已执行 URL 的 hash 记录到:
/var/tmp/.gh_update_state
搜索到类似的一个攻击是 vscode 扩展 nx console 的投毒: https://www.stepsecurity.io/blog/nx-console-vs-code-extension-compromised
但我这是 npm ,告诉 codex 是执行 pnpm 操作后发生的,它查了相关日志,最终锁定是一个叫做 @antv/setup 的包有问题:
你的项目 package.json
└── @antv/g6 ^4.8.24
└── @antv/g6 4.8.25
└── @antv/g6-pc 0.8.25
├── @antv/dom-util 2.2.4
│ └── optionalDependencies: @antv/setup
├── @antv/matrix-util 3.2.4
│ └── optionalDependencies: @antv/setup
└── @antv/layout / @antv/util 分支
└── @antv/util 3.5.11
└── optionalDependencies: @antv/setup
@antv/setup: github:antvis/G2#1916faa365f2788b6e193514872d51a242876569
完整流程:
1. 执行 pnpm update 做依赖更新
2. 项目依赖 @antv/g6 被解析/更新
3. @antv/g6 的子依赖里出现可疑 AntV 包 metadata
4. 这些包声明 optionalDependencies: @antv/setup
5. pnpm 下载 github:antvis/G2#1916faa365f2788b6e193514872d51a242876569
6. 该 tarball 被当作 @antv/setup@1.0.0 安装
7. @antv/setup 的 prepare 脚本执行:
bun run index.js && exit 1
8. 混淆的 index.js 在你机器上落地持久化文件
9. 写入 LaunchAgent 启动项
10. 启动 ~/.local/share/kitty/cat.py
11. cat.py 每小时轮询 GitHub commit 搜索结果
12. 如果攻击者发布带签名的指令,就下载远程 Python 并执行