• 提交需求
    *
    *

    *
    *
    *
    立即提交
    点击”立即提交”,表明我理解并同意 《黄金城科技隐私条款》

    logo

      产品与服务
      解决方案
      技术支持
      合作发展
      关于黄金城

      申请试用
        JumpServer远程命令执行漏洞复现分析
        发布时间:2021-04-02 阅读次数: 389 次

        漏洞描述


        JumpServer 是全球首款完全开源的堡垒机, 使用GNU GPL v2.0 开源协议, 是符合4A 的专业运维审计系统。JumpServer 使用Python / Django 进行开发。


        2021年1月15日,JumpServer发布更新,修复了一处远程命令执行漏洞。由于 JumpServer 某些接口未做授权限制,攻击者可构造恶意请求获取到日志文件获取敏感信息,或者执行相关API操作控制其中所有机器,执行任意命令。建议相关用户尽快采取措施阻止漏洞攻击。


        影响范围


        JumpServer < v2.6.2

        JumpServer < v2.5.4

        JumpServer < v2.4.5

        JumpServer = v1.5.9


        漏洞分析


        查看漏洞修复的代码更新部分

        https://github.com/jumpserver/jumpserver/commit/f04e2fa0905a7cd439d7f6118bc810894eed3f3e


        发现是在apps/ops/ws.py文件中加入了一段判断是否已经进行身份认证的代码。


        下载源码包,更新的apps/ops/ws.py文件是一个TaskLogWebsocket类,搜索TaskLogWebsocket类的调用。


        在apps/ops/urls/ws_urls.py调用了TaskLogWebsocket类,该类中定义了一个/ws/ops/tasks/log/的websocket请求接口,也就是说当发起ws://xxx/ws/ops/tasks/log/这个接口的请求时,都会调用TaskLogWebsocket类。


        通过TaskLogWebsocket类中方法的调用关系,可以看出各方法的调用顺序如下。


        继续跟进到apps/ops/celery/utils.py和apps/ops/ansible/utils.py中,发现它们都调用了ops.utils的get_task_log_path方法。


        继续跟进,在该方法中,task_id参数是可控的,该方法可以读取.log后缀的文件。


        从以上调用链中可以发现,在未修复漏洞时,ws://xxx/ws/ops/tasks/log/这个websocket接口是可以未授权访问的,可以读取.log后缀的文件。


        漏洞复现


        环境搭建


        利用安装脚本可以快速进行安装

        V2.6.1安装脚本:https://www.o2oxy.cn/wp-content/uploads/2021/01/quick_start.zip(参考https://www.o2oxy.cn/2921.html)


        安装完成后启动JumpServer,访问http://192.168.210.37:8080,默认初始账户密码为admin/admin


        修改初始密码后重新登录,进入主界面。


        未授权文件读取漏洞复现


        退出登录,使用chrome websocket插件进行未授权文件读取测试

        ws://192.168.210.37:8080/ws/ops/tasks/log/

        {"task":"/opt/jumpserver/logs/jumpserver"}


        也可以使用poc脚本进行测试

        https://github.com/Skactor/jumpserver_rce


        远程命令执行漏洞复现


        管理员登录,创建一个资产。


        配置用户和权限,登录web终端。


        读取gunicorn.log文件,获取asset_id、system_user_id、user_id三个参数值,搜索/asset-permissions/user/validate即可。


        修改exp脚本中相应的参数,运行


        修复建议


        黄金城官网版本

        >= v2.6.2

        >= v2.5.4

        >= v2.4.5  

        = v1.5.9 (版本号没变)

        < v1.5.3


        修复方案

        将JumpServer升级至黄金城官网版本


        临时修复方案

        修改 Nginx 配置文件屏蔽漏洞接口

        详情见官方主页:

        https://github.com/jumpserver/jumpserver

        免费试用
        服务热线

        马上咨询

        400-811-3777

        回到顶部
        【网站地图】【sitemap】