NGINX漏洞预警:18年老洞可RCE,PoC已公开

admin 2026-05-16 05:01:11 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: NGINX被曝出存在4个安全漏洞,其中CVE-2026-42945为存在18年的堆溢出漏洞,影响0.6.27至1.30.0版本,可在特定配置下通过特制URI触发远程代码执行或服务拒绝。文档提供了漏洞详情、影响版本检测命令、配置排查方法及修复建议,强调需立即升级至1.30.1以上版本或使用命名捕获组临时缓解。 综合评分: 87 文章分类: 漏洞分析,漏洞预警,应急响应,WEB安全,解决方案


cover_image

NGINX 漏洞预警:18 年老洞可 RCE,PoC 已公开

猎户攻防实验室

2026年5月14日 19:37 北京

在小说阅读器读本章

去阅读

5月13日,安全研究机构 DepthFirst 的自动化漏洞扫描系统一次性发现了 NGINX 的 4 个安全漏洞。其中最严重的 CVE-2026-42945(NGINX Rift) 影响范围横跨 0.6.27 到 1.30.0,存在了将近 18 年,官方 PoC 已公开。

漏洞清单

| CVE | 严重度 | 模块 | 影响 | | — | — | — | — | | CVE-2026-42945 | 🔴 Critical 9.2 | ngx_http_rewrite_module | 堆溢出 → RCE/DoS | | CVE-2026-42946 | 🟠 High 8.3 | ngx_http_scgi_module / uwsgi_module | ~1TB 内存分配 → worker 崩溃(DoS) | | CVE-2026-40701 | 🟡 Medium 6.3 | ngx_http_ssl_module | TLS 关闭后 OCSP DNS use-after-free | | CVE-2026-42934 | 🟡 Medium 6.3 | ngx_http_charset_module | UTF-8 跨缓冲区越界读(off-by-one) |

修复版本:1.30.1+(稳定分支)/ 1.31.0+(主线)

重点分析

CVE-2026-42945(NGINX Rift)—— 堆溢出可RCE

这是本次最严重的漏洞。当配置中 rewrite 的替换串包含 ?,且后续通过 set/if/rewrite 引用了正则捕获组(如 $1$2)时,攻击者发送特制 URI 即可触发堆溢出。可导致 worker 进程崩溃,在绕过 ASLR 的条件下可实现远程代码执行。

受影响配置示例:

rewrite ^/old/(.*)$ /new?param=$1;    # 替换串含 ? 且引用了 $1
set $my_var $1;                        # 引用捕获组

CVE-2026-42946 —— SCGI/uwsgi 内存耗尽

触发后可导致约 1TB 的内存分配,直接打挂 worker 进程。所有使用 SCGI 或 uWSGI 后端的部署均受影响。

PoC / 利用脚本

CVE-2026-42945 的 PoC 已公开:

  • • 官方 PoC:https://github.com/DepthFirstDisclosures/Nginx-Rift

关于 PoC 的实际利用能力说明: 该 PoC 主要在 ASLR 关闭的环境(如 DepthFirst 提供的 Docker 测试环境)下能稳定实现 RCE。在真实生产环境(默认开启 ASLR 的 Linux 系统)上,大概率只能实现可靠的 DoS 崩溃,完整 RCE 需要额外技巧。请仅在自己可控的测试环境中使用,严禁用于任何未经授权的服务器,否则属于违法行为。

排查方法

第 1 步:资产清点 — 确认 NGINX 版本

# 本地最准确检查
nginx -v
nginx -V

# 远程通过 Header 检查
curl -sI https://your-domain.com/ 2>/dev/null | grep -i "^Server:"

# 批量扫描(推荐)
while read host; do
  echo -n "$host | "
  curl -skI --max-time 5 "https://$host" 2>/dev/null | grep -i "^Server:" || echo "无法访问或 Server 头已隐藏"
done&nbsp;< host_list.txt

判定标准:

  • • 版本在 0.6.27 ~ 1.30.0 之间(含 NGINX Plus R32~R36)→ 受影响,立即升级
  • • 版本 ≥ 1.30.1 或 ≥ 1.31.0 → 已修复

第 2 步:模块与编译选项检查

# 查看已编译模块
nginx -V 2>&1 |&nbsp;tr&nbsp;' '&nbsp;'\n'&nbsp;| grep --color=never -E&nbsp;'module|http_rewrite|http_scgi|http_uwsgi|http_charset|http_ssl'

第 3 步:配置触发条件检查(最核心!)

# 查找含 ? 的 rewrite + 匿名捕获组
grep -rnE&nbsp;'rewrite\s+.*\?.*\$[0-9]'&nbsp;/etc/nginx/ --include="*.conf"

# 查找所有匿名捕获组使用
grep -rnE&nbsp;'\$([1-9][0-9]?)'&nbsp;/etc/nginx/ --include="*.conf"

# 检查 SCGI/uWSGI(CVE-2026-42946)
grep -rnE&nbsp;'scgi_pass|uwsgi_pass'&nbsp;/etc/nginx/ --include="*.conf"

第 4 步:日志异常检查

# worker 崩溃记录
grep -E&nbsp;"exited on signal|segfault|signal 11|worker process"&nbsp;/var/log/nginx/error.log |&nbsp;tail&nbsp;-30

# 可疑 URI 请求
grep -E&nbsp;"(\+|%26|%25)"&nbsp;/var/log/nginx/access.log |&nbsp;tail&nbsp;-50

修复建议

首选:立即升级 NGINX

# CentOS / RHEL
yum update nginx

# Ubuntu / Debian
apt update && apt install nginx

# Docker
docker pull nginx:1.31.0

# 验证
nginx -v &nbsp;&nbsp;# 确保 >= 1.30.1

临时缓解(无法立即升级时)

针对 CVE-2026-42945,最有效的办法是把匿名捕获组改成 named captures

# 推荐写法
rewrite&nbsp;^/users/(?<user_id>[0-9]+)/profile/(?<section>.*)$&nbsp;/profile.php?id=$user_id&tab=$section&nbsp;last;

参考链接:

  • • DepthFirst 官方技术分析https://github.com/DepthFirstDisclosures/Nginx-Rift
  • • F5 安全公告 K000161019https://my.f5.com/manage/s/article/K000161019
  • • NGINX 安全公告https://nginx.org/en/security_advisories.html

免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:猎户攻防实验室 《NGINX 漏洞预警:18 年老洞可 RCE,PoC 已公开》

评论:0   参与:  0