漏洞分析——‘root’系统用户提权漏洞(CVE-2016-6664)分析

一、背景介绍

此漏洞被收集于网站www.exploit-db.com,漏洞编号为CVE-2016-6664,经杭州汉领信息公司所属汉武实验室评估后,认定其具有一定的研究价值,故由本人对其进行了漏洞验证以及原理分析。

1.1 漏洞描述

部分版本的MySQL、MariaDB、PerconaDB数据库都会受到该漏洞的影响。该漏洞会使已经拥有mysql系统用户权限的攻击者提升到root权限,它是通过对error logs和其他文件的不安全操作导致的。

1.2 受影响的数据库版本

受影响的数据库版本主要与漏洞CVE-2016-6663相关,包括

MariaDB < 5.5.52

MySQL <= 5.5.51 <= 5.6.32 <= 5.7.14

Percona Server < 5.5.51 < 5.6.32 < 5.7.14

1.3 漏洞编号

CVE-2016-6664

二、漏洞分析

2.1 漏洞的产生原因

此漏洞主要与mysqld_safe进程有关。mysqld_safe 通常用于启动mysql守护进程和新建/打开error.log。 在这个过程中mysql_safe进行了不安全的文件操作,导致攻击者可获得root权限。

mysqld_safe脚本中包含了一个while循环,这个循环监视mysqld进程,如果mysqld进程挂掉了由该循环负责重启mysqld进程。而在重启过程中,存在着一个不安全的文件操作——当系统没有使用syslog替代error.log文件,mysqld_safe会重新创建error log 文件。(大部分情况下数据库安装后默认配置是基于文件的日志,即没有使用syslog)

error.log文件被创建(后touch)会使用chown将error.log文件所有者修改为运行mysql进程的用户(一般为mysql)。这个操作很容易受到符号链接的攻击。

攻击者可以通过CVE-2016-6663获得mysql权限,拥有mysql权限后,攻击者可以访问/var/log和/var/lib/mysql目录,并删除error.log并将其替换成指向任意文件的符号链接(指向攻击脚本),当mysql用户kill mysqld进程后,mysqld_safe自动重启mysqld服务,并运行攻击脚本从而进行提权。

2.2 漏洞验证

实验环境:Debian 4.19.13-1kali1 x86_64 mysql版本:5.6.32

漏洞来源地址:http://legalhackers.com/exploits/CVE-2016-6664/mysql-chowned.sh

实验系统用户为mysql用户(通过漏洞CVE-2016-6663获得):

运行exp:

运行结果:

2.3 漏洞危害

root账号被提权的危害巨大,希望朋友们能够对此漏洞加以重视并注意防护。

三、 解决方法

1.该漏洞的利用建立在CVE-2016-6663的基础之上,所以建议通过对CVE-2016-6663漏洞的防护来防止攻击者进一步对服务器造成危害。

2.开启syslog,短期内可使用syslog代替默认的error log。