RepoJacking 攻擊影響數百萬 GitHub 庫。
數百萬 GitHub 庫受到依賴庫劫持攻擊 "RepoJacking" 的影響,可以幫助攻擊者首先供應鏈攻擊,影響數百萬用戶。
RepoJacking 攻擊
GitHub 上用戶名和庫名是經常變化的。如果企業被受到或合并,名字就會發生變化。名字發生變化後,就會創建重定向來避免破壞項目依賴。但如果有用戶注冊了原來的用戶名或庫名,重定向就無效了。
RepoJacking 攻擊是指惡意用戶注冊一個 GitHub 用戶名,并創建一個該組織過去使用的庫,然後修改其名。通過 RepoJacking 攻擊,攻擊者可以依賴被攻擊項目的依賴來從攻擊者控制的庫中取回依賴和代碼,其中可能包含惡意軟件。
攻擊案例
AquaSec 安全研究團隊 Nautilus 分析了 125 萬 GitHub 庫,發現其中 2.95% 可能受到 RepoJacking 攻擊的影響。GitHub 庫總數超過 3 億,按照 2.95% 的比例,超過 900 萬項目受到該攻擊的影響。
在 Google 的庫例子中,"Mathsteps" 項目指向屬于 Socratic 的 GitHub 庫。Socratic 是谷歌收購的一家公司。攻擊者可以克隆庫來破壞重定向,用戶根據 readme 文件指示會從惡意庫中下載惡意代碼。由于 readme 文件中包含 npm install 依賴命令,攻擊者的代碼可以在受害者設備上實現任意代碼執行。
圖 谷歌 readme 文件中的命令
在 Lyft 的例子中,攻擊者可以自動執行。研究人員在該公司的庫中發現一個安裝腳本,可以從另一個庫中取回一個 zip 壓縮文件,因此也受到 RepoJacking 攻擊的影響。
攻擊者首先注冊一個新的用戶名和使用正确名的庫(YesGraph 和 Dominus),然後可以注入代碼到任意執行 Lyft 的 "install.sh" 腳本。
圖 指向外部庫的 Lyft 腳本
總結
GitHub 已經意識到 RepoJacking 攻擊的可能性并實現了一些防護措施。但 AquaSec 稱這些防護措施還不夠充分,易被繞過。比如,GitHub 隻對那些比較流行的項目進行保護。GitHub 會對克隆數超過 100 的項目修改名時進行保護。
RepoJacking 的風險是非常廣泛的,也難以修複,會對企業和用戶帶來嚴重的風險。項目所有者應當盡可能最小化從外部庫提取資源。
完整技術細節參見:https://blog.aquasec.com/github-dataset-research-reveals-millions-potentially-vulnerable-to-repojacking