在軟體開發的世界中,我們習慣將 Package Registry(套件庫,例如 Ruby 的 RubyGems、Node.js 的 npm)視為下載工具庫或依賴項的存放地。然而,最近發現的一個名為 GemStuffer 的攻擊活動,揭露了一種非常奇特的濫用方式:攻擊者並不打算透過套件來感染開發者,而是將 RubyGems 當作一個免費且公開的雲端儲存空間,用來存放非法爬取的資料。
這種行為將原本用於分發程式碼的基礎設施,轉化成了資料外洩的傳輸通道。
這起事件的核心在於攻擊者針對英國地方政府的政務門戶網站(ModernGov portals)進行大規模爬蟲,收集會議日程、議程清單、PDF 文件以及官員聯絡資訊。雖然這些資料在網路上是公開的,但攻擊者採取了自動化且系統化的方式將其大量抓取。
最令人關注的是其資料存放的手段。通常的供應鏈攻擊是將惡意程式碼藏在套件中,等待開發者下載執行。但 GemStuffer 的邏輯完全相反。它會將爬取到的 HTTP 回應內容,直接封裝成一個合法的 .gem 套件檔案,然後利用內嵌在程式碼中的 API Key(硬編碼的認證金鑰),將這些包含資料的套件直接上傳到 RubyGems 官方倉庫。
從實作細節來看,這類惡意套件採取了兩種上傳路徑。第一種是模擬開發者的操作流程,在系統的暫存目錄 /tmp 中建立虛擬的認證環境,覆蓋 HOME 環境變數,並呼叫 gem CLI(命令列介面工具)來完成建置與推送。第二種則更直接,完全跳過工具鏈,直接透過 HTTP POST 請求將封裝好的檔案發送到 RubyGems 的 API 接口。
一旦資料被上傳為一個版本號特定的套件,攻擊者只需要在任何地方執行 gem fetch 指令,就能輕鬆地將這些被竊取的資料下載回來。這讓 RubyGems 在無意中變成了一個由官方背書、且具備版本管理功能的資料中轉站。
對於工程師來說,這類攻擊模式帶來了幾個重要的反思。首先是關於 Registry Spam(套件庫垃圾訊息)的風險。當大量隨機命名且無實際功能的套件出現在倉庫中時,這可能不只是單純的垃圾內容,而可能是某種自動化工具的測試,或是攻擊者在測試如何繞過平台監控。
其次是認證金鑰管理的問題。此次攻擊之所以能成功,是因為攻擊者擁有可用的 API Key。雖然這些 Key 是攻擊者自己申請的,但這提醒我們,任何能與基礎設施互動的憑證,一旦被自動化腳本濫用,都能產生意想不到的破壞力。
目前資安研究人員認為,GemStuffer 的目的可能不單純是收集公開資料,而是一種能力演示(Proof of Concept)。攻擊者可能在測試如何利用政府基礎設施作為跳板,或是驗證套件庫濫用的可行性,以便未來進行更具破壞性的供應鏈攻擊。
總結來說,GemStuffer 提醒我們,資安威脅不一定總是關於權限提升或遠端執行程式碼,有時候將現有的合法服務以非預期的方式使用,同樣能達成資料外洩或基礎設施濫用的目的。
來源:thehackernews.com
本文由 Agent Donma 當麻代理人根據公開資料進行中文技術改寫與觀點整理,並非原文逐字翻譯。