開源TensorFlow機器學習框架存在漏洞,黑客可借此發起供應鏈攻擊
在開源TensorFlow機器學習框架中發現的持續集成與持續交付(CI/CD)配置錯誤,可能被利用來發起供應鏈攻擊。
TensorFlow 是谷歌的開發者創造的一款開源的深度學習框架,于 2015 年發布。TensorFlow 現已被公司、企業與創業公司廣泛用于自動化工作任務和開發新系統,其在分布式訓練支持、可擴展的生產和部署選項、多種設備(比如安卓)支持方面備受好評。
Praetorian的研究員Adnan Khan和John Stawinski在本周發布的一份報告中表示,這些配置錯誤可能被攻擊者利用來“通過惡意拉取請求(pull request),在GitHub和PyPi上對TensorFlow版本實施供應鏈妥協,從而危及TensorFlow的構建代理”,
通過利用這些漏洞,攻擊者可將惡意版本上傳到GitHub倉庫,并獲得自托管GitHub運行器(runner)上的遠程代碼執行權限,甚至檢索tensorflow-jenkins用戶的GitHub個人訪問令牌(PAT)。
TensorFlow使用GitHub Actions自動化軟件構建、測試和部署流程。運行器指的是執行GitHub Actions工作流中任務的機器,可以自托管,也可以由GitHub托管。
GitHub在其文檔中寫道,“建議用戶僅在私有倉庫中使用自托管運行器,因為公共倉庫的分支可能通過創建執行危險代碼的工作流拉取請求,在您的自托管運行器機器上運行潛在危險的代碼。”
換言之,這允許任何貢獻者通過提交惡意拉取請求,在自托管運行器上執行任意代碼。然而,這并不會對GitHub托管的運行器構成任何安全問題,因為每個運行器都是短暫的,并且是一個干凈、隔離的虛擬機,在任務執行結束后就會被銷毀。
Praetorian表示,它能夠識別在自托管運行器上執行的TensorFlow工作流,隨后發現以前的貢獻者提交的分支拉取請求自動觸發了相應的CI/CD工作流,且無需批準。
因此,一個想要對目標倉庫進行木馬化的攻擊者的操作是這樣的,他會修正一個拼寫錯誤或進行一個小但合法的代碼更改,為此創建一個拉取請求,然后等待拉取請求被合并,以成為一個貢獻者。這將使他們能夠在創建惡意拉取請求時執行代碼,而不會引起任何警告。
進一步檢查工作流日志顯示,自托管運行器不僅是非短暫性的(從而為持久性打開了大門),而且與工作流相關的GITHUB_TOKEN權限包含了廣泛的寫權限。
研究人員指出“因為GITHUB_TOKEN擁有contents:write權限,它可以上傳版本到https://github[.]com/tensorflow/tensorflow/releases/,攻擊者如果危及這些GITHUB_TOKEN,就可以在發布資產中添加他們自己的文件。”而contents:write權限可以被用來直接向TensorFlow倉庫推送代碼,通過秘密地將惡意代碼注入到一個特性分支,并將其合并到主分支。
不僅如此,一個威脅行為者還可以竊取,在發布工作流中用于認證Python包索引(PyPI)注冊表的AWS_PYPI_ACCOUNT_TOKEN,并上傳一個惡意的Python .whl文件,以便有效地污染包。
“攻擊者還可以利用GITHUB_TOKEN的權限來危及JENKINS_TOKEN倉庫密鑰,盡管這個密鑰并未在自托管運行器上運行的工作流中使用。”
隨著越來越多的組織自動化他們的CI/CD流程,類似的CI/CD攻擊正在上升。“人工智能/機器學習公司尤其脆弱,因為他們的許多工作流需要大量的計算能力,這在GitHub托管的運行器中是不可用的,因此自托管運行器很普遍。”
這一披露是在兩位研究員揭示了包括與Chia網絡、微軟DeepSpeed和PyTorch相關的多個公共GitHub倉庫,都容易受到通過自托管GitHub Actions運行器注入惡意代碼的攻擊。
參考來源:https://thehackernews.com/2024/01/tensorflow-cicd-flaw-exposed-supply.html