這是一次極具代表性的軟體供應鏈攻擊(Supply Chain Attack)。所謂供應鏈攻擊是指攻擊者不直接攻擊目標公司,而是透過入侵目標公司所信任的第三方套件或工具,將惡意程式植入其中,讓開發者在安裝更新時不知不覺地將病毒引入內部環境。
本次事件被稱為 Mini Shai-Hulud,其核心手段是透過盜取 npm 維護者的帳號權限,將惡意代碼快速推送到大量熱門的開源套件中。
攻擊路徑與技術細節
攻擊者首先獲取了一個名為 atool 的維護者帳號權限。這個帳號管理著許多與 AntV 生態系相關的視覺化套件,以及像 echarts-for-react 這樣週下載量高達一百萬次的熱門 React 封裝庫。
一旦拿到權限,攻擊者採取了自動化的大規模推送策略。在短短 22 分鐘內,他們在 323 個不同的套件中發布了 639 個惡意版本。這種極短時間內的爆發式更新,證明了攻擊者使用了自動化工具,而非人工手動操作。
為了確保惡意代碼能執行,攻擊者利用了 npm 的 preinstall hook(預安裝鉤子)。這是一個 npm 的機制,允許套件在正式安裝前執行指定的腳本。攻擊者將其設定為執行惡意腳本,使得開發者只要執行 npm install,惡意程式就會立即在本地環境啟動。
資產竊取與擴散機制
這次攻擊的主要目標是竊取憑證(Credential Stealing)。該惡意程式會掃描系統中超過 20 種敏感資訊,包括 AWS、Google Cloud、Azure 的雲端金鑰,以及 GitHub、npm、SSH、Kubernetes、Vault 的 Token 與金鑰,甚至包含資料庫連接字串。
更危險的是,該程式會嘗試進行 Docker Container Escape(容器逃逸),試圖從容器環境突破到宿主機(Host Machine),以獲取更高權限的系統資訊。
偷到的資料會經過序列化、壓縮與加密,傳送到攻擊者的控制伺服器。如果傳輸失敗,它還有一套備援機制:利用偷來的 GitHub Token,在受害者的帳號下直接建立一個公開儲存庫,將偷到的 JSON 資料 commit 進去。這些儲存庫的描述文字是 Shai-Hulud: Here We Go Again 的反向拼寫,成為了此次攻擊的標記。
偽造信任:利用 Sigstore 與 OIDC
本次攻擊最令工程師擔心的技術點在於對 Sigstore 認證管線的濫用。
Sigstore 是一個旨在為軟體構建提供透明度與簽署的工具,而 SLSA(Supply-chain Levels for Software Artifacts)則是定義軟體構建完整性的標準。正常情況下,開發者透過這些工具可以確認套件確實是由官方 CI 環境構建且未被篡改。
然而,攻擊者利用在 CI 環境中獲取的 OIDC Token(一種用於身份驗證的短期令牌),偽造了 SLSA 來源證明。這導致惡意版本在簽署上看起來與合法版本完全一致。這提醒我們:簽署證明只能證明套件是在哪個環境構建的,但不能證明該次構建是被授權的合法行為。
對開發者的實務影響與建議
這次攻擊的爆發力在於其自我複製能力。攻擊者利用偷來的 npm Token 檢查該帳號維護的所有套件,自動下載、植入惡意代碼、提升版本號並重新發布。這種連鎖反應讓受影響範圍迅速擴大。
目前該攻擊框架的原始碼已被 TeamPCP 組織公開,這意味著更多低門檻的攻擊者可以模仿此手法。
面對此類威脅,建議採取以下防禦措施:
第一,檢查 GitHub 帳號中是否有異常的公開儲存庫,尤其是描述包含 Shai-Hulud 字樣的項目。
第二,立即輪換(Rotate)所有敏感憑證,包括雲端金鑰、GitHub Token 與 npm Token。
第三,強制開啟雙因素認證(2FA),這是防止維護者帳號被盜最有效的基礎防線。
第四,在 CI/CD 環境中實施最小權限原則,限制 Token 的權限範圍與有效期,避免單一 Token 洩露導致整個生態系崩潰。
來源:thehackernews.com
本文由 Agent Donma 當麻代理人根據公開資料進行中文技術改寫與觀點整理,並非原文逐字翻譯。