NGINX Rift:揭露一個 18 年歷史的堆疊溢位漏洞
在全球最廣泛使用的網頁伺服器之一中,發現了一個被稱為「NGINX Rift」(CVE-2026-42945)的嚴重安全漏洞。此缺陷是一個堆疊溢位,已潛伏 18 年未被偵測,影響 0.6.27 至 1.30.0 版本。
此發現凸顯了即使是最成熟的軟體專案,也必須持續進行安全稽核的重要性。即使在高度穩定的程式碼基礎中,遺留的程式路徑——特別是涉及 rewrite 與 set 指令的部分——也可能讓關鍵漏洞隱藏近二十年。
漏洞的技術本質
此漏洞屬於堆疊溢位。從技術角度來說,堆疊溢位發生在程式寫入的資料超過堆積分配記憶體區塊的容量,從而允許攻擊者覆寫相鄰的記憶體。
根據 DepthFirst 發現團隊的說法,當 NGINX 設定中同時使用 rewrite 與 set 指令的特定組合時,會觸發此漏洞。雖然並非所有 NGINX 安裝都會受到影響,但在 1.30.0 之前使用這些指令進行複雜路由或變數賦值的系統皆有風險。
利用方式與 ASLR 的角色
此漏洞最關鍵的面向之一是它如何繞過現代安全緩解措施,例如位址空間布局隨機化(ASLR)。
雖然 F5(NGINX 的擁有者)表示程式碼執行主要在 ASLR 被停用的系統上可能實現,但發現此缺陷的研究人員基於 NGINX 架構提出了相反的論點。
NGINX 採用多程序架構,工作程序由單一主程序 fork 而來。由於此設計,每個子工作程序的記憶體空間皆被完整複製,形成不同工作程序之間的確定性堆疊布局。
"如果我們的利用失敗並導致工作程序崩潰,主程序會直接產生一個記憶體布局完全相同的新工作程序。這讓我們能安全地多次嘗試,直至成功,而不必擔心工作程序崩潰後改變記憶體布局。"
這種確定性特質使攻擊者能透過逐位元組覆寫指標,逐步洩漏 ASLR 偏移量,理論上即使在啟用 ASLR 的系統上也可能利用此漏洞。
影響與緩解措施
CVE-2026-42945 的發現嚴重提醒我們,軟體專案成熟度的表面穩定性並不保證安全性。
緩解方法
如果您使用的 NGINX 版本介於 0.6.27 與 1.30.0 之間,建議採取以下措施:
- 更新 NGINX: 主要建議是升級至 NGINX/F5 提供的最新修補版本。
- 檢查設定: 若無法立即更新,請檢查設定檔中是否使用了
rewrite與set指令。若能以其他方式取代或實作替代路由邏輯,則可降低風險。
社群成員指出,使用 rewrite 與 set 的模式在經典的 PHP 應用程式(透過 NGINX 部署)中相當常見,因而使這些遺留部署特別容易受到攻擊。