路漫漫其修远兮

Gotty 未授权访问漏洞分析报告

2019.07.17

Gotty 未授权访问漏洞分析报告

漏洞介绍

Gotty是一个开源的简单的命令行工具,基于go语言实现Linux终端Web共享。

Github: https://github.com/yudai/gotty Stars: 12681

现在很多公司的内网防火墙只允许http协议,从这样的网络去访问和控制云上的主机非常麻烦。GoTTY是一个用go语言开发的工具,它启动一个web应用服务,可以将任何指定的终端应用映射到指定的http端口,这样在防火墙内部的客户端就可以通过普通的浏览器Chrome, Firefox来访问。

影响范围

所有版本

漏洞简析

gotty中通过命令行参数--credential实现HTTP Basic认证,但是该方式默认是未开启的,如下图:

通过main.go文件可知,EnableBasicAuth选项取决于是否提供credential参数

对HTTP Basic的认证在middleware.go文件的wrapBasicAuth函数中,而wrapBasicAuth函数在文件server.go中第199行被调用,取决于options.EnableBasicAuth的值,该值默认为false,所以当启动时不添加--credential参数即会造成未授权访问

通过对静态资源分析可知,Gotty服务的index.html文件包含以下指纹信息,即成功登陆后服务器会返回"./js/gotty-bundle.js"字符串

<!doctype html>
<html>
  <head>
    <title>{{ .title }}</title>
    <link rel="icon" type="image/png" href="favicon.png">
    <link rel="stylesheet" href="./css/index.css" />
    <link rel="stylesheet" href="./css/xterm.css" />
    <link rel="stylesheet" href="./css/xterm_customize.css" />
  </head>
  <body>
    <div id="terminal"></div>
    <script src="./auth_token.js"></script>
    <script src="./config.js"></script>
    <script src="./js/gotty-bundle.js"></script>
  </body>
</html>

复现过程

复现环境

  • Firefox
  • Zoomeye.org

复现过程

步骤1:

通过zoomeye.org搜索"./js/gotty-bundle.js"字符串,获得208个结果,分布还是挺广的

步骤2:

随机选择一个访问,可以成功执行命令

痕迹分析

middleware.go文件中函数wrapLogger实现了对访问者的记录,可根据该记录和历史命令判断攻击的访问痕迹

防护方案

启动时通过命令行参数--credential实现HTTP Basic认证

参考链接

[1] Gotty

https://github.com/yudai/gotty

[2] Zoomeye.org

https://zoomeye.org

发表评论