存在15年安全漏洞的危險

上個月有研究人員發現了存在於Python程式語言內15年的Tarfile模組的安全漏洞,容許攻擊者寫入任意檔案到任意資料夾內,在某些情況下更能執行惡意代碼,可導致的後果隨時在想像之外。

Tarfile的安全漏洞

Tarfile含有執行tar檔案的編碼,這種格式被廣泛使用在Unix類的操作系統,歷史可追溯至1979年,Tar能夠簡單地封包龐大數量的檔案和資料夾,開始時被用作寫在備份用的磁帶上,現在可用作檔案壓縮,Python的開發人員則把它視為創建和解封該類檔案的現成工具。

在Tarfile上的安全漏洞相當簡單,在2007年的臭蟲報告內描術得十分詳細,並且不視作為安全漏洞,只是tarfile在解封時在檔案內重建相同資料夾架構,在某些個案如果檔案含有「…/…/…/…/…/etc/passwe」時,使用系統管理員身份解封時,密碼檔案並不會寫到加壓檔的原有位置,而是直接到根相錄,覆蓋存在於/etc目錄內的密碼檔案,在Linux則意味著刪險正常持有所有系統用戶資料的檔案。

危險在於程式用的用戶使用tarfile模組並不知道如何正常地解壓檔案,繼而導致部份檔案出現在預期外的位置(也可能沒有發生),或部份用戶檔案被覆蓋,部告的作者提出該問題在於tar加壓工具本身,而問題在2001年已被修復,但tarfile的安全漏洞則從來未被堵塞。

15年的等待

在2007年就有關臭蟲的討論中,結論是不採取任何行動,首要原因是該文件處理完全符合Unix POSIX檔準,其次是不可能在現實中加以利用,所以當時只警告用戶不建議解封有可疑來源的 tarfile便了事。而以上的結論在2022年證明存在錯誤,研究人員不但展示了在現實中利用該安全漏洞的可能性,並且不但是在任何位置寫入數據,更能執行任意編碼,即是攻擊者能借助tarfile模組使用的特定軟件展開攻擊。

其中一個例子是Universal Radio Hacker,一個用來分析不明無線協議的程式,程式以項目形式儲存數據,當中由多個tac封存的檔案組成,研究人員示範了如果嘗試打開預製的檔案結果是一個執行檔被寫入到Windows的autorun目錄內,在系統下一次重啟時該編碼便會被執行,這安全漏洞也可以在其他平台上進行其他活動。

第二個例子則稍為複雜,Sypder IDE開發環境儲存數據在tar檔案內,當輸入這些數據,研究人員首先重複實驗把檔案放入系統,然後更甚者是編寫了編碼在下次Sypder啟動時執行,結果是以系統管理員身份去執行任意代碼。

想像以外的後果

這次15年臭蟲的故事再一次提醒用戶,不應該低估安全漏洞的威脅,即使現時看似現實中難以被利用。Tarfile作為Python的標準部份之一,差不多在所有Linux系統上都能找到其蹤影,所有項目使用tarfile模組都存在安全漏洞,以end user的角度來看情況有點微妙,因為可能在不知道正使用tar的情況下隨時執行了有漏洞的程式,因此Kaspersky的專家建議:

  • 限制處理不明來源的檔案
  • 以最低權限執行第三方程式以降低攻擊的機會
  • 審系在重要系婌中使用的軟件,找出使用的漏洞功能

資料來源:Kaspersky Blog