作者:默思編輯部 發布:2026-09-22
npm套件管理工具的v12版本正式導入一系列架構性的安全防護機制,核心變革是預設封鎖套件安裝過程中自動執行的腳本(install scripts),同時禁止Git依賴直接從自訂網址解析、禁止套件從外部網址或HTTPS壓縮檔案來源直接安裝,這一連串變革反映出npm生態系正對持續猖獗的供應鏈攻擊,展開一次架構層級的防禦轉向。
過去多數npm供應鏈攻擊案例(包括先前介紹過的Shai-Hulud蠕蟲與IronWorm惡意程式),共同的攻擊手法核心,都是利用套件安裝過程中自動執行的preinstall或postinstall腳本,在開發者毫無察覺的情況下,於背景執行竊取憑證、植入後門等惡意行為。這類腳本原本的設計初衷,是讓套件維護者能在安裝階段執行必要的編譯、環境設定等合法操作,但這項便利性功能長期以來也被攻擊者大量濫用,成為npm生態系中最常見、也最容易被忽略的攻擊入口。
npm v12將安裝腳本的執行方式,從過去的「預設允許、開發者需主動停用」,改為「預設封鎖、開發者需主動允許」——這個看似微小的預設值調整,實際上帶來了相當實質的安全防護提升:多數開發者在日常操作中,很少會主動檢視每個套件安裝過程中是否真的需要執行腳本,預設封鎖的設計,等同於將「安全」設為系統的預設行為,而不是仰賴每位開發者主動採取額外的防護措施,大幅降低了因為疏忽而暴露於惡意腳本攻擊風險的機率。
除了封鎖安裝腳本,Dependabot(GitHub提供的自動化相依套件更新工具)也新增三天的預設冷卻期,意即當某個套件釋出新版本後,Dependabot不會立即自動開啟版本更新的合併請求(PR),而是等待三天的觀察期,這段時間足以讓資安社群與自動化偵測工具,有機會發現並標記出剛發布不久、可能夾帶惡意程式碼的新版本。這項機制直接針對攻擊者常見的「趁新版本剛發布、偵測機制尚未反應過來的空窗期快速散布惡意程式碼」這種攻擊時間差策略。值得留意的是,若新版本是為了修補明確的安全漏洞而發布,則不受這項冷卻期限制,確保緊急安全更新依然能快速觸達使用者。
除了上述變革,「信任發布」(trusted publishing)機制也持續擴大採用範圍——這項機制讓套件維護者能透過更安全的身分驗證方式發布新版本,降低套件維護者帳號憑證遭竊取後被用來散布惡意版本的風險,繼npm之後,NuGet也於稍早跟進導入這項機制,反映出主流套件生態系正逐漸形成一套更趨嚴謹一致的供應鏈安全防護共識。
對於日常使用npm進行開發的工程師而言,這次架構性變革意味著部分既有的開發或建置流程,可能因為預設封鎖安裝腳本而出現非預期的行為變化——建議開發團隊在升級到npm v12之前,先行盤點既有專案所依賴的套件中,是否有真正必要且合法的安裝腳本需求,並學習如何在確認來源可信的前提下,有選擇性地開放特定套件的腳本執行權限,而不是為了圖方便而全面重新開啟預設封鎖機制,喪失這次安全升級原本要達成的防護效果。
想建立扎實的供應鏈安全與程式基礎,歡迎參考Python課程。