Go Module Mirror 缓存恶意包事件总结
事件背景
Google 为 Go 编程语言开发者提供的镜像代理服务 Go Module Mirror 在过去三年多的时间里缓存了一个包含后门的恶意包。该服务旨在缓存 GitHub 等平台上的开源包,以加快下载速度并确保其与 Go 生态系统的兼容性。默认情况下,当开发者使用 Go 内置的命令行工具下载或安装包时,请求会通过该服务进行路由。
恶意包的引入
自 2021 年 11 月以来,Go Module Mirror 一直在缓存一个广泛使用的模块的恶意版本。该恶意包通过“typosquatting”(拼写混淆)技术命名,即使用与合法包名称相似的名称,诱使开发者在输入命令时下载恶意包而非正确版本。该恶意包名为 boltdb-go/bolt
,与广泛使用的 boltdb/bolt
模块名称相似,后者被 8,367 个其他包依赖。
恶意包的传播与缓存
恶意包最初出现在 GitHub 上,随后被 Go Module Mirror 缓存并存储了三年。尽管 GitHub 上的恶意包后来被恢复为合法版本,但 Go Module Mirror 仍然继续提供缓存的恶意版本。这种设计使得恶意代码能够持续传播,即使原始源代码已被修改。
恶意包的功能
该恶意包包含一个后门,能够构建隐藏的 IP 地址和端口,并连接到攻击者控制的服务器,执行远程服务器发出的任何命令。攻击者使用的服务器 IP 地址由 Hetzner Online 托管,具有较高的信誉度,研究人员怀疑该基础设施专门为此次攻击活动准备,以避免被检测到。
事件的发现与处理
安全公司 Socket 于 2025 年 1 月 30 日和 2 月 3 日两次请求移除该恶意包,最终在 2 月 3 日成功将其下架。Socket 还向 GitHub 报告了相关仓库和账户,以进行进一步调查和下架处理。尽管 GitHub 上的仓库在检测时已恢复为“干净”版本,但 Go Module Mirror 仍然继续提供恶意版本,这凸显了 Go 模块缓存行为的安全风险。
Google 和 Go 团队的回应
Google 和 Go 团队的代表未对邮件询问作出回应,未说明为确保模块安全所采取的措施。然而,在事件曝光 24 小时后,Google 提供了以下声明:
- 该模块已从 Go Module Proxy 和 GitHub 中移除,并已添加到 Go 漏洞数据库中。
- 正在通过 Capability Analysis 和 deps.dev 等工具进行修复。
- 感谢 Socket 和 Go 团队贡献者检测到该模块并处理修复。
- 将继续与行业合作,提高对开源安全问题的认识,并推动 SLSA 和 OpenSSF 等倡议的工作。
事件启示
此次事件提醒开发者在生产设备上运行代码前应进行严格的代码审查,包括在安装前验证包的完整性、分析依赖项是否存在异常,以及使用能够深入检查已安装代码的安全工具。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。