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