问答
发起
提问
文章
攻防
活动
Toggle navigation
首页
(current)
问答
商城
实战攻防技术
漏洞分析与复现
NEW
活动
摸鱼办
搜索
登录
注册
CVE-2024-43044 Jenkins Remoting远程代码执行漏洞分析
漏洞分析
Jenkins是一个开源软件项目,是基于java开发的一种持续集成工具,用于监控持续重复的工作。而在此过程中,Agent执行机就是其中关键的一部分,负责执行构建和部署任务。简单来说Agent 就是一个独立的进程或者节点,可以是独立的服务器、虚拟机或者是本地机器,用来执行构建和部署任务,当Jenkins主服务器连接到Agent的时候,就可以在该节点上运行相应的任务
前言 -- Jenkins是一个开源软件项目,是基于java开发的一种持续集成工具,用于监控持续重复的工作。而在此过程中,Agent执行机就是其中关键的一部分,负责执行构建和部署任务。简单来说Agent 就是一个独立的进程或者节点,可以是独立的服务器、虚拟机或者是本地机器,用来执行构建和部署任务,当Jenkins主服务器连接到Agent的时候,就可以在该节点上运行相应的任务 而Jenkins Remoting远程代码执行漏洞(CVE-2024-43044)的产生原因就是获取到Agent节点机器的权限后,可以通过节点连接到Jenkins Remoting主服务器,获取服务器上的文件内容。 影响版本 ---- Jenkins weekly <= 2.470 Jenkins LTS <= 2.452.3 环境搭建 ---- 可以使用vulhub/CVE-2024-23897的环境 ```yml version: '2.2' services: jenkins: image: vulhub/jenkins:2.441 ports: - "50000:50000" - "8080:8080" - "5005:5005" init: true environment: - DEBUG=1 ``` 启动之后访问[http://127.0.0.1:8080](http://127.0.0.1:8080/) 正常说明搭建成功,使用admin/vulhub可以登录到后台 导航Dashboard -> Manage Jenkins ->Nodes 处新建一个Agent节点 ![image-20240819092819581.png](https://shs3.b.qianxin.com/attack_forum/2024/08/attach-3a63751d18be095a6e7646c9eb35b0760f287209.png) 选项可以保持默认的,点击save,新建完成之后就可以看到新建成功的节点 ![image-20240819092911339.png](https://shs3.b.qianxin.com/attack_forum/2024/08/attach-16face396454d1c41b83d8a34c98e85203eafd80.png) ![image-20240819093051238.png](https://shs3.b.qianxin.com/attack_forum/2024/08/attach-897b7b278c5a4749b5f450517d40abe8e2fc78d3.png) 导航Dashboard -> Manage Jenkins -> Plugins 安装插件 Websocket Notifier ![image-20240819093534520.png](https://shs3.b.qianxin.com/attack_forum/2024/08/attach-c19281239d9066dba4ae1e3655c3e19dc642d17d.png) 安装完成之后在节点机器node1连接到Jenkins 主服务器 连接成功后在Jenkins主服务器上可以看到已连接的标识,成功连接之后就可以在Agent节点上部署任务了 ![image-20240819095256961.png](https://shs3.b.qianxin.com/attack_forum/2024/08/attach-256b37ef9d81fe2eea9acdb3e9def49e7a88c4ef.png) ![image-20240819095328807.png](https://shs3.b.qianxin.com/attack_forum/2024/08/attach-fab4d3e27cb3fbd361661e68fa526ac01a4cad2b.png) 漏洞复现 ---- 当获取到node1机器的权限后,可以得到连接到Jenkins主服务器的secret和name,这时需要将连接使用的agent.jar替换成恶意的Agent连接Jar包,<https://github.com/v9d0g/CVE-2024-43044-POC> 使用恶意的Jar包重新连接到Jenkins主服务器,就可以读取文件 ```sh java -jar agent1.jar -url http://192.168.85.129:8080/ -secret xxxxxx -name xxxx ``` ![image-20240819100942827.png](https://shs3.b.qianxin.com/attack_forum/2024/08/attach-945f1ca8e0d0f508dfeaf6ebf7c332520f289098.png) 漏洞分析 ---- Agent节点连接到Jenkins主服务器使用的是JNLP协议,JNLP(Java Network Launch Protocol)是一个用于从网络启动 Java 应用程序的协议,通常用于在 Jenkins 等 CI/CD 工具中启动构建代理(也称为 "节点") 在agent.jar中可以看到修改的地方在hudson/remoting/RemoteClassLoader.class,利用JD反编译JAR包得到源代码文件后,在IDEA中下断点调试 ```sh // 使用下面的命令启动agent.jar java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=*:5005 -jar agent1.jar -url http://192.168.85.147:8080/ -secret xxxxx -name node1 -workDir "" ``` 先启动agent.jar再开启调试,当输入文件path后程序会在断点处停下 在RemoteClassLoader()方法里,首先会初始化一个channel对象,该对象用于在主服务器和代理节点之间进行通信,它负责管理数据的传输和命令的发送 ![image-20240819114418794.png](https://shs3.b.qianxin.com/attack_forum/2024/08/attach-cd14ac99168ac9078029e051d101eda16e4a8e9d.png) 接着会执行到断点处this.proxy.fetchJar(),this.proxy是一个代理对象,fetchJar是proxy对象下的一个方法,当Jenkins主服务器在Agent节点上部署任务时,节点需要从主服务上下载一些必要的JAR包和文件,fetch()会处理与主服务器间的通信,并获取资源内容 ![image-20240819114504731.png](https://shs3.b.qianxin.com/attack_forum/2024/08/attach-279879d1a12882526255b9ffbeb66d2f91efc622.png) 程序会进入到hudson.remoting.RemoteInvocationHandler#invoke()下,会执行到req.call() ![image-20240819120212663.png](https://shs3.b.qianxin.com/attack_forum/2024/08/attach-dead0b23d37dca1cb4a094e7e7c19ca2c63ba040.png) 接着会进入到hudson.remoting.Request#call(),想Jenkins主服务器发送请求 ![image-20240819111641694.png](https://shs3.b.qianxin.com/attack_forum/2024/08/attach-2c3432237badde1eead0422d944e4eb4f4da2472.png) this.response就是返回的资源内容,this.response.returnValue解码之后就是文件的内容 ![image-20240819141052358.png](https://shs3.b.qianxin.com/attack_forum/2024/08/attach-73039bc8242b483704acb4b7fc17138653c2bb45.png) 漏洞修复 ---- 在修改版本中添加了一个判断函数,限制jarUrl只能为插件Jar包 <https://github.com/jenkinsci/jenkins/commit/3f54c41b40db9e4ae7afa4209bc1ea91bb9175c0> ![image-20240819141707412.png](https://shs3.b.qianxin.com/attack_forum/2024/08/attach-db9b51ecf1019a2758a97792919adbbd7c900676.png) 在修复版本的jenkins.security.s2m#validate()中下断点,当使用原来的利用方式再次请求时,程序会自动调用到validate() ![image-20240819142254393.png](https://shs3.b.qianxin.com/attack_forum/2024/08/attach-6bb1290b40c717eb0c721316558b1d06955fb5f5.png) ![image-20240819142347019.png](https://shs3.b.qianxin.com/attack_forum/2024/08/attach-1e5d5856f09952b57cefb37ed6907401ac4eee53.png) 最终会进入到isPluginJar()中,在该方法里会判断jarUrl是否为合法的插件,不是的话会返回false抛出异常 ![image-20240819142544894.png](https://shs3.b.qianxin.com/attack_forum/2024/08/attach-565e0766e745a34934235d3b2a82967031ca2b87.png) ![image-20240819144422927.png](https://shs3.b.qianxin.com/attack_forum/2024/08/attach-f74d24dd16d7e793514dc2e38afb7a66a71f11b9.png) 参考 -- <https://github.com/v9d0g/CVE-2024-43044-POC>
发表于 2024-08-29 15:00:02
阅读 ( 7016 )
分类:
Web应用
0 推荐
收藏
0 条评论
请先
登录
后评论
kakakakaxi
7 篇文章
×
发送私信
请先
登录
后发送私信
×
举报此文章
垃圾广告信息:
广告、推广、测试等内容
违规内容:
色情、暴力、血腥、敏感信息等内容
不友善内容:
人身攻击、挑衅辱骂、恶意行为
其他原因:
请补充说明
举报原因:
×
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!