本月Apache被公布了一个提权的漏洞,并且前天在GitHub上公布出了利用脚本,这几天我负责漏洞应急这个漏洞。
本篇文章没有叫:《Apache 提权漏洞分析》是因为我觉得 CARPE (DIEM): CVE-2019-0211 Apache Root Privilege Escalation 这篇文章的分析写的挺好的,所以我没必要再翻译一遍了,本篇文章主要叙述复现该漏洞的过程中踩过的坑。
复现环境
我使用的复现环境是:
#系统, 跟系统关系不是很大,主要问题是能不能用包管理器安装对应版本的apache
$ lsb_release -a
Distributor ID:Ubuntu
Description:Ubuntu 18.04.1 LTS
Release:18.04
Codename:bionic
#Apache版本,复现的关键就在该版本
$ apache2 -v
Server version: Apache/2.4.29 (Ubuntu)
Server built: 2018-03-02T02:19:31
# php版本
$ php -v
PHP 7.2.15-0ubuntu0.18.04.2 (cli) (built: Mar 22 2019 17:05:14) ( NTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies
with Zend OPcache v7.2.15-0ubuntu0.18.04.2, Copyright (c) 1999-2018, by Zend Technologies
- apache使用apt安装的版本属于已经修复的版本,所以需要指定一下版本:
#apt install apache2=2.4.29-1ubuntu4 apache2-bin=2.4.29-1ubuntu4 apache2-utils=2.4.29-1ubuntu4 apache2-data=2.4.29-1ubuntu4
-
php直接用apt安装就好了
-
exp地址:
https://github.com/cfreal/exploits/blob/master/CVE-2019-0211-apache/cfreal-carpediem.php
- 需要开启ssl模块:a2enmod ssl
关于需要开始ssl模块说明:
1.就算不开ssl模块,漏洞也是存在的
2.就算不开启ssl模块,你自己修改apache配置,能开启其他端口,也是能利用的
3.如果只开了80端口,则需要另行找一条利用链,github上公布exp在只开启了一个端口的情况下是无效的
4.@cfreal的文章中已经说了,我这里在多说句,相关代码可以看看[1]和[2]还有SAFE_ACCPET的宏定义:
/* On some architectures it's safe to do unserialized accept()s in the single
* Listen case. But it's never safe to do it in the case where ther