| NGINX ngx_http_rewrite_module 堆緩沖區溢出漏洞 | | QVD-2026-26347,CVE-2026-42945 | | | | | | | | | | | | | | | | | | | | | 危害描述:未經身份認證的攻擊者可通過發送構造的 HTTP 請求觸發漏洞,造成 Worker 進程崩潰,在特定環境下還可實現遠程代碼執行。 |
影響組件 NGINX 是一款高性能、輕量級的開源 Web 服務器與反向代理服務,廣泛用于靜態資源托管、負載均衡、API 網關、緩存加速等場景,支持 HTTP/HTTPS、WebDAV、HTTP/3 等多種協議,具備高并發、低資源占用、模塊化擴展等特性,是全球互聯網主流的服務端基礎軟件,被政企、云廠商、互聯網企業大量部署。ngx_http_rewrite_module 是 NGINX 的核心內置模塊,用于基于 PCRE 正則表達式動態修改請求 URI、實現 URL 重寫/重定向、條件路由及變量操作。
漏洞描述 近日,奇安信CERT監測到官方修復NGINX ngx_http_rewrite_module 堆緩沖區溢出漏洞(CVE-2026-42945),該漏洞源于處理特定 rewrite 指令時,由于內部標志位管理錯誤,導致堆緩沖區分配長度與實際寫入長度不一致,從而引發堆緩沖區溢出。未經身份認證的攻擊者可通過發送構造的 HTTP 請求觸發漏洞,造成 Worker 進程崩潰,在特定環境下還可實現遠程代碼執行。該漏洞影響自 0.6.27 至 1.30.0 的絕大部分 NGINX 版本,已在代碼庫中存在長達 18 年。目前該漏洞PoC和技術細節已公開。鑒于該漏洞影響范圍較大,建議客戶盡快做好自查及防護。
利用條件 在 Nginx 的配置中,必須存在一個 rewrite 指令,并且該指令同時滿足: 1. 使用了未命名的 PCRE 正則捕獲(例如 $1, $2 等)。
2. 其替換字符串中包含問號(?)。
3. 在此 rewrite 指令之后,緊跟著另一個 rewrite、if 或 set 指令。
完整原文:https://mp.weixin.qq.com/s/OiG79CNVC91Wj8C_6VJRog
使用寶塔的站長,可先點擊“軟件商店”右上角的“更新軟件列表”,然后升級 Nginx 到 1.30.1 及以上版本解決此漏洞,升級過程中站點無法訪問
如果你的 Nginx 無法升級到安全版本,可修改偽靜態規則
- rewrite ^(?<path>[^\.]*)/topic-(?<topic>.+)\.html$ $path/portal.php?mod=topic&topic=$topic last;
- rewrite ^(?<path>[^\.]*)/article-(?<aid>[0-9]+)-(?<page>[0-9]+)\.html$ $path/portal.php?mod=view&aid=$aid&page=$page last;
- rewrite ^(?<path>[^\.]*)/forum-(?<fid>\w+)-(?<page>[0-9]+)\.html$ $path/forum.php?mod=forumdisplay&fid=$fid&page=$page last;
- rewrite ^(?<path>[^\.]*)/thread-(?<tid>[0-9]+)-(?<page>[0-9]+)-(?<extra>[0-9]+)\.html$ $path/forum.php?mod=viewthread&tid=$tid&extra=page%3D$extra&page=$page last;
- rewrite ^(?<path>[^\.]*)/group-(?<fid>[0-9]+)-(?<page>[0-9]+)\.html$ $path/forum.php?mod=group&fid=$fid&page=$page last;
- rewrite ^(?<path>[^\.]*)/space-(?<type>username|uid)-(?<value>.+)\.html$ $path/home.php?mod=space&$type=$value last;
- rewrite ^(?<path>[^\.]*)/blog-(?<uid>[0-9]+)-(?<id>[0-9]+)\.html$ $path/home.php?mod=space&uid=$uid&do=blog&id=$id last;
- rewrite ^(?<path>[^\.]*)/(?<action>fid|tid)-(?<value>[0-9]+)\.html$ $path/index.php?action=$action&value=$value last;
- rewrite ^(?<path>[^\.]*)/(?<plugin>[a-z]+[a-z0-9_]*)-(?<param>[a-z0-9_\-]+)\.html$ $path/plugin.php?id=$plugin:$param last;
- if (!-e $request_filename) {
- return 404;
- }
復制代碼
如需有償服務,聯系官方有償服務QQ 1453650
|