Skip to content
KitploitKITPLOIT
工具漏洞利用博客
Log in
提交
工具漏洞利用博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

订阅源联系隐私© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
CVE-2026-42533-Config-Scanner — 静态配置扫描器,用于标记易受 complex_value 两遍捕获覆盖漏洞(正则映射 + 正则捕获 → 堆溢出 / 信息泄露)影响的 Nginx 配置。 | Kitploit
工具/GitHubGitHub/0xcyberstan/cve-2026-42533-config-scanner
静态分析漏洞扫描器代码分析配置审计Web安全DevSecOps错误配置
GitHub0xcyberstan/cve-2026-42533-config-scanner

CVE-2026-42533-Config-Scanner

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

静态配置扫描器,用于标记易受 complex_value 两遍捕获覆盖漏洞(正则映射 + 正则捕获 → 堆溢出 / 信息泄露)影响的 Nginx 配置。

查看仓库
295403个月前Kitploit 审核通过

nginx capture-clobber 扫描器

一个只读静态扫描器,用于标记易受 complex_value 两遍捕获覆盖(capture-clobbering)缺陷类影响的 nginx 配置(F5/nginx SIRT 公告,2026 年 7 月)。它解析你的配置,并报告存在漏洞的模式及其原因和位置。它不利用任何漏洞,也不接触正在运行的服务器。

单文件,仅使用标准库,Python 3.6+。

漏洞的完整说明: https://cyberstan.co.uk/nginx-rce/

该缺陷

nginx 分两遍构建许多指令值。LEN 遍测量长度并分配缓冲区,然后 VALUE 遍写入其中。正则捕获($1 到 $9,或命名捕获 (?P<name>...))从每请求的共享状态中读取。匹配键为正则表达式的 map 会在其变量被求值的那一刻执行一次新的 PCRE 匹配,而该匹配会覆盖共享的捕获状态。如果某个捕获在 LEN 遍中被测量,随后在 VALUE 遍重写该捕获之前运行了一个正则 map,两遍就会不一致:

  • 覆盖使值比测量的更长:堆缓冲区溢出(攻击者控制的越界写入)
  • 覆盖使值比测量的更短:未初始化的堆返回给客户端(libc/堆指针信息泄露)

当 map 输入受攻击者影响($request_body、$http_*、$arg_*、$uri、$ssl_preread_server_name 等)时,两个方向都可远程触发。

什么算作存在漏洞

当以下所有条件以可利用的顺序落入同一个两遍缓冲区时,扫描器会标记某个 location 或 server:

  1. 捕获来源:正则 location ~、server_name ~、rewrite、if (... ~ ...),或带捕获组的正则 map。
  2. 覆盖触发器:一个 map(http 或 stream),其匹配键为 ~ 或 ~* 正则,并通过其输出变量被引用。
  3. 同时使用捕获引用和正则 map 变量的两遍汇点:
    • 单值指令(return、set、add_header、proxy_method、proxy_pass、rewrite、index 等):两个引用位于同一个值中。
    • param/header 系列(proxy_set_header、proxy_set_body、fastcgi_param、scgi_param、uwsgi_param、grpc_set_header):这些指令为整个系列每请求构建一个缓冲区,因此两个引用可以位于同一 location 中的不同指令里。
  4. 顺序:捕获必须在正则 map 之前被求值。正则 map 只运行一次并缓存,因此 map 在捕获之前读取的是一致状态,不存在漏洞。扫描器会将这些报告为已排除(安全但脆弱,请勿重排顺序)。

用法

# scan a single config (follows include directives by default)
python3 nginx_capture_clobber_scan.py /etc/nginx/nginx.conf

# scan a directory (uses nginx.conf if present, else all *.conf)
python3 nginx_capture_clobber_scan.py /etc/nginx/

# scan several roots
python3 nginx_capture_clobber_scan.py site-a.conf site-b.conf

# machine-readable output
python3 nginx_capture_clobber_scan.py /etc/nginx/nginx.conf --json

# do not expand include directives
python3 nginx_capture_clobber_scan.py /etc/nginx/nginx.conf --no-includes

选项

选项作用
--json输出 JSON 报告而非文本。
--no-includes不跟随 include 指令。

退出码

退出码含义
0未发现存在漏洞的配置。
1至少发现一个存在漏洞的配置。
2用法错误(未提供路径,或未找到任何路径)。

可用于 CI,因为存在漏洞的配置会以非零状态退出:

python3 nginx_capture_clobber_scan.py /etc/nginx/nginx.conf || echo "review needed"

输出

文本模式会为每个发现项打印:文件和行号、所在作用域、sink 指令、涉及的 capture 和 map 变量、触发该发现的 map,以及一行原因说明。被清除的部分会列出安全顺序的共存情况。--json 会生成:

{
  "vulnerable": true,
  "findings": [
    {
      "file": "/etc/nginx/conf.d/api.conf",
      "line": 12,
      "scope": "location ~ ^/api/(.+)$",
      "directive": "proxy (family buffer)",
      "captures": ["$1"],
      "map_vars": ["$is_bot"],
      "triggers": ["$is_bot <- regex-map on $http_user_agent [nginx.conf:30]"],
      "reason": "..."
    }
  ],
  "cleared_safe_order": [],
  "regex_maps": [],
  "missing_includes": []
}

修复它发现的问题

  1. 应用厂商补丁(nginx 1.30.4 稳定版 / 1.31.3 主线版,NGINX Plus R36 P7 / 37.0.3.1)。这是唯一完整的修复方案。该补丁添加了一个边界保护(ngx_http_script_check_length()),防止 VALUE 阶段写入超出已分配的缓冲区,并根据实际写入的字节数而非 LEN 阶段的测量值来计算返回的字符串长度,从而同时封堵了溢出和信息泄露两个方向。
  2. 临时配置加固(纵深防御,不能替代补丁):
    • 不要在同一 location 或缓冲区中同时引用正则 map 变量和 $1 到 $9 或命名捕获引用。
    • 不要在多个正则 map 中复用同一个 (?P<name>...) 组。
    • 将捕获引用和正则 map 引用排除在同一 proxy_set_header 或 fastcgi_param 系列之外。

局限性

  • 静态分析:它读取的是配置,而非运行时行为。它无法解析 由动态 set 变量产生的值。
  • 无法读取的 include 目标(例如本地不存在的绝对路径)会在 missing_includes 下报告,而不是被静默跳过。请在配置能够解析的主机上运行它,以获得完整覆盖。
  • 被标记的“捕获先于 map”命中项在运行时可能被化解,如果该 map 变量在同一请求中已被更早求值(它此时已被缓存)。扫描器仍会报告这些项,这是安全自扫描的保守选择。

参考

漏洞分析与利用链: https://cyberstan.co.uk/nginx-rce/

下载工具