在数字化时代,人工智能技术的快速发展极大地推动了软件开发的变革,特别是在提升编码效率和自动化方面表现突出。然而,伴随便利而来的,也存在日益严峻的安全风险。2025年8月发生的Nx恶意软件包事件,揭示出人工智能编码代理如何被攻击者用作恶意工具,成为开源软件供应链攻击的新型载体。这起事件不仅打破了传统供应链攻击模式,更将AI助手CLI作为自动化侦察和数据泄露的工具,开创了恶意软件武器化AI编码代理的先河。本文将深入剖析事件的背景、攻击方式、影响范围及未来安全防护建议,为广大开发者和安全从业者提供有价值的借鉴。 Nx是什么? Nx是一款广泛使用于JavaScript和TypeScript生态的构建系统与单体仓库管理工具,具备极高的人气和广泛应用,拥有数百万的每周下载量。
鉴于其庞大的用户基础,一旦安全事件发生,影响的范围和危害程度往往呈指数级扩大。由于Nx的核心地位,任何安全缺陷或被恶意利用的风险都可能引发整个开源社区和商业项目的连锁反应,形成极具破坏力的供应链攻击。 2025年8月26日至27日期间,恶意版本的Nx及其Powerpack被发布到npm仓库,覆盖两个版本线路,并在被删除前约持续在线5小时20分钟。这波攻击不仅影响了npm上的包,还牵连到了广受欢迎的Nx Console VS Code插件,使得攻击波及面进一步扩大。 攻击如何发生? 经过调查,攻击的根源被锁定为一个缺陷的GitHub Actions持续集成(CI)工作流,该工作流以拉取请求的形式于8月21日被合并。据估计,触发这个风险的贡献代码由Claude Code生成。
随后在8月24日有一次恶意提交,修改了CI流程使得用于发布相关Nx包的npm令牌通过Webhook发送给攻击者控制的服务器,从而成功劫持了发布权限。 这段恶意代码突破了传统恶意软件的限制,利用了多款本地AI编码代理的CLI工具,如Claude Code、Google的Gemini CLI和Amazon的q命令行工具。攻击者采用危险参数绕过权限保护,通过智能化提示词驱动AI代理对本地文件系统进行敏感信息的枚举,并将结果写入临时目录中的inventory.txt文件。 有别于传统的数据窃取手段,这次事件的恶意载荷后置安装脚本智能调用AI代理进行本地侦察,包括依次启动多套不同的AI代理工具,并以特定危险参数如--dangerously-skip-permissions、--yolo及--trust-all-tools确保命令执行无阻,从而挖掘大量敏感资产,包括钱包凭证、SSH密钥、环境变量文件(.env)、配置文件以及npm及GitHub相关令牌。 AI代理所执行的提示语指示其递归地扫描用户主目录、配置文件目录及常见敏感位置,搜集符合条件的纯文本文件的绝对路径,生成清单,而非直接读取文件内容,以此减少检测风险,同时方便后续的批量处理和上传。 恶意脚本进一步读取清单中的文件,将其内容编码为base64格式,然后利用被盗的GitHub令牌,通过GitHub API在受害者账户下创建名为"s1ngularity-repository-数字后缀"的公开仓库,将所有窃取数据上传为名为results.b64的文件,这种多层base64编码旨在绕过简单的内容检测和安全审计。
攻击的核心是一种利用AI编码代理CLI作为自动化侦察工具的创新技术,这不仅扩大了攻击的隐蔽性和复杂度,也提升了攻击的自动化和规模化能力。此次事件无疑是一场开源供应链安全演进史上的警钟,警示着社区和企业必须重视对AI工具的安全管理及包发布流程的严密防护。 影响范围及危害 此次攻击的影响可谓波及广泛。由于Nx及其相关插件在JavaScript和TypeScript生态系统的普及,大量开发者和自动化构建环境可能在不知情的情况下安装了恶意版本。被感染的系统中宝贵的凭证、环境变量、钱包秘钥等敏感数据被窃取并公开上传,极大地威胁了用户和组织的信息资产安全。 此外,恶意代码还带有破坏性操作,将"sudo shutdown -h 0"命令附加至用户的shell配置文件,如.bashrc和.zshrc,导致新开启的shell会话自动关机,造成直接的生产环境中断及工作流程阻塞,进一步放大了攻击的恶劣影响。
受影响的主要包版本涵盖了Nx多个核心版本以及多个相关插件版本,包括但不限于nx 21.5.0、20.9.0、21.6.0及Nx Devkit、Nx JS、Nx Workspace、Nx ESLint等。相关恶意版本已被npm平台及时下架,但事件已造成广泛波及,对开发者和组织均提出了严峻挑战。 深入技术分析:恶意脚本内核 恶意postinstall脚本命名为telemetry.js,使用Node.js环境进行编写。其核心功能包括进程管理、文件系统操作及网络请求,配合智能提示语驱动本地AI编码代理执行侦察任务。 脚本首先检测系统平台,跳过Windows环境以降低异常发生风险。随后逐个验证AI代理CLI是否在系统环境变量路径中可用。
随后调用这些代理,并允许它们无视权限保护执行预设的提示语,令其侦查本地文件系统敏感路径。 执行结束后,脚本将敏感文件的路径列表读取并编解码,随后通过GitHub API自动创建公开仓库上传结果,整个流程高度自动化且隐蔽。恶意脚本还试图获取系统环境中的GitHub和npm令牌,配合协同攻击以增强数据盗取范围。 防御建议及未来展望 面对如此复杂且新颖的攻击手段,各方需采取多层次防护策略。首先,最紧迫的措施是在怀疑受感染系统中立即更换所有潜在泄露的密钥和令牌,包括GitHub、npm、SSH密钥和与之关联的API密钥,确保安全访问权限的完整性。 开发者和组织应认真检查项目依赖,利用如npm ls nx命令检测所有涉及Nx版本的依赖链,及时升级到安全版本,同时卸载所有恶意或可疑版本。
工程团队应结合自动化安全工具,例如Snyk,使用软件成分分析(SCA)和软件材料清单(SBOM)功能,全面监测依赖安全态势。 此外,推荐关闭npm install时的postinstall脚本执行,增加安装流程的安全边界。开启npm二次认证(2FA)并且采用更严格的身份验证策略,是避免令牌被非法使用的有效保障。 强化供应链安全的根本出路还在于推广和执行包的来源证明(provenance)机制,确保安装包的发布者身份及包内容不会被篡改。攻击中恶意包缺乏provenance特性,而有效版本则包含这一机制,成为验证包安全的关键指标。 针对AI编码代理工具,用户必须提高警惕,对CLI参数严格限制,避免使用绕过权限检查和全部信任参数。
AI代理的权限管理应和传统自动化工具一样严密,避免被恶意命令钳制。 开源社区和安全团队需要联合提升AI助手安全开发生命周期的规范与意识,依赖安全审计工具并对AI生成的代码施加有效的限制和验证,减少可能的攻击面。 结语 Nx事件作为首例公开报道的智能AI编码代理被恶意武器化进行开源供应链攻击的实例,深刻揭示了技术进步带来的安全挑战。它警示我们即使依靠先进的人工智能,也不能掉以轻心。AI不仅能赋能生产力,也可能成为攻击者的新武器。只有严密的综合安全防御体系、完整的权限管控、以及对AI工具的恰当使用与监管,才能确保未来软件开发环境的安全与可持续发展。
开发者与安全团队应从此次事件中汲取教训,加强对供应链安全的高度重视,维护可信赖的开源生态系统。同时也呼吁AI技术厂商与社区携手建立更加安全的使用规范与防护机制,为推动技术进步保驾护航。未来,AI与安全的融合将更加紧密,我们必须未雨绸缪,迎接挑战,守护数字世界的安全基石。 。