返回首页 >

18年积弊:NGINX脚本引擎堆缓冲区溢出可致远程代码执行

2026-05-15 11:00   奇安信威胁情报中心

  2026年初,安全研究组织depthfirst通过其自动化代码审计系统对NGINX源代码进行深度扫描,在六小时内识别出五个安全缺陷,其中四个已获得NGINX官方确认并分配CVE编号。这一发现揭示了NGINX核心组件中存在的严重内存损坏问题,攻击者可利用这些漏洞实现远程代码执行。

  关键CVE清单:

  CVE编号严重性漏洞类型影响组件CVE-2026-42945Critical (9.2)堆缓冲区溢出ngx_http_rewrite_moduleCVE-2026-42946High (8.3)过度内存分配ngx_http_scgi_module, ngx_http_uwsgi_moduleCVE-2026-40701Medium (6.3)释放后使用ngx_http_ssl_moduleCVE-2026-42934Medium (6.3)越界读取ngx_http_charset_module

  CVE-2026-42945作为该批次中最严重的漏洞,CVSS评分高达9.2,漏洞代码于2008年引入,跨越近18年未被发觉,影响范围覆盖NGINX Open Source 0.6.27至1.30.0版本以及NGINX Plus R32至R36版本。该漏洞的利用门槛较低,在禁用ASLR的环境中已验证可实现可靠的远程代码执行。

  技术根因分析脚本引擎两遍处理机制

  NGINX配置中的rewrite指令和set指令是构建API网关和请求路由的核心组件。rewrite指令允许通过正则表达式修改请求URI,当替换字符串包含问号时,NGINX将问号后的内容作为查询字符串处理。set指令则用于将值赋给自定义变量,支持捕获组的引用,这两个指令的组合使用极为普遍。

  NGINX内部通过脚本引擎(script engine)优化这些操作。在配置解析阶段,脚本引擎将这些指令编译为操作序列;在运行时,通过两遍(two-pass)机制执行:首先计算最终字符串的总长度,从内存池分配精确大小的缓冲区;随后执行复制操作将实际数据写入新分配的缓冲区。这种设计避免了多次小额内存分配的性能开销,但要求两遍之间的引擎状态保持一致。

猜你喜欢

热点新闻

{$loop_num=0}