受污染的 Ruby Gems 和 Go Modules 利用 CI Pipelines 进行凭证窃取
Source: The Hacker News
概览
观察到一次新的软件供应链攻击活动,使用休眠包(sleeper packages)投递恶意负载,实现凭证窃取、GitHub Actions 篡改以及 SSH 持久化。该活动归因于 GitHub 账户 BufferZoneCorp,其发布了包含恶意 Ruby gem 和 Go 模块的仓库。截至撰写本文时,Ruby gem 已从 RubyGems 下架,Go 模块已被阻断。

受影响的包
Ruby Gems
knot-activesupport-loggerknot-devise-jwt-helperknot-rack-session-storeknot-rails-assets-pipelineknot-rspec-formatter-jsonknot-date-utils-rb(休眠 gem)knot-simple-formatter(休眠 gem)
Go Modules
github.com/BufferZoneCorp/go-metrics-sdkgithub.com/BufferZoneCorp/go-weather-sdkgithub.com/BufferZoneCorp/go-retryablehttpgithub.com/BufferZoneCorp/go-stdlib-extgithub.com/BufferZoneCorp/grpc-clientgithub.com/BufferZoneCorp/net-helpergithub.com/BufferZoneCorp/config-loadergithub.com/BufferZoneCorp/log-core(休眠模块)github.com/BufferZoneCorp/go-envconfig(休眠模块)
这些包伪装成知名模块,如 activesupport-logger、devise-jwt、go-retryablehttp、grpc-client 和 config-loader,以规避检测。

攻击细节
Socket 安全研究员 Kirill Boychenko 解释说,这些 Ruby gem 在安装过程中会自动窃取凭证,收集以下信息:
- 环境变量
- SSH 密钥
- AWS 密钥
.npmrc与.netrc文件- GitHub CLI 配置
- RubyGems 凭证
窃取的数据会被发送到攻击者控制的 webhook 端点。
Go 模块则提供更广泛的功能,包括:
- 篡改 GitHub Actions 工作流
- 植入伪造的 Go 包装器
- 窃取开发者数据
- 向
~/.ssh/authorized_keys添加硬编码的 SSH 公钥,实现持久化远程访问
这些模块通过 init() 执行,检测 GITHUB_ENV 与 GITHUB_PATH,设置 HTTP_PROXY/HTTPS_PROXY,在缓存目录写入伪造的 Go 可执行文件,并将该目录提前加入工作流的 PATH。包装器在拦截后续 go 调用的同时,仍委托给合法二进制,以免破坏任务。
缓解措施
如果你已经安装了上述任意包,请执行以下步骤:
- 删除 系统中的恶意 gem 与模块。
- 检查 环境中是否有未授权访问敏感文件或对
~/.ssh/authorized_keys的修改。 - 轮换 可能已泄露的凭证(AWS 密钥、SSH 密钥、API 令牌等)。
- 审计 网络日志,留意是否有向未知 webhook 端点的出站 HTTPS 流量。
- 更新 CI/CD 流水线和依赖锁文件,仅引用可信来源。
参考资料
- Kirill Boychenko 在 Socket.dev 上的分析:
- 其他报道: