核心安全威脅背景與 DoS 攻擊風險
Node.js 發布了更新,修復了其所謂的嚴重安全問題,該問題影響「幾乎所有生產環境中的 Node.js 應用程式」,如果被成功利用,可能會引發拒絕服務 (DoS) 攻擊。Node.js 的 Matteo Collina 和 Joyee Cheung在周二的公告中表示:「Node.js/V8 會盡力嘗試通過可捕獲的錯誤來從堆疊空間耗盡中恢復,框架已經依賴於此來保證服務的可用性。」這項機制的失效意味著當前大量依賴非同步資源追蹤的現代 Web 應用程式正暴露於高風險之中。
技術缺陷解析:async_hooks 與堆疊空間耗盡
如果某個漏洞僅在使用 async_hooks 時才會出現,那麼這個嘗試就會失敗,導致 Node.js 在用戶代碼中的遞歸耗盡堆疊空間時直接退出並返回錯誤代碼 7,而不會拋出可捕獲的錯誤。這使得遞歸深度由未經清理的輸入控制的應用程序容易受到拒絕服務攻擊。其根本缺陷在於,當啟用 async_hooks 時,如果使用者程式碼中發生堆疊溢出,Node.js 會傳回代碼 7(表示內部異常處理程序執行時失敗)而不是優雅地處理異常。 Async_hooks 是一個底層 Node.js API,允許開發者追蹤非同步資源(例如資料庫查詢、計時器或 HTTP 請求)的生命週期。
受影響版本清單與生命週期結束警示
該問題還影響從 8.x(第一個引入 async_hooks 的版本)到 18.x 的所有 Node.js 版本。值得注意的是,Node.js 版本 8.0.0(代號 Carbon)於 2017 年 5 月 30 日發布。然而,這些版本仍未獲得補丁,因為它們已達到生命週期結束 (EoL) 狀態。目前針對活動分支的修復已在以下版本中解決:
- Node.js 20.20.0 (LTS)
- Node.js 22.22.0 (LTS)
- Node.js 24.13.0 (LTS)
- Node.js 25.3.0(目前版本)
修復機制與安全等級認定之挑戰
此次修復措施能夠偵測堆疊溢位錯誤,並將其重新拋出給使用者程式碼,而不是將其視為致命錯誤。此漏洞的 CVE 編號為CVE-2025-59466(CVSS 評分:7.5)。儘管該修復措施具有顯著的實際影響,但 Node.js 表示,基於以下幾個原因,他們僅將其視為一種緩解措施:
- 堆疊空間耗盡並非ECMAScript 規範的一部分。
- V8 JavaScript 引擎並不將其視為安全問題。
- 「uncaughtException」處理程序有其局限性,它被設計為異常處理的最後手段。
生態系影響評估:從 Next.js 到 APM 工具
Node.js 表示:雖然這只是針對一個未明確行為的漏洞修復,但由於其對整個生態系統影響廣泛,我們還是決定將其包含在安全更新中。React Server Components、Next.js 以及幾乎所有 APM 工具都會受到影響。此次修復將改善開發者體驗,並使錯誤處理更加可預測。這意味著若不進行更新,任何使用現代高效能框架的應用程式,在面對惡意遞歸請求時,都可能直接崩潰而非優雅降級。
同期發布的其他高風險安全修復
同時,Node.js 也發布了針對另外三個高風險漏洞(CVE-2025-55131、CVE-2025-55130 和 CVE-2025-59465)的修復程序,這些漏洞分別可能被利用來實現資料外洩或損壞、使用精心建構的相對符號連結(symlink)拒絕路徑來實現資料外洩或損壞、使用精心構造的相對符號連結(symlink)以及這些路徑來拒絕主動。這進一步突顯了 Node.js 核心與檔案系統交互邏輯中的潛在安全隱患。
產業防禦建議與長期緩解策略
鑑於此漏洞的嚴重性,建議框架/工具使用者和伺服器託管服務提供者盡快更新。同時,建議程式庫和框架的維護者採取更強大的防禦措施,以防止堆疊空間耗盡,並確保服務可用性。開發者應實施嚴格的遞歸深度限制,並針對所有外部輸入進行清理(Sanitization),以防止未經授權的堆疊操作。
總結
Node.js 此次的安全更新不僅是解決一個技術 Bug,更是對其非同步處理機制穩定性的一次重要加固。在開發環境中,廣泛使用的 SSR(伺服器端渲染)技術與微服務架構皆重度依賴 Node.js,及時更新執行環境並建立完善的異常監控機制,是確保企業數位服務不中斷的關鍵。
資料來源:https://thehackernews.com/2026/01/critical-nodejs-vulnerability-can-cause.html
分析 Node.js 最新揭露的嚴重安全漏洞 CVE-2025-59466,該漏洞涉及 async_hooks 與堆疊空間耗盡處理機制,影響幾乎所有生產環境下的 Node.js 應用程式。