GateOne CVE-2020-35736 任意文件读取漏洞复现

2021-08-24 11:36:38 浏览数 (1)

0x00:简介

GateOne 是一款使用 HTML5 技术编写的网页版 SSH 终端模拟器。基于现代的 HTML5 技术,无需任何浏览器插件、支持多个 SSH 进程、可以嵌入到其他任意应用程序中、支持使用 JavaScript,Python 甚至纯 CSS 编写的插件、支持 SSH 进程副本,打开多个进程而无需重复输入密码、 支持各种服务器端的日志功能,支持 Keberos-based 单点登录甚至活动目录、 支持操作日志记录,具有操作记录回放功能。

0x01:分析

查看文件gateone / core / server.py在第3692行中,您可以找到设置处理程序的位置。

可以看到downloads /没有使用Tornado附带的StaticFileHandler,但是使用的是作者本人编写的方法,该方法可能存在漏洞。

可以在第924行找到get方法的定义:

代码语言:javascript复制
def get(self, path, include_body=True):
    session_dir = self.settings['session_dir']
    user = self.current_user
    if user and 'session' in user:
        session = user['session']
    else:
        logger.error(_("DownloadHandler: Could not determine use session"))
        return # Something is wrong
    filepath = os.path.join(session_dir, session, 'downloads', path)
    abspath = os.path.abspath(filepath)
    if not os.path.exists(abspath):
        self.set_status(404)
        self.write(self.get_error_html(404))
        return
    if not os.path.isfile(abspath):
        raise tornado.web.HTTPError(403, "%s is not a file", path)

注意关键部分。可以看到该路径被拼写为文件路径,而没有任何过滤。有目录遍历,并且可以读取任何文件。

0x02:复现

使用官方docker镜像构建测试环境。

1、拉取docker镜像

代码语言:javascript复制
docker pull liftoff/gateone

2、运行docker

代码语言:javascript复制
#Command
docker run [-d/-t] -p [443]:8000 -h [hostname] --name gateone liftoff/gateone gateone
#For example, if 443 is occupied on the server, please use another unused port.
docker run -t -p 443:48620 -h Rats --name gateone liftoff/gateone gateone
代码语言:javascript复制
安装后,请访问https:// ip:port.如果浏览器可能报告它不安全,请忽略它。

注:仅做本地环境测试,切勿外部测试。违者后果自负。

文章来源:

代码语言:javascript复制
https://github.com/liftoff/GateOne/issues/747

0 人点赞