7月14日,安全研究机构Aikido披露了一起针对AsyncAPI npm软件包的供应链入侵事件。攻击者通过获取npm发布令牌,成功推送了五个被篡改的版本,这些版本在安装或导入时都会自动下载并执行恶意负载。
AsyncAPI是一套用于构建异步API的规范与工具,被广泛应用于微服务、事件驱动架构中。根据npm下载统计,被操纵的五个包合计每周约有290万次下载量,这意味着大量开发工作站、构建服务器和运行环境面临潜在风险。
![]()
攻击的起点是AsyncAPI的generator仓库。该项目在GitHub Actions工作流中使用了pull_request_target触发器。这一配置允许在检出外部拉取请求代码时,将仓库的机密信息暴露出来。攻击者正是利用这个缺陷,提交了多个拉取请求,并在其中一个请求中将npm令牌发送到了paste站点rentry.co,随后利用窃取的令牌发布了被修改的包。
被篡改的包版本包括:asyncapi-specs 6.11.2和6.11.2-alpha.1、asyncapi-generator 3.3.1、asyncapi-generator-helpers 1.1.1,以及asyncapi-generator-components 0.7.1。恶意代码不是通过常见的生命周期脚本(如安装后钩子)触发的,而是直接嵌入了正常的运行时模块中——例如模式导出、验证逻辑、工具代码和错误处理函数。因此,仅仅执行一条require语句就可能激活下载器,而不需要执行npm install。
Aikido在报告中特别强调,导入受影响的包(而不仅仅是安装)就可能启动感染链。这一特性让构建过程和日常开发活动都成为暴露点。嵌入的代码会从IPFS(星际文件系统)下载一个加密的Node.js加载器,将其保存为sync.js,并在后台以独立进程运行。
加载器首先解密并执行第二阶段组件。该组件会生成一对加密密钥,维护一个锁文件,并尝试在不同操作系统上实现持久化驻留。在macOS上,它会向shell启动文件添加命令;在Windows中,它会在注册表的Run键下创建条目;而在Linux上,它会写入一个user service文件。不过研究人员指出,Linux的服务可能在执行时会失败,因为其执行命令缺少shell包装器,但留下的痕迹仍可作为应急响应的证据。
最终的有效负载向攻击者提供了一个远程shell,能够收集数据并运行命令。尽管恶意代码中还包含了凭据窃取和自传播功能,但在此次观察到的构建中,这些功能并未被启用。恶意软件会每隔约30秒向HTTP命令与控制服务器发送加密信标。即使侦查功能被关闭,这些通信也足以表明攻击者拥有持续控制的能力。
目前,相关包的恶意版本已被下架,开发团队应尽快检查项目依赖并升级至安全版本。该事件再次提醒我们,CI/CD管道中的工作流配置错误可能成为严重软件供应链攻击的入口。
特别声明:以上内容(如有图片或视频亦包括在内)为自媒体平台“网易号”用户上传并发布,本平台仅提供信息存储服务。
Notice: The content above (including the pictures and videos if any) is uploaded and posted by a user of NetEase Hao, which is a social media platform and only provides information storage services.