压在透明的玻璃上c-国产精品国产一级A片精品免费-国产精品视频网-成人黄网站18秘 免费看|www.tcsft.com

DHCP客戶端腳本代碼執(zhí)行漏洞分析(CVE-2018-1111)

2015年5月,在Red Hat Enterprise Linux多個(gè)版本的DHCP客戶端軟件包所包含的NetworkManager集成腳本中發(fā)現(xiàn)了命令注入漏洞(CVE-2018-1111),該漏洞目前已經(jīng)進(jìn)行了修補(bǔ)。攻擊者可以通過本地網(wǎng)絡(luò)上的惡意DHCP服務(wù)器或使用惡意的虛假DHCP響應(yīng)來利用此漏洞進(jìn)行攻擊,一旦攻擊成功,則可以在配置了DHCP的NetworkManager的系統(tǒng)上以root權(quán)限執(zhí)行任意命令。

此漏洞可對(duì)運(yùn)行了帶有它的Red Hat Enterprise Linux6、7版本的個(gè)人或組織構(gòu)成嚴(yán)重威脅,受到威脅著應(yīng)立即使用補(bǔ)丁。

本文通過提供此漏洞的概述來幫助您進(jìn)行風(fēng)險(xiǎn)評(píng)估和了解漏洞,并提供讀者如何進(jìn)行防護(hù)等詳細(xì)信息。

漏洞

NetworkManager是一個(gè)Linux程序,用于在配置DHCP網(wǎng)絡(luò)模式時(shí)管理系統(tǒng)網(wǎng)絡(luò),在這種情況下,NetworkManager將啟動(dòng)dhclient來發(fā)送DHCP請(qǐng)求,如圖1所示。

CVE_1

圖1.通過NetworkManager運(yùn)行的dhclient進(jìn)程

在上面的示例中,你可能會(huì)注意到另一個(gè)配置文件(/var/lib/NetworkManager/dhclient-eth0.conf)被從NetworkManager傳遞給了dhclient。正如下圖,dhclient默認(rèn)配置為請(qǐng)求多個(gè)DHCP數(shù)據(jù)包,其中包括了WPAD。

CVE_2

圖2.傳遞給dhclient的配置文件

當(dāng)dhclient發(fā)送DHCP服務(wù)器的初始化請(qǐng)求時(shí),它被配置為在請(qǐng)求中包含此WPAD(代碼252)選項(xiàng),如下圖中所示:

CVE_3

圖3.初始數(shù)據(jù)包中的DHCP請(qǐng)求WPAD選項(xiàng)

有了CVE-2018-1111漏洞,攻擊者可以通過錯(cuò)誤格式的響應(yīng)對(duì)此DHCP請(qǐng)求進(jìn)行響應(yīng)。例如,攻擊者可能會(huì)使用以下數(shù)據(jù)進(jìn)行響應(yīng),如圖4所示:

xxx '&touch /tmp/test #

CVE_4

圖4.攻擊者在DHCP響應(yīng)中使用惡意格式的WPAD選項(xiàng)進(jìn)行響應(yīng)

收到此響應(yīng)后,默認(rèn)的11-dhclient腳本最終會(huì)將此數(shù)據(jù)傳遞給eval()語句,這就會(huì)導(dǎo)致通過touch命令來創(chuàng)建/tmp/test。

技術(shù)分析

在受害者的系統(tǒng)收到惡意格式的DHCP響應(yīng)再創(chuàng)建/tmp/test之前,還會(huì)發(fā)生許多其他的事情。首先,dhclient調(diào)用client_option_envadd()函數(shù)將值保存到變量中,這可以在下圖的源代碼中看到,它通過client_envadd()函數(shù)在3154行特意執(zhí)行。

CVE_5

圖5.證明如何處理DHCP數(shù)據(jù)包選項(xiàng)的dhclient源碼

在上面的源碼中,在設(shè)置變量之前調(diào)用了pretty_print_option()函數(shù),通過在特殊字符之前添加反斜杠(’‘)來清理值。舉個(gè)例子:

  • '字符將轉(zhuǎn)換為了'
  • 字符將轉(zhuǎn)換為了

在我們的示例中,發(fā)送的初始數(shù)據(jù)如下:

  • xxx’&touch /tmp/test #

然后將轉(zhuǎn)換為以下內(nèi)容:

  • xxx’&touch /tmp/test #

下圖中顯示了此函數(shù)轉(zhuǎn)換了收到的數(shù)據(jù):

CVE_6

圖6.由pretty_print函數(shù)修改的WPAD選項(xiàng)的示例

進(jìn)行轉(zhuǎn)換后,它會(huì)繼續(xù)調(diào)用check_option_values()函數(shù),然后將值存儲(chǔ)到變量中,并檢查以確認(rèn)在給定某些選項(xiàng)的情況下它是否包含特殊字符。此類選項(xiàng)的示例包括提供HOST_NAME或DOMAIN_NAME時(shí),如圖8和圖9所示。

CVE_7

圖8.檢查是否提供了特定選項(xiàng)的源碼

CVE_9

圖9.在提供NETBIOS_SCOPE選項(xiàng)的情況下執(zhí)行的代碼

從代碼中可以看出,未選中WPAD選項(xiàng)。因此,它沒有經(jīng)過額外的檢查,這就使我們能夠通過修改DHCP響應(yīng)中的此選項(xiàng)提供任何數(shù)據(jù)。

接下來,dhclient將通過設(shè)置通過參數(shù)傳遞的參數(shù)來啟動(dòng)/usr/libexec/nm-dhcp-helper進(jìn)程。然后將這些變量保存到dbus服務(wù)中。

