在持续发展的 DevOps 自动化领域,Jenkins 作为支撑各类规模组织众多构建流水线的基础工具,其重要性不言而喻。然而,近期披露的漏洞 CVE - 2025 - 32754 和 CVE - 2025 - 32755,揭示了某些 Jenkins 构建环境中潜藏的威胁,具体表现为 SSH 构建代理 Docker 镜像中的主机密钥重用问题。据安全公告显示,该问题影响 jenkins/ssh - agent Docker 镜像(版本最高至 6.11.1)以及已弃用的 jenkins/ssh - slave 镜像的所有版本。公告明确指出,所有基于同一版本镜像的容器均使用相同的 SSH 主机密钥。这意味着,每次从同一易受攻击的镜像启动新的构建代理时,都会重用同一组 SSH 主机密钥,这在安全系统设计中属于严重失误。主机密钥的作用是向客户端唯一标识服务器,是 SSH 连接中信任的加密基础,跨容器重用会破坏这种信任。若攻击者能够处于 Jenkins 主服务器(SSH 客户端)与使用相同密钥的构建代理之间,便能够伪装成合法代理,且不会触发任何 SSH 真实性警告,进而为各种供应链和数据完整性攻击创造了机会 。

如果攻击者能够将自己定位在 Jenkins 主服务器(SSH 客户端)和其中一个使用相同密钥的构建代理之间,他们就可以伪装成合法代理,而不会引发任何 SSH 真实性警告。这为各种供应链和数据完整性攻击打开了大门,包括:

  • 拦截或修改构建工件

  • 收集构建期间使用的凭证或机密

  • 将恶意代码注入构建管道

这使得攻击者能够将自己插入 SSH 客户端(通常是 Jenkins 控制器)和 SSH 构建代理之间的网络路径,以冒充后者。

Jenkins 已在 6.11.2 版本发布了更新后的 jenkins/ssh - agent 镜像,其中包含一项关键变更:基于 Debian 的 jenkins/ssh - agent 6.11.2 Docker 镜像在镜像创建过程中,会删除自动生成的 SSH 主机密钥,并在容器首次启动时生成新的主机密钥。这就使得每个新容器在启动之际,都能拥有一组全新的 SSH 密钥,从而恢复了控制器与代理之间安全且基于信任的握手机制。

然而,对于仍在依赖旧版 jenkins/ssh - slave 镜像的用户而言,情况不容乐观。该镜像不仅已被弃用,且不再会有更新。Jenkins 强烈建议这部分用户立即迁移至 jenkins/ssh - agent 镜像,以便获得持续的支持与安全保障。Jenkins 明确指出:jenkins/ssh - slave 已弃用,不再更新。请改用 jenkins/ssh - agent。

免责声明

本文仅用于技术讨论与学习,利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,本平台和发布者不为此承担任何责任。