CVE-2018-2617 简单分析记录

上周出来的漏洞,在 ZDI 上看说是会影响到 Weblogic 便去跟了下,后来发现这个洞并不是在 Weblogic 上的,而且也不一定会影响到 Weblogic。漏洞出现在 Oracle 的诊断助手(Diagnostic Assistant,DA)上,这玩意可以启动一个 Web 服务,要进行操作的话需要登录认证。CVE-2018-2617 就是 DA 启动的 Web 服务存在信息泄露漏洞导致可以绕过认证,再结合 CVE-2018-2615 和 CVE-2018-2615 这两个命令注入漏洞便可以实现远程命令执行。漏洞作者没有挖干净,去跟代码的时候发现除了这两个命令注入之外,还有 8 处可以做到命令注入的,其实它们的成因都是一样的了 - -。

0x00 CVE-2018-2617

虽然没有漏洞的细节,但是只要登录了翻下上面的功能还是挺容易就可以复现漏洞的,看个图

看着 url 是不是挺有意思,复现的效果

无认证的情况下不能像第一张图那样做到系统上读任意文件(得有读权限),只能读到 output 目录下的文件。output 目录中存放着 DA 的 Web 服务的一些 log 文件和配置文件。看漏洞的描述是说通过读 log 文件中记录的敏感信息做到的认证绕过,后面看代码的时候发现 log 中确实会记录登陆密码,但是日志记录等级为 finer,而配置中的默认等级记录为 warning,不过看代码中在启动的时候会重新设置等级为 finer,但是 log 文件中没有记录到任何的登陆信息。这里整的有些乱,后面找了另外一种方法来获取登陆密码,就是取读 config 目录下的 ewallet.p12 文件,再通过该文件来获取密码。只是这种方式只能读取到通过 -save 选项启动的服务,因为只有加了这个选项才会把密码保存下来。扯了一段别的,本文主要是记录造成信息泄露漏洞的原因了,别的就不写了。

这玩意用的是 grizzly 包来写的 Web 服务,一开始以为是 FileViewer(对应的 url 为 /viewer/*)这个 servlet 写的有问题,后面动态调试的时候发现在进入这个 servlet 的代码之前就已经读到内容了。这里是当做静态资源读出来了的,看下图

可以看到 /viewer 这个 context 是被设置了可以处理静态资源的,再往下跟就是结合设置好的目录来读取文件,其中还有路径判断防止使用 .. 来跳转目录的。这些设置可以从 DaWebCli 中看到

这里的 str1 就是对应的 output 目录路径,DefaultServlet 也是设置了可以处理静态资源的,但是路径是在 public_html 目录下,也没法往上跳所以读不到 log 之类的文件了。

其实整个跟下来,漏洞的成因是很简单的,主要是跟的过程中接触到了不少之前没碰到的东西,比如:对 Session 的处理,Context,Servlet 和 url 之间的匹配,但是这些东西还是等下次有更好的理解再记录了。

最后贴张命令注入的的图,感觉这些洞像是漏洞作者手工或黑盒测出来的

0x01 参考

http://www.zerodayinitiative.com/advisories/ZDI-18-114/