看雪学苑公众号文章

OVHcloud CLI 5个发行包被篡改,投毒恶意程序窃取本地密钥

攻击者劫持贡献者账号投毒CLI工具

看雪学苑

公众号 · 4 篇文章

本次属于典型GitHub Release供应链攻击,bCI/自动化更新脚本无哈希校验的环境风险最高。


事件概述


海外云厂商OVHcloud在GitHub上发布的命令行工具 ovhcloud-cli 曝出供应链安全事故。攻击者劫持一名项目贡献者的GitHub账号,直接替换5个历史版本Release内的二进制压缩包,投放专门窃取本地密钥与敏感凭证的恶意程序。


攻击窗口期为UTC时间10月19日12:47–14:21,恶意文件在GitHub公网暴露时长最高94分钟。只有在该时间段内、通过无哈希校验方式下载或升级对应版本的用户,才有可能拿到被篡改的恶意程序。


OVHcloud事后紧急清理全部被替换的归档文件,发布不可修改的固定版本 v0.16.0,并开启GitHub不可变Release(Immutable Releases)防护机制。厂商确认:项目源代码、代码标签、后端CI/CD构建流水线本身没有被入侵。恶意文件只是基于一个后续提交单独编译的Go程序,被攻击者直接上传覆盖旧Release附件。


受影响版本与平台范围


✅ 被污染版本:v0.11.0 ~ v0.15.0(共5版)

✅ 确认安全版本:v0.10.0

上述5个版本发布时间跨度从4月14日至9月16日。在攻击窗口之前安装、且期间没有执行更新的客户端,仍是原版干净程序。


被篡改的包类型:macOS x86_64/arm64、Linux x86_64/arm64、Windows x86_64,同时配套篡改 `checksums.txt` 校验文件,让校验哈希和恶意二进制匹配。


未触碰的构建产物:Linux i386、Windows i386、Windows arm64、WebAssembly包。


哪些场景会中招?


🔴 高风险路径(攻击窗口内操作)

1.  使用项目官方 `install.sh` 一键脚本安装/升级(脚本不校验文件哈希)

2.  手动在GitHub Release页面下载上述5个版本的压缩包

3.  CI流水线直接拉取Release下载地址,代码里没有固化文件哈希值

4.  v0.12.0~v0.14.0版本自带的内置升级功能(macOS/Linux,脚本或手动安装模式下升级无哈希校验)


🟢 不受影响的场景

1.  Homebrew安装:Tap仓库固化SHA256,哈希不匹配直接阻断安装

2.  go install 方式、本地源码编译

3.  Docker镜像 ovhcom/ovhcloud-cli(镜像在攻击前已长期未重建)

4.  窗口期前完成安装、且没有执行升级操作


如何识别恶意二进制(无需运行程序)


可执行 `go version -m 程序名` 静态读取编译信息,满足下面特征即为恶意构建:

1.  模块版本伪版本号:`v0.15.1-0.20261013083505-5ead8ef9b43d+dirty`

2.  提交哈希:`5ead8ef`(正版v0.15.0标签绑定提交为760fd72)

3.  编译参数存在 `-ldflags="-s -w"`,官方正式发行包不会出现该标记

不要单纯以 `+dirty` 判断恶意文件,官方干净版本v0.16.0同样标记 `+dirty`,该特征不具备判定能力。


公开仅放出一组恶意包哈希对照(Linux arm64 v0.15.0)

- 恶意压缩包SHA256:`3833daffcaaaab27e4e0e0833240ffcb1df8df648f4ec0bc4a75c176e28933cb`

- 原版压缩包SHA256:`5c2beb56e6d83a4b426565a1557791ef759316abcc4effb38dd627c90aeb80e0`

强烈提醒:不要直接运行可疑二进制文件来判断是否投毒。


处置建议(优先级:轮换密钥 > 清理程序 > 重装正版)


OVHcloud官方给出高危处置指引:只要确认运行过恶意程序,或者无法确认是否中招,需要轮换该机器上所有可被读取的密钥、凭据,不局限于OVHcloud自身API凭证(工具默认存放在 `~/.ovh.conf`,也会读取环境变量密钥)。安全研究团队补充建议:密钥轮换操作尽量在另一台干净主机执行。


操作步骤参考:

1.  立刻轮换所有敏感密钥、API Token、凭证;

2.  删除本地恶意ovhcloud-cli二进制;

3.  安装不可变正式版本 v0.16.0,该版本附带Release签名证明;

4.  可使用 `gh release verify-asset` 校验安装包完整性;

5.  检查CI/自动化脚本,增加固定哈希校验,杜绝直接拉取Release包不验哈希的写法。

注意:重装程序无法撤销已经被窃取的密钥,密钥轮换是首要动作。


厂商目前暂未披露恶意程序读取的文件清单、数据回传目标以及总下载量,后续会发布完整事后复盘报告。


攻击根因复盘


GitHub默认允许拥有仓库写权限的账号,直接删除、替换Release附件,下载链接保持不变;只有开启「不可变Release」功能后才能锁定包文件。事发前OVHcloud没有开启该能力,攻击者拿到贡献者账号权限后,绕开厂商CI流程直接覆盖旧版本资产。


安全研究团队OpenSourceMalware溯源发现,涉事贡献者账号历史仓库曾出现GlassWorm恶意加载器,该家族特点是利用不可见Unicode字符隐藏恶意代码,此前还发生过盗用Token批量投毒Python仓库事件。


研究人员推测本次攻击者与GlassWorm团伙存在关联,但目前缺少恶意样本,暂无法直接把本次窃取程序和GlassWorm恶意样本绑定。本次事件由一条配置了固定哈希校验的CI任务报错发现,用户公开提交Issue告警,推动厂商应急处置。


资讯来源:The Hacker News、OpenSourceMalware、OVHcloud官方公告



球分享

球点赞

球在看

前往微信阅读全文

内容来自公众号,可前往微信查看原文。

查看作者的更多文章 →订阅更新、RSS 与阅读指南 →