导语:一个自诩”保护网络安全”的以色列初创公司,在隐形模式下干起了APT的活——在npm仓库里投放7个恶意包,伪装成Anthropic、Vercel、LangChain等当红AI开发工具,约2万次下载。攻击者不偷密码不偷密钥,专门收集开发者身份数据。大概应了那句话:”真正的猎人,总以猎物形象出现。”
一、事件概述
背景
2026年6月下旬,OpenSourceMalware.com的研究人员发现了一批可疑的npm包。这些包以typosquatting(域名仿冒)手法,冒充主流AI开发工具:
| 恶意包名 | 仿冒对象 |
|---|---|
| anthropic-toolkit | Anthropic SDK |
| ai-sdk-helpers | Vercel AI SDK |
| @langgraphjs/toolkit | LangChain LangGraph.js |
| ollama-helpers | Ollama |
| openai-agents-helpers | OpenAI |
| @aspect-security/argon2 | Aspect Security / argon2密码库 |
7个包,两天内集中发布,累计约20,000次下载。在被移除前,每一次安装都触发过一次信标。研究员明确指出:2万次是下限,实际中招机器只多不少。
二、技术手法
利用npm安装脚本作恶
这批恶意包的核心伎俩是滥用npm install-time脚本。
当开发者执行npm install时,npm会先执行preinstall或postinstall脚本——此时包的代码还未被任何项目代码引用。这意味着恶意代码以开发者本人的权限运行在其机器上,如果是在CI/CD环境中运行,还可能暴露持有云凭证的构建账号。
恶意包内的TypeScript代码实际上从未被调用,它的存在纯粹是烟幕弹,用来应付代码审计。而真正的载荷藏在postinstall脚本里,审计代码的人看到的是无辜的TypeScript文件,运行代码的人却已被全套带走。
定向”不偷”:聪明的选择性
这批恶意脚本最值得注意的设计决策是它明确跳过凭证类数据:
- 不收集:密码、API Token、私钥
- 不碰:git remote URL中嵌入的凭证
- 专门收集:机器主机名、用户名、git邮箱、SSH邮箱、项目git reflog中至多15个队友邮箱、GitHub CLI身份、AWS/Google Cloud配置文件名和账户ID、企业DNS搜索域、私人项目元数据
研究人员的判断是:这是一种有意识的战术选择。凭证被盗后几小时内就会被轮换,而身份档案永不过期,在安全审计中看起来就像普通流量。
数据流向:Google Cloud Run端点(run.app域名)。由于该流量终止于Google边缘节点,且run.app在大多数企业出口白名单上,恶意流量几乎畅行无阻。
三、”网络安全公司”的投毒逻辑
从”产品种草”到长期布局
大多数npm供应链攻击使用一次性抛掷账号,这批包则不然。
研究人员追查到发布账号的所有者——一个真实存在的以色列网络安全公司创始人,该公司仍处于隐形模式,有公开网站和可识别的管理层。研究人员选择不公开公司名称和个人身份,但已将发现报告给npm及其他相关方。
这不是草台班子的临时起意:从时间线看,该攻击者早在两个月前就在@aspect-security/argon2包中试水了一版更粗糙的信标,随后在6月密集迭代改进,才推出这套精准的AI工具伪冒组合。
研究人员的最合理推断是:产品种草(Product Seeding)——一个隐形安全初创公司正在用最原始的方式,建立一份真实的开发者环境私人数据集。
请注意,这家公司是以色列的网络安全初创公司。讽刺程度MAX。

图片来源:International Cyber Digest
四、影响范围
- 影响平台:npm(JavaScript生态)
- 影响对象:使用上述仿冒包的AI开发者
- 中招量级:约20,000次下载(下限)
- 数据暴露:开发者身份档案、企业内网DNS域、云平台账户ID
- 投递物:Google Cloud Run端点(已下线)
- 恶意账号:已封禁,npm包已移除
五、处置建议
立即行动
- 检查是否安装过上述任意一个恶意包,尤其在2026年6月下旬至7月初期间执行过
npm install的机器 - 在CI/CD构建日志中检索
postinstall执行记录,排查异常网络行为 - 排查Google Cloud Console中是否存在来自
run.app端点的异常API调用
检测思路
监控npm install执行后是否有出站流量发往*.run.app域名;或检测postinstall脚本中是否出现对os.hostname()、os.userInfo()、child_process.execSync('git config --global user.email')的系统调用组合。
长期建议
- 锁定npm安装脚本执行权限,在CI/CD中使用
--ignore-scripts - 开发环境与生产CI环境网络隔离,避免构建账号持有高权限云凭证
- 定期审计
package-lock.json中的未知依赖
六、一点冷思考
事件最讽刺之处在于:一个以色列网络安全初创公司,处于”隐形模式”,做的事是往npm仓库里扔infostealer。
这大概是继”杀毒软件自带后门”之后,网络安全行业对自身商业道德的又一次创造性突破。
下次再看到哪家以色列”安全公司”发布APT报告、预警漏洞,或者向全球出售”高级持续性威胁防护解决方案”时,不妨先查查他们的npm历史。
毕竟,真正的APT,从来不写进产品手册里。
版权声明:本文由华盟网原创发布,保留所有权利。配图由华盟网授权使用。














暂无评论内容