新型PyPI攻擊技術可能導致超2.2萬軟件包被劫持
一種針對 Python 軟件包索引(PyPI)注冊表的新型供應鏈攻擊技術已在野外被利用,并且目前正試圖滲透到下游組織中。
軟件供應鏈安全公司 JFrog 將其代號定為Revival Hijack,并稱這種攻擊方法可用于劫持 2.2萬個現有 PyPI 軟件包,并導致數十萬次惡意軟件包下載。這些易受攻擊的軟件包下載量已超過 10 萬次,或已活躍超過 6 個月。
JFrog安全研究人員Andrey Polkovnychenko和Brian Moussalli在與《黑客新聞》分享的一份報告中說:"這種攻擊技術涉及劫持PyPI軟件包,一旦這些軟件包被原所有者從PyPI索引中刪除,就操縱重新注冊這些軟件包的選項。
這種被稱為“Revival Hijack”的技術利用了一項政策漏洞,允許攻擊者在原始開發人員將軟件包從PyPI中刪除后重新注冊并劫持軟件包名稱。
與傳統的域名搶注攻擊不同,Revival Hijack攻擊利用的是用戶拼寫錯誤的軟件包名稱,而傳統域名搶注攻擊則利用了熱門軟件包的刪除和重新注冊。當開發人員從PyPI中刪除他們的項目時,軟件包名稱就會可供其他任何人注冊。然后,攻擊者可以上傳這些軟件包的惡意版本,毫無戒心的用戶可能會下載并安裝這些軟件包,并認為它們是合法的。
JFrog 分享的統計數據顯示,平均每月約有 309 個軟件包被刪除。出現這些情況的原因有很多,比如:缺乏維護(即廢棄軟件)、軟件包以不同的名稱重新發布,或將相同的功能引入官方庫或內置 API。
這也構成了一個有利可圖的攻擊面,它比錯別字搶注更有效,攻擊者可以利用自己的賬戶,以相同的名稱和更高的版本發布惡意軟件包,感染開發者環境。
雖然PyPI確實有防止冒充作者和搶注的措施,但JFrog的分析發現,運行 “pip list--outdated ”命令會將假冒軟件包列為原始軟件包的新版本,而前者對應的是來自完全不同作者的不同軟件包。
更令人擔憂的是,運行 “pip install -upgrade ”命令會將實際軟件包替換為虛假軟件包,而軟件包的作者卻沒有任何警告,這可能會讓不知情的開發者面臨巨大的軟件供應鏈風險。
JFrog 表示,它采取的措施是創建一個名為 “security_holding ”的新 PyPI 用戶賬戶,用來安全地劫持易受攻擊的軟件包,并用空的占位符取代它們,以防止惡意行為者利用被刪除的軟件包。
此外,每個軟件包的版本號都被指定為 0.0.0.1,這與依賴關系混亂攻擊的情況正好相反,以避免在運行 pip 升級命令時被開發人員調用。
更令人不安的是,Revival 劫持已經在野外被利用,一個名為 Jinnis 的未知威脅行為者于 2024 年 3 月 30 日引入了一個名為 “pingdomv3 ”的軟件包的良性版本,而就在同一天,原所有者(cheneyyan)從 PyPI 中刪除了該軟件包。
2024 年 4 月 12 日,新的開發者發布了一個更新,其中包含一個 Base64 編碼的有效載荷,該有效載荷會檢查是否存在 “JENKINS_URL ”環境變量,如果存在,則會執行從遠程服務器獲取的未知下一階段模塊。
JFrog認為攻擊者可能推遲了攻擊的發送時間,或者將其設計得更有針對性,將其限制在特定的IP范圍內。
新的攻擊行為表明,威脅行為者正盯上更大規模的供應鏈攻擊,以刪除的 PyPI 軟件包為目標,從而擴大攻擊范圍。建議企業和開發人員檢查他們的 DevOps 管道,以確保他們沒有安裝已經從版本庫中刪除的軟件包。
JFrog安全研究團隊負責人Moussalli表示:利用處理已刪除軟件包的漏洞行為,攻擊者可以劫持現有軟件包,從而在不改變用戶工作流程的情況下將其安裝到目標系統中。
PyPI 軟件包的攻擊面正在不斷擴大。盡管在此進行了主動干預,但用戶仍應始終保持警覺,并采取必要的預防措施來保護自己和 PyPI 社區免受這種劫持技術的侵害。