JumpServer 未授权接口 远程命令执行漏洞

漏洞描述

JumpServer 是全球首款完全开源的堡垒机, 使用GNU GPL v2.0 开源协议, 是符合4A 的专业运维审计系统。 JumpServer 使用Python / Django 进行开发。2021年1月15日,阿里云应急响应中心监控到开源堡垒机JumpServer发布更新,修复了一处远程命令执行漏洞。由于 JumpServer 某些接口未做授权限制,攻击者可构造恶意请求获取到日志文件获取敏感信息,或者执行相关API操作控制其中所有机器。

漏洞影响

Note

JumpServer < v2.6.2

JumpServer < v2.5.4

JumpServer < v2.4.5

JumpServer = v1.5.9

FOFA

Note

app="FIT2CLOUD-JumpServer-堡垒机"

环境搭建

安装 JumpServer v2.6.1 版本

下载链接arrow-up-right

Note

安装注意 配置网络,配置Mysql,配置Redis 选择 n

等待完成安装执行以下命令

等待安装完毕访问 http://xxx.xxx.xxx.xxxx:8080arrow-up-right

默认账号密码 amdin:admin

漏洞复现

进入后台添加配置

资产管理 --> 系统用户

资产管理 --> 管理用户

用户管理 --> 用户列表

资产管理 --> 资产列表

查看一下项目代码提交变动

新版对用户进行了一个判断,可以使用 谷歌插件 WebSocket King 连接上这个websocket 进行日志读取

比如send这里获取的 Task id ,这里是可以获得一些敏感的信息的

查看一下连接Web终端的后端api代码

可以看到这里调用时必须需要 user asset system_user 这三个值,再获取一个20秒的 token

访问web终端后查看日志的调用

可以看到在不同的时间访问这个接口的asset_id等都是一样的,所以只用在 刚刚的未授权日志读取里找到想要的这几个值就可以获得 token

发送请求获取20s的token

看一下 koko.js 这个前端文件

后端代码 https://github.com/jumpserver/koko/blob/e054394ffd13ac7c71a4ac980340749d9548f5e1/pkg/httpd/webserver.goarrow-up-right

这里我们就可以通过 获得的token来模拟请求

成功连接模拟了这个 token 的请求,可以在Network看一下流量是怎么发送的

模拟连接发送和接发数据

这里可以看到我们只要模拟了这个发送,返回的数据和web终端是一样的,那我们就可以通过这样的方法来进行命令执行了

漏洞利用POC

Note

POC 里包含两个方法,一个是获取日志文件,另一个是命令执行

日志提取已经过滤了部分API调用的数据,只需要找到那几个值就好了

命令执行需要从日志中获取敏感数据并写入脚本对应的变量中

接收数据如果卡住请调整 for i in range(7) 这个位置的 7

Last updated