駭客繞過 CI/CD 發布惡意版本,NPM 供應鏈攻擊手法解析與開發者自救指南
如果常常在專案裡 import axios,誰能想到這個堪稱前端與 Node.js 基礎設施、下載量破千萬次的開源套件,竟然因為供應鏈攻擊,反而會變成系統裡的未爆彈呢?
就在近日,資安團隊 Socket 與 StepSecurity 共同揭露了一起嚴重的供應鏈攻擊,Axios 被硬塞了一個名為 plain-crypto-js 的惡意相依套件。目前確定中招的是 1.14.1 與 0.30.4 這兩個版本。
駭客如何繞過防線?提權的完美犯罪
這起事件之所以讓人關注,在於駭客完全掌握了發布流程的漏洞。表面上,是 Axios 核心開發者 jasonsaayman 的 npm 帳號被攻破,但背後的操作卻異常細緻,
駭客藉由信箱劫持與繞過 CI/CD,將該 npm 帳號的關聯信箱竄改為 Proton Mail([email protected]),並完全繞開了平時正常的 GitHub Actions CI/CD 發布流程。他們沒有在 GitHub 上留下任何 Tag 或 Release 紀錄,直接將編譯好的惡意版本推送到 npm 上。
同時呢,駭客將權限反客為主,在劫持帳號後,篡改了套件的管理權限。這導致其他 Axios 維護者在 GitHub 上無法搶回專案的管理權,只好等 npm 官方介入撤下惡意套件。
這顆炸彈到底會做什麼?
從資安分析來看,這次的攻擊不只是單純的惡作劇或挖礦,而是一個跨平台的遠端存取木馬(RAT)。這支夾帶在 [email protected] 中的木馬非常狡猾,它在執行後會自我銷毀,這意味著事後你去翻找 node_modules 是看不出異狀。它會針對 macOS、Windows 與 Linux 進行無差別攻擊。
Windows 系統方面,它會修改登錄檔以建立自啟動機制(HKCU,\Software\Microsoft),並可能在 %PROGRAMDATA%\wt.exe 留下實體檔案。
macOS 系統這邊,則會嘗試在 /Library/Caches/com.apple.act.mond 植入後門。
至於 Linux 系統,該攻擊手法會在 /tmp/ld.py 寫入惡意腳本。
擴散效應導致 AI 工具與開源專案受波及
這種供應鏈攻擊最可怕的地方在於它的爆炸半徑。許多現代的工具、腳本乃至於 AI 應用,底層的網路請求會依賴 Axios。而 plain-crypto-js 惡意套件是本次攻擊的核心,駭客將其植入 axios 作為惡意相依。它偽裝成一個合法的加密庫,自然就有一些專案受到波及。
對於近期進行開發 AI 代理(AI Agent)或自動化工具的人來說,這是一個嚴重的警訊。當 AI 在處理大量資料或是與外部 API 溝通時,如果底層的連線套件已經被植入木馬,伺服器的控制權與機敏的環境變數(如 API Keys)可能早就被悄悄傳送出去了。
開發者自救指南,立刻檢查 Lockfile
CyberQ 建議,倘若手邊有正在維護的專案,請不要嫌麻煩,現在立刻打開專案目錄進行清查,
搜尋 Lockfile,打開 package-lock.json、yarn.lock 或 pnpm-lock.yaml,搜尋是否包含 [email protected] 或 [email protected]。
檢查相依套件,建議搜尋專案內是否被偷偷安裝了 plain-crypto-js。
強制降版也是一個必要措施,如果有踩到這個坑,請立刻將 Axios 強制綁定在安全的版本(1.x 用戶請降至 1.14.0;0.x 用戶請降至 0.30.3)。
清查入侵指標(IoC)也列為優先,如果你的伺服器或本機已經跑過 npm install 並啟動過專案,請務必檢查上述提到的系統路徑,確認是否有異常檔案。
這次事件再次凸顯了開源生態系在身分驗證與防護機制上的問題。雖然多數科技大廠有足夠的資源建置內部的私有套件庫與漏洞掃描機制,但對於一般開發者或新創團隊而言,養成鎖定套件版本、定期關注資安通報的習慣,才是保護自己心血的最有效防線。
nmp 官方下架惡意版本後,仍須留意已經拉下來的版本
CyberQ 認為,目前 npm 官方已經緊急將這幾個惡意版本下架,所以如果現在才執行 npm install axios,通常不會拉到有毒的版本。但最大的風險在於前幾天已經構建好的 Docker Image 或是已經在線上伺服器跑起來的服務。
如果你們公司的專案有做自動化部署(CI/CD),而且沒有鎖死小版本號(例如寫成 ^1.14.0),那前兩天系統可能就已經自動幫你把這個炸彈拉下來並部署到正式環境了。建議你可以順便檢查一下最近幾天的 CI/CD log,確認構建時拉取的 Axios 版本號,確保萬無一失。







