漏洞分析报告
漏洞说明
Jenkins 是一种广泛使用的工具,用于自动执行构建、测试和部署软件等任务。它是许多组织开发流程的关键部分。如果攻击者获得 Jenkins 服务器的访问权限,他们可以造成严重破坏,例如窃取凭据、篡改代码,甚至破坏部署。通过访问 Jenkins,攻击者可以篡改软件管道,可能导致开发流程混乱并泄露敏感数据。
漏洞复现
漏洞需要一个secret key 这里复现的话 可以通过创建一个节点去获取。
漏洞分析
在fetchJar(URL):950, RemoteClassLoader$ClassLoaderProxy (hudson.remoting), RemoteClassLoader.java中,没有对传入的url做判断,会直接去读取内容导致了任意文件读取。
脚本这里通过爆破secret.key的位置,去盘点jenkins的路径。
后续会去读取参考文章的一系列配置文件(为了伪造cookie)
前面的流量都是通过文件读取的方式去获取值,然后生成一个对应的cookie,没有太多的特征。
(1)访问jenkins /tcpSlaveAgentListener/ 查看是否支持代理
(2)读取伪造cookie需要的数据
file:/var/jenkins_home/secret.key
file:/var/jenkins_home/users/users.xml
file:/var/jenkins_home/users/admin_9313578255646860931/config.xml
file:/var/jenkins_home/secrets/master.key
file:/var/jenkins_home/secret.key
file:/var/jenkins_home/secrets/org.springframework.security.web.authentication.rememberme.TokenBasedRememberMeServices.mac
后续利用cookie remember去伪造一个用户
这里为了获取Crumb(没有会失败),会去访问/crumbIssuer/api/json
后续通过执行println ‘123test123 判断是否成功
最终的命令执行还是通过scriptText接口的script参数导致的命令执行,可以执行groovy脚本。
这里我在复现的时候发现在读取response回复的时候,会一直卡着(一直没读取完,所以加了一个10行的判断)
最后,如果两个同时在尝试访问就会报错
原文始发于微信公众号(e0m安全屋):jenkins CVE-2024-43044