另一個(gè)名為nm-dispatcher的兄弟進(jìn)程由NetworkManager啟動(dòng),然后從dbus服務(wù)中讀取變量。它會(huì)將WPAD DHCP選項(xiàng)的值保存到環(huán)境變量名DHCP4_WPAD,然后繼續(xù)啟動(dòng)位于/etc/NetworkManager/dispatcher.d/中的11-dhclient腳本。

看一下這個(gè)11-dhclient腳本:

CVE_10

圖10. 11-dhclient腳本的內(nèi)容

讓我們深入了解這個(gè)腳本中發(fā)生了什么。

在eval()語句中,以“declare”命令開頭,這個(gè)“declare”命令將輸出系統(tǒng)上的所有環(huán)境變量,讀者可能更熟悉“env”命令,它的方式運(yùn)行類似,但雖然輸出相似,結(jié)果仍存在一些關(guān)鍵差異,如下圖11所示。

CVE_11

圖11. declare和env命令之間的差異

正如您在上面所看到的,“declare”命令會(huì)執(zhí)行另外兩項(xiàng)操作:

  1. 如果變量包含特殊字符(例如空格或單引號(hào)),則會(huì)在其兩邊添加'。
  2. 它將內(nèi)部'轉(zhuǎn)換為'''**(將一個(gè)字符轉(zhuǎn)換為四個(gè)字符)。

由于變量的值為xxx’&touch /tmp/test #,因此“declare”的輸出將變?yōu)?code>'‘xxx’”&touch /tmp/test #’。

運(yùn)行“declare”命令后,腳本將僅搜索以“DHCP4_”開頭的環(huán)境變量,然后是“read”命令,如果未提供參數(shù),則此命令將讀取轉(zhuǎn)義字符。換句話說,'將變?yōu)?code>' 。

回到我們?cè)贒HCP響應(yīng)中的WPAD選項(xiàng)提供的數(shù)據(jù),‘xxx’”&touch /tmp/test #’將變?yōu)?code>‘xxx”’&touch /tmp/test #’。換句話說,由于使用了沒有任何參數(shù)的“read”命令,以前轉(zhuǎn)義的字符就不會(huì)被轉(zhuǎn)義。

其余命令將解析的環(huán)境變量數(shù)據(jù)設(shè)置為一系列變量。但是,最后一個(gè)命令包含可能被利用的代碼。有問題的一行如下:

echo "export $optname=$optvalue"

使用我們的示例響應(yīng),將在系統(tǒng)上執(zhí)行以下代碼:

eval "$(echo "export new_wpad='xxx'''&touch /tmp/test #' ")"

圖12中進(jìn)行了演示:

CVE_12

圖12.示例基于WPAD DHCP選項(xiàng)提供的代碼執(zhí)行的結(jié)果

因?yàn)橐脹]有被轉(zhuǎn)義,并且因?yàn)樗蟾艘粋€(gè)符號(hào),所以它允許我們向這個(gè)eval()語句附加一個(gè)額外的命令,在我們的示例中,我們輸入了touch /tmp/test的輔助命令,這導(dǎo)致我們?cè)?code>/tmp/目錄中創(chuàng)建一個(gè)名為test的空文件。

如果引號(hào)字符和&符號(hào)被轉(zhuǎn)義,我們的攻擊就將失敗,如下所示:

CVE_13

圖13.嘗試使用轉(zhuǎn)義的cahracters執(zhí)行相同的命令

重要的是要注意其他字符也可能被用于執(zhí)行此攻擊,例如|;。

漏洞修復(fù)

在這個(gè)特定情況下,修復(fù)非常簡單,只需在“read”命令中添加“-r”選項(xiàng)即可防止各種字符不被轉(zhuǎn)義,就像下圖的修復(fù)補(bǔ)丁里所示的一樣:

CVE_14

圖14. CVE-2018-1111的補(bǔ)丁

根據(jù)“read”命令的文檔描述,“-r”選項(xiàng)可防止命令將反斜杠作為轉(zhuǎn)義字符讀取。換句話說,它將保留提供給它的數(shù)據(jù)中的所有反斜杠,這樣就可以防御命令注入攻擊。

漏洞狀態(tài)

在漏洞被發(fā)現(xiàn)后不久,POC代碼就于2018年5月16日通過Twitter被發(fā)布到網(wǎng)絡(luò)中:

CVE_15

圖15.推特CVE-2018-111 PoC演示

此外,也可以在GitHub中配置代碼以測(cè)試是否存在此漏洞:

https://github.com/knqyf263/CVE-2018-1111

結(jié)論

考慮到NetworkManager使用十分廣泛,并且這個(gè)漏洞很容易被攻擊者利用,它應(yīng)該被視為一個(gè)高危的漏洞。目前此漏洞威脅的風(fēng)險(xiǎn)情況會(huì)更具利用此漏洞的攻擊數(shù)量增加而提升。

如果還沒有被攻擊,讀者應(yīng)該盡快修補(bǔ)他們的系統(tǒng)。

原文地址:https://researchcenter.paloaltonetworks.com/2018/07/unit42-analysis-dhcp-client-script-code-execution-vulnerability-cve-2018-1111/

上一篇:2018德國“紅點(diǎn)獎(jiǎng)”出爐 銳捷電流標(biāo)簽斬獲設(shè)計(jì)界“奧斯卡獎(jiǎng)”

下一篇:中國信息通信研究院攜手亞信安全打造“一體化”管理平臺(tái)

站长统计