NGINX漏洞CVE-2026-42945:URL伪静态严重RCE漏洞简单修复
2026年5月13日,F5官方披露NGINX存在严重远程代码执行漏洞 CVE-2026-42945 (代号"NGINX Rift"),CVSS v4.0评分高达 9.2分 (严重)。该漏洞潜伏于NGINX代码库长达18年,影响从2008年发布的0.6.27版本至2026年1月发布的1.30.0版本的所有NGINX开源版及Plus商业版,约占全球互联网网站服务器份额的三分之一。 公开概念验证(PoC)代码已在漏洞披露同日发布,全球攻击面正在被主动扫描 。
漏洞根源在于 ngx_http_rewrite_module 模块的脚本引擎。当 rewrite 指令的替换字符串中含有 ?(问号)时,引擎内部一个名为 is_args 的标志位会被置为 1 且不会重置。
这个模块被大量使用在伪静态方面,通过这个漏洞,攻击者可让Nginx进程崩溃无法提供服务,甚至被远程操控。
利用条件:
在 Nginx 的配置中,必须存在一个 rewrite 指令,并且该指令同时满足:
1. 使用了未命名的 PCRE 正则捕获(例如 $1, $2 等)。
2. 其替换字符串中包含问号(?)。
3. 在此 rewrite 指令之后,紧跟着另一个 rewrite、if 或 set 指令。
解决方法:
1:Nginx版本是否在 0.6.27 至 1.30.0 之间存在漏洞,升级到新版1.30.1、1.31.0 或更高版本即可。
2:修改现有NGINX伪静态规则。
将所有受影响 rewrite 指令中未命名捕获组($1、$2)替换为命名捕获组。
易受攻击示例:
rewrite ^/users/([0-9]+)/profile/(.*)$ /profile.php?id=$1&tab=$2 last;修复后示例:
rewrite ^/users/(?[0-9]+)/profile/(?
.*)$ /profile.php?id=$user_id&tab=$section last;
以Typecho的伪静态规则为例,当前默认的规则是:
if (!-e $request_filename) {
rewrite ^(.*)$ /index.php$1 last;
}
通过AI协助修改为:
if (!-e $request_filename) {
rewrite ^(?.*)$ /index.php$path last;
}
实际效果一样。
3:宝塔等WAF添加拦截规则:
# 防 CVE-2026-42945:拦截 rewrite ? 利用
^.*rewrite.*\?.*$ DENY
^.*\?.*\?.*$ DENY
# 超长 URI
^.{2048,}$ DENY
# 注入特征
union|select|and|or|%27|%22|%3f DENY
谷子猫博客











发表评论