← 返回文章列表

nginx CVE-2026-42945 對主機的影響,我需要升級或更換主機嗎?

Meta 描述: 深入分析 nginx CVE-2026-42945 漏洞影響範圍、風險評估,針對 reverse proxy 主機提供具體升級建議與安全性防護措施。


目錄

  1. 漏洞概述
  2. 受影響的模組與配置
  3. 哪些 nginx 網站風險較高?
  4. Reverse Proxy 主機風險評估
  5. 升級建議與防護措施
  6. 結論:需要更換主機嗎?

漏洞概述

CVE-2026-42945 是 nginx 中一個存在約 18 年的嚴重安全漏洞,影響 ngx_http_rewrite_module 模組。此漏洞 CVSS 評分高達 9.2(Critical),可能被利用來執行** denial of service (DoS)** 攻擊,在特定條件下甚至可能導致遠端程式碼執行 (RCE)

受影響版本

產品 受影響版本 修復版本
NGINX Open Source 0.6.27 - 1.30.0 1.30.1 / 1.31.0
NGINX Plus R32 - R36 R36 P4 / R32 P6
NGINX Gateway Fabric 1.3.0 - 1.6.2, 2.0.0 - 2.5.1 聯繫廠商
NGINX Ingress Controller 3.5.0 - 5.4.1 聯繫廠商

受影響的模組與配置

核心問題:ngx_http_rewrite_module

此漏洞存在於 nginx 的 rewrite 模組,當配置中同時使用 rewriteset 指令時可能被觸發。這種配置模式在以下場景中非常常見:

  • API Gateway 配置
  • Reverse Proxy 設定
  • URL 重寫規則
  • 條件式路由

漏洞原理

漏洞源於 nginx 內部腳本引擎的狀態處理不一致:

  1. 第一階段:計算需要分配的記憶體大小(使用未跳脫的 URI 長度)
  2. 第二階段:實際寫入數據(包含跳脫後的 +& 等字元)

rewrite 規則包含 ? 時,is_args 旗標會保持設定狀態,導致計算的緩衝區大小與實際寫入的數據大小不匹配,進而引發堆積緩衝區溢位 (heap buffer overflow)


哪些 nginx 網站風險較高?

高風險配置特徵

  • 使用 rewrite + set 組合:特別是包含正規表達式捕獲群組 ($1, $2 等) 的規則
  • API Gateway 架構:大量使用 URL 重寫來路由請求到後端服務
  • 複雜的條件式路由:根據請求參數、header 或 cookie 進行動態路由
  • 公開暴露的 nginx 服務:可直接從網際網路訪問的 nginx 實例
  • 未啟用 ASLR 的系統:地址空間配置隨機化被禁用時,RCE 風險顯著提高

低風險配置

  • 純靜態檔案服務(未使用 rewrite)
  • 簡單的 reverse proxy(僅使用 proxy_pass,無 rewrite)
  • 內部網路服務(未暴露至公網)
  • 已升級至 1.30.1+ 或 1.31.0+ 版本

Reverse Proxy 主機風險評估

單純 Reverse Proxy 的風險等級

如果您的 nginx 主機僅作為 reverse proxy,風險評估如下:

配置類型 DoS 風險 RCE 風險 建議行動
純 proxy_pass(無 rewrite) 常規升級即可
proxy_pass + 簡單 rewrite 優先升級
proxy_pass + 複雜 rewrite/set 立即升級
暴露公網 + ASLR 禁用 極高 緊急處理

關鍵發現

根據 DepthFirst AI 的研究,nginx 的多程序架構反而使攻擊更容易:

  • Worker 程序從 master 程序繼承幾乎相同的記憶體佈局
  • 如果 exploit 失敗導致 worker 崩潰,master 會自動產生新的 worker(相同記憶體佈局)
  • 攻擊者可重複嘗試直到成功,無需擔心記憶體佈局改變

但是…

安全研究人員 Kevin Beaumont 指出,實際利用需要高度特定的條件

  • 必須使用特定的 rewrite 配置模式
  • 攻擊者需知道或發現受影響的端點
  • 公開的 RCE 概念驗證是在 ASLR 禁用的環境下測試

AlmaLinux 在獨立驗證後表示:DoS 攻擊簡單可靠,但 RCE 在 ASLR 啟用時並不容易


升級建議與防護措施

立即行動清單

  • 檢查 nginx 版本:執行 nginx -v 確認當前版本
  • 檢查配置文件:搜尋 rewriteset 指令的使用情況
  • 優先升級:升級至 1.30.1 或 1.31.0+(Open Source)
  • 啟用 ASLR:確保系統層級的 ASLR 防護已啟用
  • 臨時緩解:如無法立即升級,將未命名捕獲群組 ($1, $2) 改為命名捕獲

升級步驟

# 1. 檢查當前版本
nginx -v

# 2. 備份配置文件
cp -r /etc/nginx /etc/nginx.backup

# 3. 升級 nginx(Ubuntu/Debian)
apt update
apt install --only-upgrade nginx

# 4. 驗證升級後版本
nginx -v

# 5. 測試配置
nginx -t

# 6. 重新載入(無停機)
nginx -s reload

無法升級時的臨時措施

如果因業務限制無法立即升級,可考慮:

  1. 修改 rewrite 規則:使用命名捕獲群組替代未命名捕獲

    #  vulnerable
    rewrite ^/api/(.*)$ /backend/$1 last;
    
    #  safer
    rewrite ^/api/(?P<endpoint>.*)$ /backend/$endpoint last;
    
  2. 限制請求大小:在 nginx 配置中加入

    client_max_body_size 10m;
    client_body_buffer_size 128k;
    
  3. 啟用 WAF:使用 ModSecurity 或其他 WAF 過濾惡意請求


結論:需要更換主機嗎?

不需要更換主機

絕大多數情況下,您只需要升級 nginx,無需更換主機。 此漏洞是軟體層級的問題,與硬體無關。

何時需要考慮更換?

  • 主機已老舊到無法運行新版 nginx(如極舊的 CPU 架構)
  • 作業系統已停止支援,無法安裝安全更新
  • 業務需求要求硬體層級的安全隔離

最終建議

  1. DoS 風險是真實的:即使 RCE 利用困難,DoS 攻擊已可可靠執行
  2. 升級是最佳解方:nginx 1.30.1+ 已修復此漏洞
  3. Reverse Proxy 也需重視:即使僅作反向代理,若使用 rewrite 規則仍有風險
  4. 無需恐慌但需行動:不必更換主機,但應盡快安排升級時程

參考來源:


作者: LinkPortal 編輯團隊
分類: 網站管理
更新日期: 2026-06-11