= SECURITY-3314/SECURITY-3315 缓解措施
此仓库记录了防止在受影响实例上利用 SECURITY-3314 和 SECURITY-3315 的缓解措施。
== 概述
需要禁用对 CLI 的访问。 必须采取以下两个步骤:
== 说明
=== 禁用 CLI 端点
如果 Jenkins 正在运行,请在 https://www.jenkins.io/doc/book/managing/script-console/[脚本控制台] 中执行提供的脚本 disable-cli.groovy。
这样做将移除 CLI HTTP 端点,直到 Jenkins 重启为止。
使用 disable-cli.groovy 的内容创建一个初始化后 https://www.jenkins.io/doc/book/managing/groovy-hook-scripts/[Groovy Hook 脚本],以确保每当 Jenkins(重新)启动时都会执行该脚本。
==== 确认
要确认脚本是否生效,请导航至 Manage Jenkins » Jenkins CLI。
未应用缓解措施时,将显示通用 CLI 文档(包括可用 CLI 命令的概述)。 应用缓解措施后,将显示 HTTP 404 Not Found 错误。
=== 禁用 SSH 端口
https://plugins.jenkins.io/sshd/[SSH Server Plugin] 提供通过 SSH 访问 Jenkins CLI 的功能。 这是一个功能曾经是 Jenkins 核心一部分的插件,因此即使您从未显式安装过它,也可能已安装。
导航至 Manage Jenkins » Security,确保 SSH Server 部分中的 SSHD Port 设置设置为 Disable。
注意:即使您选择禁用或卸载该插件,也建议执行此操作,因为插件管理功能可能会重新安装或重新启用该插件以确保满足插件依赖关系。
或者,您可以将以下代码片段添加到 disable-cli.groovy 脚本的末尾:
// Disable CLI access over SSH Server Plugin
if (j.getPlugin('sshd')) {
hudson.ExtensionList.lookupSingleton(org.jenkinsci.main.modules.sshd.SSHD.class).setPort(-1)
}
==== 确认
使用支持的 UI 选项禁用 SSH 端口无需显式配置,但您可以尝试连接到之前配置的 SSH CLI 端口。
预期结果是连接失败。
请注意,无法通过未认证方式使用 SSH CLI,因此并非每个错误都表示已成功禁用。
以下是预期(安全)结果的示例(假设之前配置了端口 2222):
$ ssh -p 2222 jenkins.example.org
ssh: connect to host jenkins.example.org port 2222: Connection refused
$ ssh -p 2222 jenkins.example.org
kex_exchange_identification: read: Connection reset by peer
Connection reset by … port 2222