此缓解措施自 Jenkins 2.54 和 Jenkins LTS 2.46.2 起已过时。 如果你全新安装了 2.54+/LTS 2.46.2+ 版本的 Jenkins,基于 Remoting 的 CLI 默认即被禁用。 如果你安装的是旧版 Jenkins 并升级到 2.54+ 或 LTS 2.46.2+, 管理监控器会提示你 前往 Configure Global Security 并禁用基于 Remoting 的 CLI。 无论哪种情况,以下变通方案均无必要。
或者,如果你使用的是 Jenkins 2.32+ 或 2.19.3+
(如 2016 年 11 月 16 日安全公告 所述),
但版本低于 2.54,你可以直接使用启动参数:-Djenkins.CLI.disabled=true
注意:此脚本最初发布于 2015 年 11 月,用于修复 SECURITY-218 零日漏洞。它也可用作针对 SECURITY-360 零日漏洞(发布于 2016 年 11 月)的变通方案。
此脚本 可用于关闭 Jenkins 的 CLI 子系统,以保护 Jenkins 免受已知漏洞的影响。
从 Groovy 脚本控制台(/script)运行时,它会在无需重启的情况下关闭正在运行的 Jenkins 的 CLI 子系统。
当放置在 $JENKINS_HOME/init.groovy.d/cli-shutdown.groovy 中时,它可以确保主节点重启后保护依然生效。
要检查缓解措施是否成功应用,请使用 cli.jar 运行 java -jar cli.jar -s $JENKINS_URL,并确保你得到类似如下的 EOFException:
java.io.EOFException
at java.io.DataInputStream.readFully(DataInputStream.java:197)
at java.io.DataInputStream.readUTF(DataInputStream.java:609)
at java.io.DataInputStream.readUTF(DataInputStream.java:564)
at hudson.cli.CLI.connectViaCliPort(CLI.java:232)
at hudson.cli.CLI.<init>(CLI.java:128)
at hudson.cli.CLIConnectionFactory.connect(CLIConnectionFactory.java:72)
at hudson.cli.CLI._main(CLI.java:479)
at hudson.cli.CLI.main(CLI.java:390)
Suppressed: java.io.IOException: https://ci.jenkins-ci.org/cli doesn't look like Jenkins
at hudson.cli.FullDuplexHttpStream.<init>(FullDuplexHttpStream.java:81)
at hudson.cli.CLI.connectViaHttp(CLI.java:158)
at hudson.cli.CLI.<init>(CLI.java:132)
... 3 more
输出没有任何有用的含义,因此请忽略输出。请参阅上文了解如何验证缓解措施已生效。为安全起见,如果你重启了 Jenkins,请再次执行验证。
不会。
该脚本最初于 2015 年 11 月开发,作为 SECURITY-218 零日远程代码执行漏洞的变通方案。包含修复的版本已于 2015 年 11 月 11 日发布。
2016 年 11 月 11 日,另一个零日远程代码执行漏洞(SECURITY-360)利用了类似的技术,而此变通方案同样有效。