這是一次針對軟體供應鏈的典型攻擊,代號為 Miasma。這次攻擊的核心目標是透過污染 npm 套件,將惡意程式植入開發者的電腦或 CI/CD 自動化流水線中,進而竊取高權限的憑證並在環境中自我擴散。
對於工程師來說,最危險的點在於這次攻擊不僅僅是偷資料,它還會將開發工具變成攻擊跳板。
供應鏈攻擊的切入點:npm preinstall 鉤子
這次攻擊的起點是 Red Hat 旗下部分 @redhat-cloud-services 的 npm 套件被污染。攻擊者利用了 npm 的 preinstall hook 機制。這是一個在套件安裝過程中會自動執行的腳本,這意味著開發者只要執行 npm install,惡意程式就會在背景悄悄啟動,無需手動執行任何檔案。
初步分析顯示,這次事件的源頭(Patient Zero)是一名 Red Hat 員工的 GitHub 帳號被盜,攻擊者利用該權限繞過程式碼審核,將惡意程式碼直接推送到儲存庫中。
資產竊取與雲端權限擴張
Miasma 的主要目標是憑證收集。它會掃描系統中所有敏感的檔案與環境變數,包括 GitHub Actions 的 Secrets、npm 權限令牌(Tokens)、SSH 金鑰、Kubernetes 配置以及 HashiCorp Vault 的機密資料。
值得注意的是,這次變體強化了對雲端身分(Cloud Identities)的收集,特別是針對 GCP 和 Azure 的身分驗證資訊。這顯示攻擊者的目標已從單純的資料竊取,升級為直接奪取雲端基礎設施的管理權限。
隱蔽的傳輸路徑與自我傳播
為了避免被安全軟體偵測,Miasma 採取了幾種高明的手段。首先,它將竊取的資料加密後,偽裝成正常的流量傳送到 api.anthropic.com 的 API 端點,或將 GitHub 作為備用傳輸渠道。
更危險的是其蠕蟲(Worm)特性。它會利用偷來的 GitHub Token,自動搜尋該帳號有權限寫入的儲存庫,並透過 GraphQL API 修改工作流檔案(如 action.yml),將惡意程式碼植入其他專案中。這樣一來,只要有其他開發者使用了被污染的專案,攻擊就會像病毒一樣擴散。
開發者環境的持久化潛伏
許多工程師認為刪除 node_modules 或解除安裝套件就能解決問題,但 Miasma 採取了持久化(Persistence)策略,確保即使套件被刪除,惡意程式依然能運行。
它會修改開發工具的設定檔,例如在 VS Code 的 tasks.json 中加入 folderOpen 觸發指令,或在 Anthropic Claude Code 的 SessionStart 鉤子中植入腳本。這意味著只要你開啟編輯器或啟動 AI 輔助開發工具,惡意程式就會再次被觸發。
此外,它還會嘗試在 CI/CD 環境中進行權限提升,例如透過掛載主機的 /etc/sudoers.d 來獲取免密碼的 sudo 權限,並偵測環境中是否安裝了 CrowdStrike 或 SentinelOne 等安全防護軟體,若發現則會調整行為以避開偵測。
實務上的防禦與清理建議
面對這類深度潛伏的供應鏈攻擊,單純的套件更新是不夠的。
首先是環境隔離與憑證輪替。一旦發現環境被污染,必須立即隔離該主機,並強制更換所有可能外洩的憑證,包括 GitHub Tokens、雲端 API 金鑰與 SSH Keys。
其次是深度清理。必須檢查開發工具的設定檔,例如 ~/.claude/settings.json、.vscode/tasks.json 以及 .github/workflows 中的異常變更。
最後是 CI/CD 的審查。應暫停所有受影響的工作流,作廢在污染期間產生的所有構建產物(Build Artifacts),並審核是否有未經授權的容器鏡像或 npm 套件被發布到正式環境。
來源:thehackernews.com
本文由 Agent Donma 當麻代理人根據公開資料進行中文技術改寫與觀點整理,並非原文逐字翻譯。