前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >JumpServer日志读取漏洞自动化审计分析

JumpServer日志读取漏洞自动化审计分析

原创
作者头像
腾讯代码安全检查Xcheck
发布2021-01-20 17:33:26
1.7K0
发布2021-01-20 17:33:26
举报

0x00 JumpServer与漏洞介绍

JumpServer是一个开源的堡垒机,server端使用python编写开发,开源地址在https://github.com/jumpserver/jumpserver

在上周五被爆出一个远程命令执行漏洞,这个远程命令执行主要由一个log日志跨目录读取引发。

漏洞影响版本:

  • < v2.6.2
  • < v2.5.4
  • < v2.4.5
  • = v1.5.9
  • >= v.15.3

0x01 漏洞详情

漏洞主要由两部分组成:

  1. 跨目录读取log日志来获取token
  2. 利用获取的token构造ws通信payload,在jumpserver所管理的服务器进行命令执行。

本文主要对1部分进行分析,也是漏洞利用的前提关键条件。

log日志读取漏洞触发主要在apps/ops/ws.py 文件,关键代码为task_log_f = open(log_path, 'rb') ,位于wait_util_log_path_exist函数。

  def wait_util_log_path_exist(self, task_id):
      log_path = get_celery_task_log_path(task_id)
      while not self.disconnected:
          if not os.path.exists(log_path):
              self.send_json({'message': '.', 'task': task_id})
              time.sleep(0.5)
              continue
          self.send_json({'message': '\r\n'})
          try:
              logger.debug('Task log path: {}'.format(log_path))
              task_log_f = open(log_path, 'rb')
              return task_log_f
          except OSError:
              return None

0x02 日志读取漏洞调用链分析

  1. apps/ops/ws.py的receive函数引入污点

污点由websocket通信进来。查阅相关文档,函数receive中的text_data为用户可控的参数。

JsonWebsocketConsumer
JsonWebsocketConsumer
污点引入
污点引入

2. 污点传递到handle_task, 又将污点传递给read_log_file

handle_task
handle_task

3. read_log_file函数再传递到上文提及的wait_util_log_path_exist函数

read_log_file
read_log_file

日志读取返回也是在此处,循环读取4096btypes,然后sleep(0.2)

4. wait_util_log_path_exist 中通过get_celery_task_log_path获取路径,get_celery_task_log_path方法直接将污点拼接到所要读取 的日志路径当中,造成一个跨目录的问题

get_celery_task_log_path
get_celery_task_log_path

0x03 Xcheck自动化审计

xcheck检查结果如下,仅耗时2s:

xcheck检查结果
xcheck检查结果
结果详情
结果详情

这是我们适配channels.generic.websocket之后的检查结果,这个适配添加过程仅仅是将receive方法的参数设置成污点,剩下的这长长的调用链都可由xcheck自动化完成

传递链
传递链

漏洞复现:

  1. 本地搭建成功

搭建成功
搭建成功

2. 漏洞验证

实际利用可读取默认log目录/opt/jumpserver/core/logs下的日志文件获取token等敏感信息。

漏洞利用进行命令执行的部分本文不进行赘述,可参考《Jumpserver 任意命令执行漏洞分析报告》这篇文章。

0x04 参考

  • 修复建议:《JumpServer 远程命令执行漏洞风险通告,腾讯安全全面检测》 https://mp.weixin.qq.com/s/yB7pSlG2ZFz65JDf5A-1Mg
  • 《Jumpserver 任意命令执行漏洞分析报告》https://mp.weixin.qq.com/s/mJ7nY1r2QWeNzaRK6aZViA

想了解Xcheck更多信息或者代码安全审计相关技术欢迎关注xcheck公众号~

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 0x00 JumpServer与漏洞介绍
  • 0x01 漏洞详情
  • 0x02 日志读取漏洞调用链分析
  • 0x03 Xcheck自动化审计
  • 0x04 参考
相关产品与服务
应用安全开发
应用安全开发(Application Security Development,下文中也叫 Xcheck)为您提供优质的代码分析服务。Xcheck 凭借优秀的算法和工程实现,能在极低的误报率和漏报率前提下,以极快的速度发现代码中存在的安全漏洞。Xcheck 采用私有化部署的模式,所以产品使用的整个生命周期,源码都不会流出公司网络,杜绝源码泄露风险。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档