
知名开源建置工具Nx被发现有恶意版本被发布至NPM。遭植入恶意程序的Nx套件在安装时,会于本机逐一走访文件系统,搜集凭证与文字档,并透过受害者的GitHub帐号建立名称包含s1ngularity-repository的储存库,上传经编码的资料。
此外,恶意版本不仅窃取凭证,还会改写使用者终端机启动档,在输入密码后直接强制关机。虽然官方已将相关版本下架并撤销可发布的NPM权杖,但由于这些版本曾一度被标记为最新版,用户在那段时间安装或还原套件,都可能受到影响。
这起事件的根本原因,为Nx的GitHub Actions自动化流程出现漏洞,攻击者结合Bash注入与流程提权,利用拉取请求验证工作流程窃取NPM发布权杖,并藉此将恶意程序码推送到NPM。虽然主分支受保护,但旧分支的残余弱点仍被利用,让攻击链得以串接完成。
受影响的版本包括nx 20.9.0至20.12.0及21.5.0至21.8.0,@nx/devkit、@nx/js、@nx/workspace、@nx/node的20.9.0与21.5.0,@nx/eslint的21.5.0,以及@nx/key和@nx/enterprise-cloud的3.2.0。一般开发者无需记住所有版本号,只需检查专案及全域环境是否安装上述区间的版本即可。
值得注意的是,部分用户即使未使用Nx工作区,也因IDE外挂Nx Console会自动安装最新版本的Nx,在恶意版本挂为最新版期间,仅开启IDE就有可能触发攻击。官方现已更新Nx Console,停止自动安装行为。
针对本次事件,官方採取多项修补措施,包括恢复安全版本为最新,全面轮换GitHub及NPM机密、改用NPM Trusted Publisher机制发布套件,还强制所有套件启用双因素验证,及启用CodeQL进行原始码检查。同时清理和Rebase合併所有含脆弱流程的旧分支,并要求外部贡献者拉取请求须经团队核准。
官方建议开发者立即检查GitHub帐号,一旦发现名称包含s1ngularity-repository的储存库,在保存文件后移除并通知官方。其次,用npm ls nx确认环境是否安装恶意版本,必要时卸载后重新安装最新版本并清理快取。最后,全面轮换GitHub与NPM等服务的凭证与权杖,并检查.zshrc与.bashrc删除可疑命令。