Skip to main content

Nginx-poolslip Vulnerability Enables DoS and Code Execution Attacks — Patch Now

Critical CVE-2026-9256 in NGINX rewrite module allows remote unauthenticated heap buffer overflow, potentially leading to denial of service or code execution.

May 23, 2026 5 min read kiotocloud Team
nginxvulnerabilitysecuritycve

A newly disclosed flaw in one of the world's most widely deployed web servers is forcing administrators into another emergency patch cycle.

Tracked as CVE-2026-9256 and publicly nicknamed nginx-poolslip, the vulnerability affects both NGINX Plus and NGINX Open Source, and can be triggered by a remote, unauthenticated attacker over plain HTTP.

Technical Details

The vulnerability resides in the ngx_http_rewrite_module, the same component implicated in the recent "NGINX Rift" flaw (CVE-2026-42945). The condition arises when a rewrite directive uses a regex pattern with distinct, overlapping PCRE capture groups, such as ^/((.\*))$ paired with a replacement string referencing multiple captures like $1$2 in a redirect or arguments context.

Under these conditions, an attacker sending crafted requests can trigger a heap buffer overflow (CWE-122) in the NGINX worker process. NGINX uses a dedicated memory pool for each request and releases it all at once when finished. Inside that pool structure, NGINX maintains a linked list of cleanup handlers. If an attacker can overwrite or redirect that handler pointer, pool destruction becomes a control-flow hijack opportunity.

Impact

  • At minimum: exploitation crashes and restarts the worker process, producing a denial-of-service condition.
  • At worst: code execution is possible on systems where ASLR is disabled or can be bypassed.

The flaw carries a High/8.1 (CVSS v3.1) and Critical/9.2 (CVSS v4.0) rating.

Affected Versions and Fixes

Product Vulnerable Versions Fixed Versions
NGINX Open Source 0.1.17 – 1.30.1, 1.31.0 1.30.2, 1.31.1
NGINX Plus R32 – R36, 37.0.0 R36 P5, R32 P7, 37.0.1.1

Mitigation

If immediate patching isn't feasible, F5 recommends replacing unnamed captures with named captures in every affected rewrite directive. For example, reference $1 and $2 as (?<user_id>...) and (?<section>...) by name in the replacement string.

With proof-of-concept activity already circulating, organizations should patch without delay.