5 點看懂 NPM 套件防火牆
-
GitHub 推出 NPM 套件防火牆(Package Firewall)公開預覽版,設在開發環境與上游套件儲存庫之間。
-
攻擊者常在 NPM 套件中加入惡意安裝指令碼,即使尚未使用套件功能,安裝時就可能竊取開發環境中的憑證。
-
防護機制包括查詢惡意套件資料庫、檢查 SLSA 建置來源證明是否消失、偵測新增的安裝指令碼。
-
企業可設定「版本冷卻期」,新發布的套件須經過指定天數才能安裝,預設為 1 天。
-
目前僅支援 NPM 套件,開放 GitHub Enterprise Cloud 客戶使用,公開預覽期間免費。
GitHub 推出 NPM 套件防火牆(Package Firewall)公開預覽版。企業可在開發者電腦、CI/CD 建置環境或 AI 程式開發代理下載套件時,依安全政策攔截高風險版本,降低惡意套件在安裝階段竊取憑證的風險。目前已開放 GitHub Enterprise Cloud 客戶使用。
這項產品要解決的威脅相當具體:攻擊者可能在 NPM 套件中加入惡意安裝指令碼,即使開發者尚未使用套件的主要功能,惡意指令仍可能在安裝時執行,竊取開發環境中的憑證。換句話說,危險不在於你呼叫了哪個函式,而在於你按下安裝的那一刻。
GitHub 新推出的防火牆設在開發環境與上游套件儲存庫之間。除了處理實際的下載請求,它也會檢查查詢套件名稱、版本等資訊的請求。企業管理員須先設定安全政策,再將開發環境、CI/CD 系統或 AI 代理的套件下載來源改為防火牆;套件下載請求經過防火牆時,系統便會依政策判斷是否放行。
防護機制包含多層檢查。首先是查詢 GitHub Advisory Database 中的惡意套件與漏洞通報,可封鎖已知惡意套件,並依企業設定的漏洞嚴重程度阻擋有漏洞的版本。
其次,防火牆會比較套件版本,檢查原本具有的 SLSA 建置來源證明是否在新版中消失。SLSA 是一種軟體供應鏈安全框架,用來證明軟體成品確實是由宣稱的原始碼建置出來的;如果新版突然拿掉了這份證明,就可能是套件遭到竄改的警訊。
第三,防火牆會檢查新版是否新增了在安裝時執行的指令碼,例如 preinstall 或 postinstall,避免在安裝階段執行未經預期的指令。這正是針對前述「安裝即中招」攻擊手法的直接防禦。
另一項機制是版本冷卻期。企業可設定新發布的套件必須經過指定天數才能安裝,避免剛上架的版本立即進入開發與建置環境。官方文件顯示,冷卻期預設為 1 天,可設定 1 至 365 天,也能關閉。這個設計的邏輯是:惡意套件通常在上架後很快就會被社群或資安業者發現並下架,強制等待一段時間,就能避開大多數的短命惡意版本。
如果必要套件遭到阻擋,使用者可提出例外申請,由企業管理員審核是否允許下載,兼顧安全與開發效率。
目前 Package Firewall 僅支援 NPM 套件,適用 GitHub Enterprise Cloud 及其資料駐留版本客戶,公開預覽期間免費。GitHub 表示,未來正式上市後將依使用量收費,計費方式類似 GitHub Actions,但尚未公布具體費率。
把時間軸拉長來看,這項產品反映了軟體供應鏈攻擊已經從偶發事件變成常態威脅。過去一段時間,從惡意 NPM 套件竊取憑證、到針對 AI 程式開發代理的投毒攻擊,攻擊者越來越傾向於從開發工具鏈下手。GitHub 把防禦做進套件下載的必經之路上,等於承認了一個現實:要求每個開發者自己判斷每個套件是否安全,已經不切實際,必須由平台層統一把關。
接下來值得觀察的是,GitHub 是否會把這套機制擴展到其他語言的套件生態系,以及正式收費後的採用率。對企業來說,公開預覽期間免費試用,正好可以用來自家 CI/CD 流程先跑一輪,評估誤攔率與開發流程的磨合成本。