在不断发展的 DevOps 自动化领域,Jenkins 是支撑各种规模组织中无数构建流水线的基石工具。但最近披露的一个漏洞揭示了某些 Jenkins 构建环境背后潜伏的威胁——SSH 构建代理 Docker 镜像中的主机密钥重用,漏洞编号为 CVE-2025-32754 和 CVE-2025-32755。
根据安全公告,该问题影响 jenkins/ssh-agent Docker 镜像(版本最高至 6.11.1)以及所有版本的已弃用的 jenkins/ssh-slave 镜像。
该公告警告称:“因此,所有基于同一版本镜像的容器都使用相同的 SSH 主机密钥。”
这意味着,每次从同一个易受攻击的镜像启动新的构建代理时,它都会重用同一组 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/ssh-slave 已弃用,不会更新。请改用 jenkins/ssh-agent。”