RubyGems.org 中允許欺騙其他人的套件的漏洞

RubyGems.org 套件儲存庫中已發現一個嚴重漏洞(CVE-2022-29176),該漏洞允許在沒有適當權限的情況下,透過啟動合法程式包的抽出並在其位置載入來替換儲存庫中其他人的程式包另一個具有相同名稱和版本號碼的檔案。

要成功利用漏洞,必須滿足三個條件:

  • 此攻擊只能針對名稱中帶有連字符的資料包進行。
  • 攻擊者必須能夠在連字號之前放置一個包含部分名稱的 gem 套件。 例如,如果攻擊針對「rails-html-sanitizer」包,則攻擊者必須將自己的「rails-html」包放入儲存庫中。
  • 受到攻擊的軟體包必須是在過去 30 天內創建的或 100 天內未更新。

該漏洞是由“yank”操作處理程序中的錯誤引起的,該處理程序將連字符後面的名稱部分解釋為平台名稱,從而可以啟動刪除與該名稱部分匹配的外部包連字符之前。 特別是,在「yank」處理程序程式碼中,「find_by!(full_name: "#{rubygem.name}-#{slug}")」呼叫用於尋找套件,而「slug」參數由套件擁有者來決定要刪除的版本。 包“rails-html”的所有者可以指定“sanitizer-1.2.3”而不是版本“1.2.3”,這將導致該操作應用於其他人的包“rails-html-sanitizer-1.2.3” ” 。

一名安全研究人員發現該問題是 HackerOne 賞金計畫的一部分,該計畫旨在尋找已知開源專案中的安全問題。 該問題於 5 月 18 日在 RubyGems.org 中得到修復,據開發人員稱,他們尚未在過去 XNUMX 個月的日誌中發現任何利用該漏洞的痕跡。 同時,目前僅進行了表面審計,未來計劃進行更深入的審計。

若要檢查您的項目,建議分析 Gemfile.lock 檔案中的操作記錄;惡意活動表現為存在名稱和版本的保留或平台的變更(例如,當 gemname -1.2.3 套件更新為gemname-1.2.3- java)。 作為防止持續整合系統中或發布專案時隱藏套件替換的解決方法,建議開發人員使用具有「-frozen」或「-deployment」選項的 Bundler 來修復依賴項。

來源: opennet.ru

添加評論