有关CVE-2017-17562的一些零碎点

TL;DR

  • 前两天看到这个漏洞的时候感觉还是挺有意思的,让我想起了之前分析的nginx提权漏洞(CVE-2016-1247)以及shellshock漏洞(CVE-2014-6271),前两天只是简单的看了一下,今天有时间就整理一下,留个备忘。
  • goAHead是一个使用c语言实现的一个简单web服务器,主要用在嵌入式设备上,官方给出的一句话描述也是simple,secure Embedded web server,官方说有亿万的设备在使用(夸张了吧?),其中有像是hp、oracle、西门子、摩托罗拉等。详细可以看向这里https://embedthis.com/goahead/

    CVE-2016-1247简单介绍

  • 这个漏洞可以导致GoAhead web服务器在小于3.6.5版本远程代码执行。攻击者通过发送一个恶意的http请求,利用开启了CGI功能的goAhead的服务器,从而进行远程代码执行。其中exp是利用到了向新的进程中注入环境变量这种比较基本的攻击方式。
  • 具体需要的条件主要有如下:

    1.GoAhead开启CGI功能,即有cgi的处理页面(关于GoAhead cgi的使用可以看向这里https://embedthis.com/goahead/doc/users/cgi.html)
    2.需要GoAhead版本低于3.6.5
    3.需要动态链接glibc库(默认是动态链接的)

    具体

  • 在英文原版文章中作者已经分析了glibc是如何加载和处理环境变量、GoAhead如何处理cgi以及linux的procfs的符号链接如何指向输入描述符等,我这里就不细分析了。下面只是放几张测试的图片。



    (a.html extract from wireshark)
    可以看到,打过payload之后,页面返回的环境变量多了一个LD_PRELOAD=/proc/self/fd/0的键值对。

    可以看到,cgi处理进程符号链接指向的tmp文件和我们的payload是相同的。

    小结

  • 这个漏洞利用的难点在于怎么将动态链接库注入到远程服务器,作者这里提供了一个很好的思路就是利用到了/proc/self/fd/0(它对应了文件的stdin文件描述符)这个文件就链接到了我们上传的文件
  • 就像英文原版文章的标题一样,这个漏洞的精髓就是利用ld_preload来进行exploit,这个思路很新颖,后面可能会有其它的漏洞用到这个思路和方法。

    漏洞引申1-有关nginx提权

  • 漏洞分析文章见这里
    Nginx-Exploit-Deb-Root-PrivEsc-CVE-2016-1247
    1
    作者的poc shell脚本写的不错

Nginx权限提升漏洞(CVE-2016-1247) 分析