一個(gè)15年前的Python漏洞肆虐全球軟件界
Python開(kāi)源編程語(yǔ)言中一個(gè)15年前的漏洞在許多地方仍未修補(bǔ),因此得以蔓延到全球成千上萬(wàn)個(gè)開(kāi)源和閉源項(xiàng)目。研究人員警告,這無(wú)意中構(gòu)成了一條大范圍易受攻擊的軟件供應(yīng)鏈,大多數(shù)受影響的組織還蒙在鼓里。
Trellix高級(jí)研究中心的分析師發(fā)現(xiàn),一個(gè)與路徑遍歷相關(guān)的漏洞被編號(hào)為CVE-2007-4559,目前在350000多個(gè)獨(dú)特的開(kāi)源代碼存儲(chǔ)庫(kù)中仍未修補(bǔ),導(dǎo)致應(yīng)用軟件容易被利用。
首席工程師兼漏洞研究主管Douglas McKee在9月21日發(fā)表的博文中表示,這個(gè)有問(wèn)題的代碼庫(kù)存在于遍布眾多行業(yè)的軟件中,主要是軟件開(kāi)發(fā)、人工智能/機(jī)器學(xué)習(xí)和代碼開(kāi)發(fā)等領(lǐng)域,還包括安全、IT管理和媒體等諸多領(lǐng)域。
研究人員表示,Python tarfile模塊還存在于任何使用Python的項(xiàng)目的一個(gè)默認(rèn)模塊中,目前廣泛出現(xiàn)在AWS、Facebook、谷歌、英特爾和Netflix開(kāi)發(fā)的框架中,以及用于機(jī)器學(xué)習(xí)、自動(dòng)化和Docker容器化的應(yīng)用程序中。
研究人員表示,雖然該漏洞讓攻擊者可以逃離目錄(文件應(yīng)該被解壓到該目錄),但攻擊者也可以利用該漏洞執(zhí)行惡意代碼。
McKee說(shuō):“今天,這個(gè)未加制止的漏洞被無(wú)意中添加到全球成千上萬(wàn)開(kāi)源和閉源項(xiàng)目中,留下了巨大的軟件供應(yīng)鏈攻擊面。”
新問(wèn)題,舊漏洞
McKee在博文中寫(xiě)道,Trellix的研究人員最近發(fā)現(xiàn)Python的tarfile模塊沒(méi)有合理檢查企業(yè)設(shè)備中的路徑遍歷漏洞后,以為無(wú)意中發(fā)現(xiàn)了一個(gè)新的Python零日漏洞。不過(guò)他們很快就意識(shí)到,這個(gè)漏洞是之前就已發(fā)現(xiàn)的。
進(jìn)一步深挖及后來(lái)得到GitHub的合作后發(fā)現(xiàn),大約287萬(wàn)個(gè)開(kāi)源文件含有Python的tarfile模塊,該模塊出現(xiàn)在大約588000個(gè)獨(dú)特的代碼存儲(chǔ)庫(kù)中。Trellix分析后發(fā)現(xiàn),這些實(shí)例中約61%易受攻擊,研究人員憑此估計(jì)目前有350000個(gè)易受攻擊的Python代碼存儲(chǔ)庫(kù)。
在開(kāi)源界,找不到可以責(zé)怪的對(duì)象
該漏洞在整個(gè)軟件界蔓延這么久、卻未加制止有諸多原因;然而McKee特別指出,將具體責(zé)任歸咎于Python項(xiàng)目、該項(xiàng)目的眾多維護(hù)者或任何使用該平臺(tái)的開(kāi)發(fā)人員有失公允。
他寫(xiě)道:“首先應(yīng)明確一點(diǎn),造成CVE-2007-4559目前的這種狀態(tài),不該歸咎于任何一方、組織或個(gè)人,但無(wú)論如何我們都有責(zé)任。”
McKee表示,由于Python之類(lèi)的開(kāi)源項(xiàng)目由一群志愿者而不是一個(gè)聯(lián)合組織(以及非營(yíng)利基金會(huì))運(yùn)行和維護(hù),因此更難及時(shí)跟蹤和修復(fù)已知的問(wèn)題。此外,庫(kù)或軟件開(kāi)發(fā)工具包……將安全地使用API視為開(kāi)發(fā)人員的一部分責(zé)任并不少見(jiàn)。
的確,Python在tarfile函數(shù)的文檔中就使用它的風(fēng)險(xiǎn)發(fā)出了警告,明確告誡開(kāi)發(fā)人員:由于目錄遍歷問(wèn)題,永遠(yuǎn)不要“在沒(méi)有事先檢查的情況下解壓來(lái)源不明的存檔”。
McKee表示,雖然警告是邁出的“積極一步”,提醒人們注意該問(wèn)題,但顯然沒(méi)有阻止漏洞持續(xù)存在,因?yàn)槿孕枰墒褂迷摯a庫(kù)的開(kāi)發(fā)人員確保自己構(gòu)建的軟件是安全的。
他補(bǔ)充道,使問(wèn)題更嚴(yán)重的是,大多數(shù)為開(kāi)發(fā)人員提供的關(guān)于如何使用該平臺(tái)模塊的Python教程并沒(méi)有清楚地表明如何避免tarfile 模塊的不安全使用,包括Python自己的文檔以及utorialspoint、geeksforgeeks和askpython.com等流行網(wǎng)站。
McKee特別指出,這種差異使得該漏洞被編寫(xiě)到整條供應(yīng)鏈中,這個(gè)趨勢(shì)可能會(huì)延續(xù)數(shù)年,除非對(duì)這個(gè)問(wèn)題有更廣泛的認(rèn)識(shí)。
利用漏洞“異常容易”
在技術(shù)方面,CVE-2007-4559是Python的tarfile模塊中的路徑遍歷攻擊,它讓攻擊者可以通過(guò)為T(mén)AR存檔的文件名添加“..”序列來(lái)覆蓋任意文件。
Trellix漏洞研究人員Charles McFarland在周三發(fā)表的關(guān)于該問(wèn)題的另一篇博文中特別指出,這個(gè)實(shí)際漏洞源自使用未凈化處理的tarfile.extract()或tarfile.extractall()的內(nèi)置默認(rèn)值的兩三行代碼。
他寫(xiě)道:“未編寫(xiě)在調(diào)用tarfile.extract()或tarfile.extractall()之前凈化處理成員文件的任何安全代碼導(dǎo)致了目錄遍歷漏洞,從而使不法分子能夠訪問(wèn)文件系統(tǒng)。”
攻擊者要利用該漏洞,就需要為文件名添加帶有操作系統(tǒng)分隔符(“/”或“\”)的“..”,以逃離目錄(文件本該被解壓到該目錄)。Python的tarfile模塊讓開(kāi)發(fā)人員恰好可以做到這點(diǎn)。
這個(gè)廣泛的Python tarfile漏洞浮出水面,實(shí)際上得益于Trellix漏洞研究實(shí)習(xí)生Kasimir Schulz對(duì)另一個(gè)問(wèn)題開(kāi)展的研究。周三他發(fā)表了第三篇獨(dú)立的Trellix博文,詳細(xì)描述了利用CVE-2007-4559多么“異常容易”。
Schulz在博文中解釋?zhuān)琍ython中的Tarfile包含多個(gè)不同的文件和元數(shù)據(jù),元數(shù)據(jù)后來(lái)用于解壓縮tarfile本身。TAR存檔文件中包含的元數(shù)據(jù)包括但不限于文件名、文件大小和校驗(yàn)和之類(lèi)的信息以及文件存檔時(shí)有關(guān)文件所有者的信息。
Schulz寫(xiě)道:“tarfile模塊讓用戶(hù)可以添加過(guò)濾器,過(guò)濾器可用于在文件的元數(shù)據(jù)添加到TAR存檔之前解析和修改該元數(shù)據(jù)。”這使攻擊者能夠用短短六行代碼即可創(chuàng)建漏洞利用工具。
Schulz在博文中繼續(xù)詳細(xì)解釋了他如何使用該漏洞和一個(gè)名為Creosote的定制腳本(該腳本可搜遍目錄,掃描并分析Python文件),在Spyder IDE中執(zhí)行惡意代碼。Spyder是一個(gè)免費(fèi)的開(kāi)源科學(xué)環(huán)境,為Python編寫(xiě),可以在Windows和macOS上運(yùn)行
聚焦供應(yīng)鏈
tarfile問(wèn)題再次凸顯了軟件供應(yīng)鏈這一攻擊面。由于攻擊者可以通過(guò)攻擊存在于多個(gè)平臺(tái)和企業(yè)環(huán)境中的有缺陷代碼造成廣泛影響,這個(gè)攻擊面近年來(lái)越來(lái)越惹人矚目。這可用于大大擴(kuò)大惡意活動(dòng)的影響,無(wú)需威脅分子多花力氣。
供應(yīng)鏈遭到這些類(lèi)型的攻擊此前已有很多例子,如今臭名昭著的SolarWinds和Log4J場(chǎng)景就最為知名。前者始于2020年12月下旬,SolarWinds Orion軟件遭到破壞,這一事件蔓延到次年,眾多組織遭到多起攻擊。后一起事件始于2021年12月上旬,在廣泛使用的Java日志工具中發(fā)現(xiàn)了一個(gè)名為L(zhǎng)og4Shell的漏洞,該漏洞引發(fā)了另外多個(gè)漏洞,導(dǎo)致數(shù)百萬(wàn)應(yīng)用程序易受攻擊,其中許多應(yīng)用程序至今仍未修補(bǔ)。
最近,攻擊者已經(jīng)開(kāi)始嘗到直接攻擊開(kāi)源代碼存儲(chǔ)庫(kù)以植入他們自己的惡意代碼帶來(lái)的甜頭,這些代碼可以在以后被用來(lái)攻擊供應(yīng)鏈。事實(shí)上,Python項(xiàng)目已經(jīng)發(fā)現(xiàn)自己被盯上了。
8月底,攻擊者針對(duì)Python包索引(PyPI)的用戶(hù)發(fā)動(dòng)了首起網(wǎng)絡(luò)釣魚(yú)攻擊,旨在竊取用戶(hù)的憑據(jù),那樣威脅分子就可以將中招的軟件包加載到代碼存儲(chǔ)庫(kù)中。8月早些時(shí)候,在一家安全供應(yīng)商警告威脅分子將惡意代碼嵌入到軟件包安裝腳本后,PyPI已經(jīng)從注冊(cè)庫(kù)刪除了10 個(gè)惡意代碼包。
本文翻譯自:https://www.darkreading.com/application-security/15-year-old-python-flaw-software-worldwide如若轉(zhuǎn)載,請(qǐng)注明原文地址。