前端掃毒風暴
最近半個月,npm 社區接連出了幾件大事:好幾個知名包被人篡改了,維護者的賬號也被釣魚攻擊騙走,甚至連每周有上億次下載的 form-data 都被曝出嚴重漏洞。
這些問題不是只影響前端項目,很多 Node.js 后端服務、自動化構建流程也都可能被波及,嚴重的甚至能讓攻擊者遠程控制你的電腦,偷走憑證、改掉 Git 項目。
下面我們就來一起看看這三起主要事件的來龍去脈,建議你認真看完,順手檢查一下你項目里用到的依賴。
事件一:釣魚攻擊,多個包被劫持
7 月 19 日,有攻擊者搭了個釣魚網站 npnjs.com(和正版的 npmjs.com 只差一個字母),然后發郵件給一些開源包的維護者,引導他們登錄這個假網站。結果不好包作者的賬號被盜,攻擊者用這些賬號發布了帶惡意代碼的新版本。

惡意代碼行為
這些惡意版本注入了 postinstall 鉤子,通過 rundll32 加載偽裝為 node-gyp.dll 的惡意動態庫(Windows 專用),具備遠程代碼執行能力。攻擊代碼隱蔽,可能在本地開發或 CI 環境中無感執行。
釣魚郵件
↓
維護者泄露 npm token
↓
攻擊者發布惡意版本
↓
項目自動升級依賴
↓
本地/CI 執行 install hook
↓
執行惡意代碼,遠程控制風險分析
eslint-*屬于構建工具類依賴,通常通過自動更新引入,傳播極快;- 自動化流水線如 GitHub Actions、Jenkins 等難以察覺異常;
- 一旦中招,攻擊者可能獲得權限執行任意腳本,劫持構建結果。
官方應對
- 包維護者第一時間吊銷令牌,標記惡意版本為棄用;
- npm 安全團隊協助下架污染版本;
事件二:is 包被劫持,波及多個依賴
另一起更具破壞性的攻擊發生在 is 包身上。這個下載量高達 280 萬/周 的小工具包突然發布了多個惡意版本,成為攻擊者理想的“傳染源”。該包作者 Jordan Harband 稱其 npm 賬戶被盜,攻擊者發布了兩個高度混淆的惡意版本。
包名 | 惡意版本 | 周下載量 |
is | 3.3.1, 5.0.0 | 280 萬 |
攻擊細節
- 使用 94 個字符的自定義編碼表 +
new Function執行混淆 JS; - 建立 WebSocket 通信通道,開啟遠程 shell 會話;
- 收集
.npmrc、主機名、平臺信息、Git 倉庫地址等數據; - 具備跨平臺兼容性:Windows、Linux、macOS、Node.js 12+;
響應與修復
- 包作者配合 npm 團隊移除惡意版本;
- Bluesky、X、Reddit 等社交平臺同步發布警報;
事件三:form-data 存在嚴重漏洞
這次不只是“被劫持”,還有真實漏洞。
form-data 是處理表單上傳的核心庫,廣泛用于 axios、node-fetch 等網絡請求模塊。7 月中,社區發現其存在 HTTP 參數污染(HPP) 風險。
受影響版本:
版本范圍 | 安全版本 |
< 2.5.4 | 升級至 2.5.4 |
3.0.0 – 3.0.3 | 升級至 3.0.4 |
4.0.0 – 4.0.3 | 升級至 4.0.4 |
問題根源:
form-data生成 multipart 邊界時使用了Math.random(),這是一個偽隨機函數;- 攻擊者可預測邊界值,通過構造請求實現參數注入、偽造;
- 會導致后端邏輯錯誤、身份混淆、數據泄露等問題;
修復方式
- 包作者將隨機數算法改為
crypto.randomBytes,提升安全性; - 建議轉用 Node.js 18+ 原生
FormData實現,減少依賴。
開發者該怎么做?
我們無法阻止攻擊者釣魚,但可以降低被波及的概率:
- 啟用 npm 賬戶的兩步驗證(2FA)
- 鎖定依賴版本(
~/^不安全!) - 定期執行
npm audit fix/ 使用第三方審計工具 - 盡量避免自動更新依賴到新版本
最后的思考
npm 不只是包管理工具,而是現代前端、Node.js 項目的“血液系統”。攻擊者只需劫持一環,就能牽動整條供應鏈。
更重要的是:這些攻擊方式越來越自動化、腳本化、規模化,任何一次粗心的 npm install,都可能埋下災難伏筆。
安全,不只是后端的事。作為前端開發者,我們也必須時刻保持警惕。


















