Node.js生态的供应链攻击又来了。这次中招的是node-ipc——一个在npm上周下载量超过69万次的进程间通信模块。安全公司Socket、Ox Security和Upwind联合确认,三个新版本被植入恶意代码,开发者一旦安装,本地凭证就会被批量偷走。

node-ipc是个老面孔了。这个包让Node.js进程能通过Unix域套接字、Windows管道、UDP、TLS、TCP等各种方式互相通信,是很多项目的底层依赖。讽刺的是,它2022年3月就出过事——当时维护者故意发布"武器化"版本,专门往俄罗斯和白俄罗斯的系统里写数据破坏模块,抗议俄乌冲突。即便如此,它现在每周还有69万多次下载。

打开网易新闻 查看精彩图片

这次的三個毒版本号是9.1.6、9.2.3和12.0.1。恶意代码藏在CommonJS入口文件node-ipc.cjs里,应用启动就自动执行。代码做了重度混淆,功能相当齐全:先给系统打指纹,然后收集环境变量和敏感本地文件,打包成压缩档,最后用DNS TXT查询把数据传出去。

偷的东西覆盖面极广。云服务商的凭证——AWS、Azure、GCP、Oracle云、DigitalOcean都在列;SSH密钥和配置文件;Kubernetes、Docker、Helm、Terraform的认证信息;npm、GitHub、GitLab、Git的命令行令牌;.env文件和数据库密码;Shell历史记录和CI/CD密钥;macOS的钥匙串、Linux的密钥环;甚至Firefox的配置文件和密钥库、Microsoft Teams的本地存储路径。文件超过4MiB的跳过,.git和node_modules目录不扫,算是"优化"过的。

打开网易新闻 查看精彩图片

传数据的方式有点意思。不用常规的HTTP通道,走DNS TXT查询。攻击者搭了个伪装成Azure的域名sh.azurestaticprovider.net:443当引导解析器,数据最终发到bt.node.js,查询前缀用xh、xd、xf这些。Socket算过账:传一个500KB的压缩包,大概要发2.94万次DNS请求——流量混在正常DNS活动里,确实难察觉。数据先存成临时的tar.gz,传完就删,不留痕迹。

这次入侵的路径也查清了。不是维护者本人作恶,是一个外部攻击者拿下一个叫"atiertant"的非活跃维护者账号。恶意代码没有持久化机制,也不下载第二阶段载荷,目标很明确:快速偷凭证,快速撤。受影响项目的开发者得立刻卸掉这三个版本,把所有暴露过的密钥轮换一遍。