Nginx-poolslip CVE-2026-9256 — Pre-Auth Heap Buffer Overflow in NGINX ngx_http_rewrite_module (Patch Bypass of CVE-2026-42945 'NGINX Rift')
Nginx-poolslip CVE-2026-9256 (TL-2026-0573), also tracked as nginx-poolslip, is a critical-severity software vulnerability scored CVSS 9.2, first published 2026-05-23. It has no confirmed attribution, affects F5 NGINX Open Source, references 1 CVE (CVE-2026-9256), maps to 16 MITRE ATT&CK techniques (T1005, T1027, T1059), and is covered by 9 detection rules and 15 indicators of compromise.
Key facts for TL-2026-0573
- Threat ID
- TL-2026-0573
- Also known as
- nginx-poolslip, poolslip
- Severity
- CRITICAL
- CVSS
- 9.2 (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H)
- Status
- ACTIVE
- Category
- VULNERABILITY
- First published
- 2026-05-23
- Last reviewed
- 2026-05-23
- Attribution confidence
- NONE
- Motivation
- UNKNOWN
- Target sectors
- technology, saas, financial-services, government, healthcare, e-commerce, telecommunications, media, education
- Target regions
- Global, North America, Europe, Asia-Pacific
- Detection rules
- 9
- Indicators of compromise
- 15
Malware and tooling in Nginx-poolslip CVE-2026-9256
Malware and tooling: poolslip-poc (public PoC repository name observed across multiple forks)
F5 disclosed CVE-2026-9256 ('nginx-poolslip'), a pre-authentication heap buffer overflow in NGINX's ngx_http_rewrite_module affecting NGINX Open Source 0.1.17–1.31.0 and NGINX Plus R32–R37.0. A crafted HTTP request matching a rewrite directive with overlapping PCRE capture groups (e.g. `^/((.*))$` with replacement `$1$2`) corrupts cleanup-handler pointers inside the per-request memory pool. Minimum impact is unauthenticated worker DoS; remote code execution is achievable where ASLR is disabled or has been bypassed via a side-channel. The fix for the earlier 'NGINX Rift' (CVE-2026-42945) did not remediate the underlying pool attack surface, leaving the data plane of millions of internet-facing reverse proxies, API gateways, and Kubernetes ingress controllers exposed.
How Nginx-poolslip CVE-2026-9256 works
Overview -------- CVE-2026-9256, nicknamed 'nginx-poolslip', is a critical heap buffer overflow in NGINX's ngx_http_rewrite_module, the regex-based URL rewriting engine that ships enabled by default in every NGINX Open Source and NGINX Plus build. The bug lives in how the rewrite engine constructs the replacement string after a PCRE match: when a `rewrite` (or `if (...)` condition) directive contains overlapping PCRE capture groups whose backreferences are referenced more than once in the replacement template, the code path miscomputes the destination length and writes past the end of a buffer allocated from the per-request `ngx_pool_t`. The overwrite targets the cleanup-handler singly-linked list (`ngx_pool_cleanup_t`) that lives in the same arena, allowing an attacker to clobber a function-pointer (`handler`) and an arbitrary `data` argument that NGINX invokes during normal request teardown. The minimum impact is a SIGSEGV in the worker; given a partial pointer leak or a non-PIE worker binary, the function-pointer overwrite gives a clean control-flow hijack primitive without ROP gadget hunting.
Vulnerability mechanics ----------------------- The ngx_http_rewrite_module compiles each `rewrite` directive at config-parse time and stores a `ngx_http_rewrite_t` execution program. At request time, NGINX walks the program, calls PCRE2 to match against the URI, then iterates the parsed replacement script to size and emit the new URI into a pool-allocated buffer. The sizing pass and the emission pass share a helper that walks the capture-group offset table returned by PCRE. The bug is a classic time-of-check / time-of-use mismatch between sizing and emission: when a replacement references the same nested capture twice (e.g. `$1$2` with pattern `^/((.*))$`, where group 2 is wholly contained inside group 1), the sizing pass de-duplicates the spans, but the emission pass emits both spans verbatim, producing an output longer than the allocation. The overflow lands in adjacent pool metadata — specifically the `cleanup` list head of the `ngx_pool_t` struct that the same allocation is carved from. Because the cleanup list is walked during `ngx_destroy_pool()` at request close, the corrupted `cleanup->handler(cleanup->data)` call is reached unconditionally, even if the response is already on the wire.
Exploit chain ------------- 1. Reconnaissance — scan for `Server: nginx`, fingerprint the version through `error_log` artifacts or banner; verify the target hosts a rewrite directive that references overlapping captures (configs published in major frameworks — Ghost, MediaWiki, OwnCloud, Bitnami, several K8s ingress charts — ship vulnerable patterns by default). 2. Trigger — issue a single HTTP request whose URI path is crafted to maximise the overlap delta. Public PoC submitted to F5 used `GET /AAAA...A HTTP/1.1` with 7,936 bytes of `A` against a server with `rewrite ^/((.*))$ /backend/$1$2 last;`. This yields a 7,936-byte overflow into the pool arena. 3. DoS path — without any further work the worker process segfaults on `ngx_destroy_pool()`; NGINX master respawns the worker, but a sustained request flood prevents any worker from completing a request, producing a hard service outage at <100 req/s. 4. RCE path — where ASLR is disabled (some embedded appliances, older musl/Alpine builds without `-fPIE`, or after a side-channel info leak), the attacker overwrites `cleanup->handler` with the address of `system` (libc) or `ngx_execute_proc` (NGINX) and points `cleanup->data` at attacker-controlled bytes earlier in the URI buffer. The hijack fires inside the worker's address space with the worker user's privileges (typically `nginx`/`www-data`). 5. Post-exploitation — workers commonly hold TLS private keys in memory for keepalive sessions, upstream credentials in shared zones, and JWT signing keys for proxied APIs; web shells are commonly dropped under `/var/cache/nginx/` because that path is writable by the worker user on default packaging.
Relationship to CVE-2026-42945 (NGINX Rift) ------------------------------------------- The earlier 'NGINX Rift' patch (October 2026) corrected a different overflow in the same module — specifically a length miscalculation in the `set $var` directive when `$var` was referenced in a regex backreference. F5's fix was narrowly scoped to the `set` evaluator and did not audit the shared sizing helper used by both `rewrite` replacement and `set` evaluation. CVE-2026-9256 reaches the identical helper through the `rewrite` replacement path, demonstrating that the original remediation was incomplete. The cleanup-handler corruption primitive is identical, so any tooling, detection, or simulation written for NGINX Rift will also detect nginx-poolslip with minor input changes.
Affected products ----------------- - NGINX Open Source: 0.1.17 through 1.30.1; 1.31.0 (mainline) - NGINX Plus: R32 through R36, plus the 37.x preview series - NGINX Ingress Controller: 4.13.x and earlier (transitively, via base NGINX) - F5 BIG-IP Next CNF (uses NGINX data plane): affected if running NGINX < 1.30.2 - Downstream forks: OpenResty (≤ 1.31.0.1), Tengine (≤ 3.2.5), Angie (≤ 1.10.0) — confirmed by maintainers as affected
Fixed versions: NGINX OSS 1.30.2 (stable) and 1.31.1 (mainline); NGINX Plus R36 P5, R32 P7, R37.0.1.1.
Exposure footprint ------------------ Shodan exposes ~250M reachable NGINX banners at disclosure time, with ~38% on versions vulnerable to CVE-2026-9256. Approximately 78% of Kubernetes clusters indexed by SecurityScorecard run the ingress-nginx controller in a pinned chart that has not received the 1.30.2 base-image refresh. Most-impacted sectors: SaaS application delivery, e-commerce checkout flows, government public services, healthcare patient portals.
Defensive posture ----------------- F5 advisory rates this Critical with CVSS v4.0 9.2 and v3.1 8.1. CISA added CVE-2026-9256 to KEV within 48 hours of disclosure based on credible reports of opportunistic mass-scanning. Immediate action: upgrade to fixed versions; if upgrade is not possible within the window, remove any `rewrite` or `if` directive that uses nested PCRE captures (`((...))` form) and reload. A WAF rule blocking requests where the URI path matches the configured rewrite regex AND exceeds the original directive's largest captured span gives a high-quality compensating control until patching is complete.
MITRE ATT&CK techniques used in TL-2026-0573
Collection
Defense Evasion
T1027 Obfuscated Files or Information
Execution
T1059 Command and Scripting Interpreter; T1106 Native API
Privilege Escalation
T1068 Exploitation for Privilege Escalation
Command and Control
T1071 Application Layer Protocol
Discovery
T1082 System Information Discovery
Initial Access
T1190 Exploit Public-Facing Application
Credential Access
T1212 Exploitation for Credential Access; T1552 Unsecured Credentials
Impact
T1489 Service Stop; T1499 Endpoint Denial of Service
Persistence
T1505 Server Software Component
Resource Development
Reconnaissance
Affected products and versions in Nginx-poolslip CVE-2026-9256
- F5 — NGINX Open Source
Vulnerable versions: 0.1.17–1.30.1; 1.31.0
Fixed in: 1.30.2; 1.31.1 - F5 — NGINX Plus
Vulnerable versions: R32–R36; R37.0
Fixed in: R36 P5; R32 P7; R37.0.1.1 - Kubernetes SIG-Network — ingress-nginx
Vulnerable versions: ≤ 4.13.x
Fixed in: 4.14.0 - F5 — BIG-IP Next CNF
Vulnerable versions: All builds shipping NGINX < 1.30.2
Fixed in: BIG-IP Next CNF builds with NGINX 1.30.2+ - OpenResty — OpenResty
Vulnerable versions: ≤ 1.31.0.1
Fixed in: 1.31.0.2 - Alibaba — Tengine
Vulnerable versions: ≤ 3.2.5
Fixed in: 3.2.6 - WebServer LLC — Angie
Vulnerable versions: ≤ 1.10.0
Fixed in: 1.10.1
Remediation for Nginx-poolslip CVE-2026-9256
Patches
- F5 Security Advisory K000148273 — NGINX OSS 1.30.2 / 1.31.1
- F5 Security Advisory K000148274 — NGINX Plus R36 P5 / R32 P7 / R37.0.1.1
- ingress-nginx Helm chart v4.14.0 base image refresh
- OpenResty 1.31.0.2 backport, Tengine 3.2.6, Angie 1.10.1
Immediate actions
- Upgrade NGINX Open Source to 1.30.2 (stable) or 1.31.1 (mainline)
- Upgrade NGINX Plus to R36 P5, R32 P7, or R37.0.1.1
- Bump ingress-nginx Helm chart to v4.14.0+ to pull the patched NGINX base image
- Audit nginx.conf for `rewrite` and `if` directives that contain overlapping PCRE capture groups — temporary mitigation: remove the inner group or refactor to non-capturing `(?:...)`
- Deploy ModSecurity / NGINX App Protect rule blocking requests whose URI length exceeds the longest legitimate capture span for each rewrite directive
Workarounds
- Remove all `rewrite` and `if` directives that reference overlapping PCRE capture groups and reload NGINX (`nginx -t && nginx -s reload`)
- Front the NGINX tier with a WAF that rejects URIs longer than the largest legitimate captured span per rewrite directive
- Disable the ngx_http_rewrite_module entirely where the proxy does not rely on regex rewriting (`./configure --without-http_rewrite_module` at build time)
- Lower `keepalive_timeout` and increase `worker_processes` so individual worker crashes are absorbed by the master more gracefully during exploitation attempts
Longer-term hardening
- Standardise on NGINX upgrades via base-image refresh rather than in-place package upgrades to avoid forgotten worker reloads
- Add NGINX rewrite-directive linting to CI for all reverse-proxy and ingress configs
- Adopt PIE-enabled NGINX builds across the fleet to make the RCE path require an additional info-leak
- Move TLS termination off the rewrite-enabled instance where feasible, or run the rewrite tier behind a separate TLS-terminating tier whose worker user cannot read upstream credentials
- Enable per-worker resource limits (`worker_rlimit_nofile`, systemd cgroup limits) so a crash loop cannot saturate the host
CVEs associated with Nginx-poolslip CVE-2026-9256
Weaknesses (CWE) in Nginx-poolslip CVE-2026-9256
CWE-122, CWE-787
Timeline of Nginx-poolslip CVE-2026-9256
- F5 SIRT receives an internal report from an unnamed external researcher demonstrating that the NGINX Rift remediation can be bypassed through the rewrite replacement path using overlapping PCRE capture groups.
- F5 reproduces the bypass on NGINX Open Source 1.30.1 and confirms worker SIGSEGV; RCE feasibility study begins.
- F5 develops a patch that re-uses the sizing pass output as the authoritative length for the emission pass; backports to all supported NGINX Plus releases.
- ingress-nginx maintainers cut v4.14.0 with the patched base image; Kubernetes downstream advisories follow.
- F5 publishes K000148273 / K000148274; NGINX OSS 1.30.2 / 1.31.1 and NGINX Plus R36 P5 / R32 P7 / R37.0.1.1 ship simultaneously.
- Threadlinqs Intelligence publishes TL-2026-0573 with full exploit-chain analysis, MITRE mapping, and detection coverage for SPL, KQL, and Sigma.
- CISA adds CVE-2026-9256 to the Known Exploited Vulnerabilities catalog with a 14-day FCEB remediation deadline.
- Internet-wide scanners (GreyNoise, Censys honeypots) observe a step-change in HTTP requests probing for overlapping-capture rewrite directives across ports 80/443/8080/8443.
- A minimal PoC (single curl one-liner triggering worker crash) is published to multiple security mailing lists and GitHub gists within 12 hours of disclosure.
- As of 2026-05-29, CVE-2026-9256 (nginx-poolslip) remains a live, actively exploited critical pre-auth NGINX heap overflow; multiple vendors (Indusface 5/27, Orca, Security Boulevard) confirm in-the-wild exploitation, public PoC, and CISA KEV listing. Patches shipped 5/22 but ~38% of ~250M exposed servers stay vulnerable and several F5 products still lack fixes.
- F5 patches CVE-2026-42945 'NGINX Rift' (set-directive overflow) — fix is narrowly scoped to the set evaluator and does not audit the shared sizing helper used by rewrite replacement.
Sources cited for Nginx-poolslip CVE-2026-9256
- Nginx-poolslip Vulnerability Enables DoS and Code Execution Attacks — Patch Now!
- F5 Security Advisory K000148273 — NGINX OSS CVE-2026-9256
- F5 Security Advisory K000148274 — NGINX Plus CVE-2026-9256
- NVD entry CVE-2026-9256
- CISA KEV — CVE-2026-9256 added
- ingress-nginx security release v4.14.0
- NGINX changelog 1.30.2 / 1.31.1
- Related: CVE-2026-42945 NGINX Rift (TL-2026-0517)
- ngx_http_rewrite_module source — github.com/nginx/nginx
Threats related to Nginx-poolslip CVE-2026-9256
- F5 Patches Multiple NGINX Vulnerabilities: Heap Overflow, Memory Disclosure, and Use-After-Free (CVE-2026-42533, CVE-2026-60005, CVE-2026-56434)
- Fastjson RCE (≤ 1.2.83) — Active Exploitation Detected (ThreatBook XVE-2026-39684)
- Fastjson 1.x RCE (CVE-2026-16723) — Gadget-Free Deserialization Bypass Actively Exploited in Spring Boot Fat-JAR Deployments
- Fastjson2 AutoType Whitelist Bypass Leads to Unauthenticated Remote Code Execution (Fastjson2 <= 2.0.62)
- Fastjson 1.2.x Gadget-Free Remote Code Execution via @JSONType Remote Class Load (Versions 1.2.68-1.2.83)
- CVE-2025-53521: F5 BIG-IP APM Unauthenticated Remote Code Execution via Stack-based Buffer Overflow
Detection coverage for TL-2026-0573
As of 2026-05-23, Threadlinqs Intelligence publishes 9 detection rule(s) for TL-2026-0573 across Splunk SPL, Microsoft KQL and Sigma, covering 15 indicator(s) of compromise. The whole corpus is readable without an account; a free account unlocks full detection query text in Splunk SPL, Microsoft KQL and Sigma; paid tiers add raw indicator values, correlation and the MCP server. Threadlinqs MCP server · View plans.