Meta 描述: 深入分析 nginx CVE-2026-42945 漏洞影響範圍、風險評估,針對 reverse proxy 主機提供具體升級建議與安全性防護措施。
目錄
漏洞概述
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 模組,當配置中同時使用 rewrite 和 set 指令時可能被觸發。這種配置模式在以下場景中非常常見:
- API Gateway 配置
- Reverse Proxy 設定
- URL 重寫規則
- 條件式路由
漏洞原理
漏洞源於 nginx 內部腳本引擎的狀態處理不一致:
- 第一階段:計算需要分配的記憶體大小(使用未跳脫的 URI 長度)
- 第二階段:實際寫入數據(包含跳脫後的
+和&等字元)
當 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確認當前版本 - 檢查配置文件:搜尋
rewrite和set指令的使用情況 - 優先升級:升級至 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
無法升級時的臨時措施
如果因業務限制無法立即升級,可考慮:
-
修改 rewrite 規則:使用命名捕獲群組替代未命名捕獲
# vulnerable rewrite ^/api/(.*)$ /backend/$1 last; # safer rewrite ^/api/(?P<endpoint>.*)$ /backend/$endpoint last; -
限制請求大小:在 nginx 配置中加入
client_max_body_size 10m; client_body_buffer_size 128k; -
啟用 WAF:使用 ModSecurity 或其他 WAF 過濾惡意請求
結論:需要更換主機嗎?
不需要更換主機
絕大多數情況下,您只需要升級 nginx,無需更換主機。 此漏洞是軟體層級的問題,與硬體無關。
何時需要考慮更換?
- 主機已老舊到無法運行新版 nginx(如極舊的 CPU 架構)
- 作業系統已停止支援,無法安裝安全更新
- 業務需求要求硬體層級的安全隔離
最終建議
- DoS 風險是真實的:即使 RCE 利用困難,DoS 攻擊已可可靠執行
- 升級是最佳解方:nginx 1.30.1+ 已修復此漏洞
- Reverse Proxy 也需重視:即使僅作反向代理,若使用 rewrite 規則仍有風險
- 無需恐慌但需行動:不必更換主機,但應盡快安排升級時程
參考來源:
- NVD CVE-2026-42945: https://nvd.nist.gov/vuln/detail/CVE-2026-42945
- BleepingComputer: https://www.bleepingcomputer.com/news/security/18-year-old-nginx-vulnerability-allows-dos-potential-rce/
- NCSC NZ Alert: https://www.ncsc.govt.nz/alerts/cve-2026-42945-affecting-nginx/
- F5 Security Advisory
作者: LinkPortal 編輯團隊
分類: 網站管理
更新日期: 2026-06-11