近日,Trellix高級(jí)研究中心在Python的tarfile模塊中發(fā)現(xiàn)一個(gè)存在長(zhǎng)達(dá)15年之久的漏洞(CVE-2007-4559),全球數(shù)十萬個(gè)開源和閉源項(xiàng)目受漏洞影響。研究人員警告說,這無意中產(chǎn)生了一個(gè)規(guī)模超大的軟件供應(yīng)鏈攻擊面,大多數(shù)受影響的組織甚至都不知道。
據(jù)Trellix分析師透露,該漏洞是Python tarfile模塊中的一個(gè)與路徑遍歷相關(guān)的漏洞,被跟蹤為CVE-2007-4559,目前有超過35萬個(gè)開源存儲(chǔ)庫(kù)存在該尚未修補(bǔ)的漏洞,使得軟件應(yīng)用程序非常容易被利用。
在9月21日發(fā)布的博客文章中,Trellix首席工程師兼漏洞研究主管Douglas McKee表示,有問題的代碼庫(kù)存在于多個(gè)行業(yè)的軟件中——主要是軟件開發(fā)、人工智能/機(jī)器學(xué)習(xí)和代碼開發(fā),也包括網(wǎng)絡(luò)安全、IT管理和媒體等不同領(lǐng)域。
研究人員指出,Python tarfile模塊是任何使用Python的開發(fā)項(xiàng)目的默認(rèn)模塊,目前廣泛存在于AWS、Facebook、Google、Intel和Netflix創(chuàng)建的框架中,以及用于機(jī)器學(xué)習(xí)、自動(dòng)化和Docker容器化的應(yīng)用程序中。
該漏洞允許攻擊者將文件提取到指定目錄之外,同時(shí)攻擊者也可以利用該漏洞執(zhí)行惡意代碼。
“今天,這個(gè)漏洞已被無意中添加到全球數(shù)十萬個(gè)開源和閉源項(xiàng)目中,造成了巨大的軟件供應(yīng)鏈攻擊面。”McKee說道。
舊漏洞,新問題
McKee在帖子中寫道,最近一次企業(yè)設(shè)備的路徑遍歷漏洞檢查中發(fā)現(xiàn)Python tarfile模塊表現(xiàn)異常,Trellix研究人員認(rèn)為他們偶然發(fā)現(xiàn)了一個(gè)新的零日Python漏洞。然而,隨著調(diào)查的深入他們很快意識(shí)到這個(gè)漏洞“年份久遠(yuǎn)”。
通過對(duì)GitHub的進(jìn)一步挖掘,研究者發(fā)現(xiàn)在大約58.8萬個(gè)存儲(chǔ)庫(kù)中,大約有287萬個(gè)包含Python tarfile模塊的開源文件。Trellix的分析結(jié)果發(fā)現(xiàn),這些實(shí)例中約有61%易受攻擊,研究人員據(jù)此估算有35萬個(gè)易受攻擊的Python存儲(chǔ)庫(kù)。
開源安全無人擔(dān)責(zé)
該漏洞能夠逃避檢查,在整個(gè)軟件供應(yīng)鏈中傳播這么長(zhǎng)時(shí)間的原因有很多。但McKee認(rèn)為,將具體責(zé)任歸咎于Python項(xiàng)目的維護(hù)者或任何使用該平臺(tái)的開發(fā)人員是不公平的。
“盡管問題已經(jīng)暴露,但我們首先要明確一點(diǎn),漏洞CVE-2007-4559的問題不應(yīng)該歸咎于任何一方、組織或個(gè)人。”McKee寫道。
由于像Python這樣的開源項(xiàng)目是由一群志愿者而不是一個(gè)組織運(yùn)行和維護(hù)的,因此更難及時(shí)跟蹤和修復(fù)已知問題。
此外,“很多時(shí)候,安全使用庫(kù)或軟件開發(fā)工具包的API被看作是開發(fā)人員的責(zé)任。”McKee指出。
事實(shí)上,Python在Tarfile函數(shù)文檔中明確警告開發(fā)人員注意目錄遍歷風(fēng)險(xiǎn),不要“在沒有事先檢查的情況下從不受信任的源中提取檔案”。但是,顯然該警告并未阻止漏洞的持續(xù)存在和蔓延。
McKee補(bǔ)充說,加劇這個(gè)問題的原因是,大多數(shù)為開發(fā)人員提供的關(guān)于如何使用平臺(tái)模塊的Python教程——包括Python自己的文檔和流行的網(wǎng)站,如tutorialspoint、geeksforgeeks和askpython.com——并未清楚指出如何避免不安全地使用tarfile模塊。
McKee指出,這種差異使得漏洞被寫入整個(gè)供應(yīng)鏈中,這種趨勢(shì)可能會(huì)持續(xù)數(shù)年,除非對(duì)該問題有更廣泛的認(rèn)識(shí)。
漏洞利用“非常容易”
從技術(shù)層面分析,CVE-2007-4559是Python tarfile模塊中的路徑遍歷攻擊,它允許攻擊者通過在TAR存檔中的文件名中添加“..”序列來覆蓋任意文件。
Trellix漏洞研究人員Charles McFarland在周三發(fā)表的一篇博文中指出,實(shí)際的漏洞來自使用未經(jīng)處理的tarfile.extract()或tarfile.extractall()的內(nèi)置默認(rèn)值的兩三行代碼。
“未能在調(diào)用tarfile.extract()或tarfile.extractall()之前編寫任何安全代碼來清理成員的文件會(huì)導(dǎo)致目錄遍歷漏洞,從而使不良行為者能夠訪問文件系統(tǒng)。”他寫道。
攻擊者要利用此漏洞,需要在文件名中添加操作系統(tǒng)分隔符(“/”或“\\”)和“..”,將文件提取到預(yù)定目錄以外,而Python的tarfile模塊讓開發(fā)人員能夠做到這一點(diǎn)。
Trellix漏洞研究實(shí)習(xí)生Kasimir Schulz在周三發(fā)表的博客文章中詳細(xì)描述了利用該漏洞是多么“難以置信的容易”。(https://www.trellix.com/en-us/about/newsroom/stories/threat-labs/tarfile-exploiting-the-world.html)
Schulz在他的文章中解釋說,Python中的Tarfile包含多個(gè)不同文件和元數(shù)據(jù)的集合,這些文件和元數(shù)據(jù)后來用于解壓縮Tarfile本身。TAR存檔中包含的元數(shù)據(jù)包括但不限于文件名、文件大小和校驗(yàn)和等信息,以及文件存檔時(shí)文件所有者的信息。
“tarfile模塊允許用戶在文件添加到TAR存檔之前添加一個(gè)過濾器,該過濾器可用于解析和修改文件的元數(shù)據(jù),”Schulz寫道:這使攻擊者能夠用短短六行代碼創(chuàng)建他們的漏洞利用。
Schulz在他的帖子中詳細(xì)解釋了他如何使用該漏洞和一個(gè)名為Creosote的定制腳本(該腳本在目錄中搜索并分析Python文件)在Spyder IDE中執(zhí)行惡意代碼,后者一個(gè)免費(fèi)和開源的為Python編寫的科學(xué)開發(fā)環(huán)境,可以在Windows和macOS上運(yùn)行。
下一個(gè)目標(biāo):軟件供應(yīng)鏈
Tarfile的漏洞再次凸顯了軟件供應(yīng)鏈作為一個(gè)攻擊面存在的嚴(yán)重問題,因?yàn)楣粽呖梢酝ㄟ^攻擊廣泛存在于多個(gè)平臺(tái)和企業(yè)環(huán)境中的有缺陷代碼來實(shí)施大規(guī)模惡意攻擊活動(dòng)。
類似的軟件供應(yīng)鏈攻擊已經(jīng)有很多案例,例如震驚全球的SolarWinds和Log4j漏洞攻擊。后者是2021年12月上旬披露的在廣泛使用的Java日志工具中的一個(gè)名為L(zhǎng)og4Shell的漏洞,該漏洞引發(fā)了多次利用,并使數(shù)百萬應(yīng)用程序容易受到攻擊,其中許多應(yīng)用程序至今仍未修補(bǔ)。
最近,攻擊者已經(jīng)開始直接在開源代碼存儲(chǔ)庫(kù)注入惡意代碼并嘗到甜頭。這些“毒化”代碼可被利用來進(jìn)行供應(yīng)鏈攻擊。事實(shí)上,Python項(xiàng)目此前已經(jīng)遭受過類似攻擊。
今年8月下旬,攻擊者針對(duì)Python包索引(PyPI)的用戶進(jìn)行了首次網(wǎng)絡(luò)釣魚攻擊,試圖竊取用戶的憑據(jù),以便將惡意包加載到存儲(chǔ)庫(kù)中。當(dāng)月早些時(shí)候,在一家安全供應(yīng)商警告攻擊者將惡意代碼嵌入包安裝腳本后,PyPI從項(xiàng)目庫(kù)中刪除了10個(gè)惡意代碼包。
聲明:本文來自GoUpSec