CVE-2026-8711该漏洞存在于NGINX JavaScript (njs)中,当配置了js_fetch_proxy指令且使用了至少一个客户端可控的NGINX变量(如$http_*、$arg_*、$cookie_*)时,并在location中调用了ngx.fetch()操作,系统将面临安全风险。未经身份验证的攻击者可以通过发送特制的HTTP请求来利用此漏洞。该行为可能导致NGINX工作进程中发生堆缓冲区溢出,进而导致进程重启。此外,对于禁用了地址空间布局随机化(ASLR)的系统,攻击者可能利用此漏洞执行任意代码,造成严重的安全后果。
该漏洞的核心原理在于NGINX JavaScript (njs) 在处理 js_fetch_proxy 指令时,未能正确过滤或验证用户传入的变量。当管理员将 js_fetch_proxy 配置为依赖客户端可控变量(例如请求头中的 $http_host 或查询参数中的 $arg_id)时,攻击者可以构造恶意请求,将这些变量设置为包含特殊格式或超长字符串的值。当 ngx.fetch() 函数尝试利用这些代理配置发起子请求时,恶意数据会触发底层内存管理逻辑的错误。具体而言,这是一个堆缓冲区溢出漏洞。由于缺乏严格的边界检查,恶意输入的数据量超出了预设缓冲区的大小,导致相邻的内存区域被覆盖。这种内存破坏通常会直接导致 NGINX 工作进程崩溃并重启,造成拒绝服务。更为严重的是,如果目标系统未启用地址空间布局随机化(ASLR)保护机制,攻击者可以通过精确控制溢出的内容,覆盖返回地址或函数指针,从而在受影响的服务器上执行任意代码。