Skip to content

CVE-2026-42533: Verified Reproduction

CVE-2026-42533: NGINX ASLR-enabled network RCE

CVE-2026-42533 is verified against nginx/nginx · github. Affected versions: NGINX security index lists Open Source 0.9.6-1.31.2 as vulnerable and 1.31.3+ or 1.30.4+ as not vulnerable. F5 also lists NGINX Plus 37.0.0.1-37.0.2.1 fixed in 37.0.3.1 and R33-R36 fixed in R36 P7. Vulnerability class: RCE. This critical reproduction includes runnable sandbox proof, artifacts, and a plain-text agent view under REPRO-2026-00308.

REPRO-2026-00308 nginx/nginx · github RCE Jul 27, 2026 CVE entry ↗ .txt
Severity
CRITICAL
Confidence
HIGH
Reproduced in
71m 44s
Tool calls
368
Spend
$28.17
01 · Overview

What Is CVE-2026-42533?

CVE-2026-42533 is a critical-severity RCE vulnerability affecting nginx/nginx NGINX security index lists Open Source 0.9.6-1.31.2 as vulnerable and 1.31.3+ or 1.30.4+ as not vulnerable. F5 also lists NGINX Plus 37.0.0.1-37.0.2.1 fixed in 37.0.3.1 and R33-R36 fixed in R36 P7.. Pruva has independently reproduced it and publishes a verified, runnable proof-of-concept (reproduction REPRO-2026-00308).

02 · Severity & CVSS

CVE-2026-42533 Severity

CVE-2026-42533 is rated critical severity.

CRITICAL threat level

Critical — the most severe class — typically remotely exploitable with severe impact. Treat as an emergency.

03 · Affected Versions

Affected nginx/nginx Versions

nginx/nginx · github versions NGINX security index lists Open Source 0.9.6-1.31.2 as vulnerable and 1.31.3+ or 1.30.4+ as not vulnerable. F5 also lists NGINX Plus 37.0.0.1-37.0.2.1 fixed in 37.0.3.1 and R33-R36 fixed in R36 P7. are affected.

How to Reproduce CVE-2026-42533

$ pruva-verify REPRO-2026-00308
or curl -O https://pruva.dev/api/v1/reproductions/REPRO-2026-00308/artifacts/bundle/repro/reproduction_steps.sh && chmod +x reproduction_steps.sh && ./reproduction_steps.sh
Run in a VM or disposable container. This exploits a real vulnerability.
06 · Proof of Reproduction

Proof of Reproduction for CVE-2026-42533

Remote code execution — reproduced
  • reached the target end-to-end
  • full exploit chain demonstrated
  • on the real production code path
  • high confidence
  • the upstream fix blocks the same trigger
Trigger

crafted HTTP/TCP requests from separate Docker network attacker containers to NGINX listeners 19321 and 19331

Attack chain
  1. GET /leak... disclosure, POST /spray heap shaping, crafted GET /api/<percent-encoded URI> overflow, victim connection close, GET /rce-proof marker retrieval
Runnable proof: reproduction_steps.sh
Captured evidence: fixed commit statfixed commit detail
How the agent worked 882 events · 368 tool calls · 1h 12m
1h 12mDuration
368Tool calls
211Reasoning steps
882Events
27Dead-ends
Agent activity over 1h 12m
Policy
1
Support
23
Repro
592
Judge
63
Variant
199
Verify
1
0:0071:44

Root Cause and Exploit Chain for CVE-2026-42533

Versions: the vulnerable source commit validated by this run is 28219209e0b4f9e155fd8bd91ab81b8ac30628f2; the fixed negative-control commit is b767540492e8c79a58bc26034d3bab2f708b7bd1.

CVE-2026-42533 is a memory-safety flaw in NGINX complex script/value evaluation for HTTP variables. A crafted configuration using regular-expression captures, a volatile map, slice/proxy processing, and a second overflow path can make the length pass and value-copy pass observe different capture contents. In the vulnerable commit, NGINX allocates based on the stale/short length and then copies attacker-controlled bytes from a later capture state, enabling a heap overwrite through real HTTP/TCP requests. The current run confirmed the full claimed impact: ASLR-enabled remote command execution from a separate network peer against NGINX commit 28219209e0b4f9e155fd8bd91ab81b8ac30628f2, with fixed commit b767540492e8c79a58bc26034d3bab2f708b7bd1 failing closed as a negative control.

  • Package/component affected: NGINX Open Source, HTTP script/variable processing (src/http/ngx_http_script.c, related capture handling), exercised through the HTTP map, regex location, slice, and proxy modules.
  • Affected versions: the vulnerable source commit validated by this run is 28219209e0b4f9e155fd8bd91ab81b8ac30628f2; the fixed negative-control commit is b767540492e8c79a58bc26034d3bab2f708b7bd1.
  • Risk level and consequences: critical. A remote peer able to send crafted HTTP requests to the configured NGINX listener can turn the capture length/value mismatch into target-worker command execution when the vulnerable configuration preconditions are present. The proof command writes a harmless target-local marker and retrieves it via HTTP.

Impact Parity

  • Disclosed/claimed maximum impact: code_execution through the NGINX HTTP/TCP listener while ASLR remains enabled.
  • Reproduced impact from this run: code_execution. The final successful run created two run-unique target-local command markers in two fresh vulnerable NGINX workers and retrieved them through /rce-proof; the same attacker procedure against the fixed commit did not create markers.
  • Parity: full.
  • Not demonstrated: no stronger impact than command execution is claimed. Sanitizers, debugger-derived addresses, and disabled ASLR were not used by the primary proof.

Root Cause

The vulnerable path is a time-of-check/time-of-use mismatch inside NGINX script complex-value evaluation. During the length calculation pass, a variable/capture can have one size, but during the value-copy pass a volatile map and regex capture sequence can change the capture contents. The vulnerable code trusts the previously calculated size and does not check that later copied script-variable bytes still fit into the allocated destination buffer. The fixed commit b767540492e8c79a58bc26034d3bab2f708b7bd1 adds ngx_http_script_check_length and corresponding checks so a later value that exceeds the computed allocation is rejected instead of being copied past the destination.

Fix commit: https://github.com/nginx/nginx/commit/b767540492e8c79a58bc26034d3bab2f708b7bd1

Reproduction Steps

  1. Run bundle/repro/reproduction_steps.sh from any directory. The script uses PRUVA_ROOT when set and otherwise resolves the bundle root relative to itself.
  2. The script reads bundle/project_cache_context.json, reuses /pruva/project-cache/repo when the prepared cache is available, resolves and archives the exact vulnerable and fixed commits, verifies that the vulnerable source lacks ngx_http_script_check_length and the fixed source contains it, and builds hardened Docker images for each tree.
  3. It generates the calibrated NGINX configuration and Python support programs at runtime, starts real NGINX target containers with ASLR enabled, and launches separate attacker containers on a Docker network. The attacker obtains same-worker disclosure data only through the NGINX HTTP listener, performs heap shaping and the overflow through HTTP/TCP, and retrieves /rce-proof through the NGINX listener.
  4. Expected evidence of reproduction is two vulnerable trial logs containing EXPLOIT_CONFIRMED marker=..., marker files whose contents match the run-unique marker, two fixed negative-control observations with marker_present=false, and verifier evidence showing different randomized mappings between vulnerable trials.

Evidence

Primary evidence locations written by the script:

  • bundle/logs/reproduction_steps.log — full build and runtime transcript.
  • bundle/logs/randomize_va_space.log — kernel ASLR setting (2 in the final successful run).
  • bundle/logs/patch_hunk_verification.log — vulnerable/fixed patch-hunk verification.
  • bundle/logs/vulnerable-1.attacker.log and bundle/logs/vulnerable-2.attacker.log — separate network peer exploit transcripts.
  • bundle/logs/vulnerable-1.marker and bundle/logs/vulnerable-2.marker — marker bodies retrieved through /rce-proof.
  • bundle/logs/vulnerable-1.maps and bundle/logs/vulnerable-2.maps — verifier process maps captured after service start and not used as exploit inputs.
  • bundle/logs/vulnerable-1.mitigations and bundle/logs/vulnerable-2.mitigations — readelf/ldd/file hardening and loader evidence.
  • bundle/logs/fixed-1.attacker.log, bundle/logs/fixed-2.attacker.log, and fixed observation JSON files — fixed negative-control evidence.
  • bundle/logs/proof_summary.json — structured summary combining vulnerable and fixed observations.
  • bundle/repro/runtime_manifest.json — runtime-backed manifest for the TCP peer entrypoint.

Key excerpts from the final successful run:

  • VULNERABLE_ATTEMPT_CONFIRMED role=vulnerable attempt=1 marker=PRUVA_42533_VULNERABLE_1_1784957428_6AA723FB
  • VULNERABLE_ATTEMPT_CONFIRMED role=vulnerable attempt=2 marker=PRUVA_42533_VULNERABLE_2_1784957430_DAEE2FFD
  • FIXED_NEGATIVE_CONTROL_OK role=fixed attempt=1 attacker_rc=1 marker_present=false marker=PRUVA_42533_FIXED_1_1784957432_FBE549D5
  • FIXED_NEGATIVE_CONTROL_OK role=fixed attempt=2 attacker_rc=1 marker_present=false marker=PRUVA_42533_FIXED_2_1784957441_7727967F
  • ASLR verifier: vulnerable executable mapping bases differ: 0x55d551e45000 vs 0x564f17702000

bundle/logs/proof_summary.json records confirmed=true, vulnerable build ID b9bb7df3e0b9ec8f3ea74448be3d11ca926eef45, vulnerable executable SHA-256 4b01896ce3283476723310e42a8f39f78d45c560309f546b90d7bd9e87a3d4a7, fixed build ID 2b428651367e71c91898b797fb532cb5a18ac8e2, and fixed executable SHA-256 16e242c2965b52ce9dfce13158d7812845e700e15d968c9f35dc2bf568fffdf1.

Recommendations / Next Steps

  • Upgrade to a release or commit containing b767540492e8c79a58bc26034d3bab2f708b7bd1 or equivalent script length validation.
  • Keep HTTP variable/capture regression tests that force length-pass and copy-pass capture divergence, including volatile map, regex location, proxy, and slice module combinations.
  • Treat configurations that combine attacker-controlled regex captures with complex variable expansion as high-risk until patched.
  • Maintain hardening such as PIE, NX, RELRO, stack canaries, and ASLR, but do not rely on those mitigations as a substitute for the length check.

Additional Notes

The reproduction is idempotent: it creates fresh Docker containers and a fresh Docker network per run, removes them on exit, rebuilds or verifies exact source commits, and writes fresh current-run evidence under bundle/logs/ and bundle/repro/. The final script version was executed successfully after all edits. Historical exploit-knowledge records were used only as reference mechanics; all verdict-relevant evidence comes from current script executions.

CVE-2026-42533 Reproduction Transcript

The agent's step-by-step process — every tool call, every handoff, the moment the exploit fired.

Full session Replay every step — scrub the timeline or play it back.

Event 1/40
0:002:18
0:00
session startedgpt-5.5 · CVE-2026-42533 · REPRO-20
0:05
0:06
web search
0:14
0:15
web search
0:18
0:24
0:25
web search
0:29
0:36
0:39
1:52
1:52
1:52
1:52
1:52
1:52
extract_facts
no facts extracted
1:55
1:55
supportclaim_contract
2:03
2:08
2:08
2:08
2:08
2:18
2:18
2:18
2:18

Artifacts and Evidence for CVE-2026-42533

Scripts, logs, diffs, and output captured during the reproduction.

bundle/logs/fixed-1.randomization-base0.0 KB
bundle/repro/reproduction_steps.sh33.8 KB
bundle/logs/fixed-2.leak-backend.log0.0 KB
bundle/logs/fixed-2.exploit-backend.log1.2 KB
bundle/repro/validation_verdict.json1.0 KB
bundle/repro/rca_report.md7.4 KB
bundle/repro/runtime_manifest.json3.2 KB
bundle/logs/reproduction_steps.log2.2 KB
bundle/logs/fixed-1.attacker.log6.3 KB
bundle/logs/fixed-2.attacker.log6.3 KB
bundle/logs/fixed-2.mitigations99.5 KB
bundle/logs/aslr_verifier.log0.1 KB
bundle/logs/patch_hunk_verification.log0.1 KB
bundle/logs/fixed_commit_stat.log0.3 KB
bundle/logs/fixed_commit_detail.log2.1 KB
bundle/logs/nginx_conf_sha256.log0.1 KB
bundle/logs/vulnerable-docker-build.log1.7 KB
bundle/logs/fixed-docker-build.log1.6 KB
bundle/logs/vulnerable-1.healthcheck.log0.2 KB
bundle/logs/vulnerable-1.target.inspect.json8.9 KB
bundle/logs/vulnerable-1.worker-pid0.0 KB
bundle/logs/vulnerable-1.build-id0.0 KB
bundle/logs/vulnerable-1.binary-sha2560.1 KB
bundle/logs/vulnerable-1.randomization-base0.0 KB
bundle/logs/vulnerable-1.attacker.inspect.json8.2 KB
bundle/logs/vulnerable-1.proof-http-response0.3 KB
bundle/logs/vulnerable-1.container.log0.1 KB
bundle/logs/vulnerable-1.nginx-error.log0.7 KB
bundle/logs/vulnerable-1.leak-backend.log0.0 KB
bundle/logs/vulnerable-1.exploit-backend.log1.9 KB
bundle/logs/vulnerable-2.healthcheck.log0.2 KB
bundle/logs/vulnerable-2.target.inspect.json8.9 KB
bundle/logs/vulnerable-2.worker-pid0.0 KB
bundle/logs/vulnerable-2.build-id0.0 KB
bundle/logs/vulnerable-2.binary-sha2560.1 KB
bundle/logs/vulnerable-2.randomization-base0.0 KB
bundle/logs/vulnerable-2.attacker.inspect.json8.2 KB
bundle/logs/vulnerable-2.proof-http-response0.3 KB
bundle/logs/vulnerable-2.container.log0.1 KB
bundle/logs/vulnerable-2.nginx-error.log0.7 KB
bundle/logs/vulnerable-2.leak-backend.log0.0 KB
bundle/logs/vulnerable-2.exploit-backend.log1.9 KB
bundle/logs/fixed-1.healthcheck.log0.2 KB
bundle/logs/fixed-1.target.inspect.json8.9 KB
bundle/logs/fixed-1.worker-pid0.0 KB
bundle/logs/fixed-1.maps5.7 KB
bundle/logs/fixed-1.build-id0.0 KB
bundle/logs/fixed-1.binary-sha2560.1 KB
bundle/logs/fixed-1.attacker.inspect.json8.1 KB
bundle/logs/fixed-1.marker0.1 KB
bundle/logs/fixed-1.proof-http-response0.3 KB
bundle/logs/fixed-1.container.log0.1 KB
bundle/logs/fixed-1.nginx-error.log7.1 KB
bundle/logs/fixed-1.leak-backend.log0.0 KB
bundle/logs/fixed-1.exploit-backend.log1.2 KB
bundle/logs/fixed-2.healthcheck.log0.2 KB
bundle/logs/fixed-2.target.inspect.json8.9 KB
bundle/logs/fixed-2.worker-pid0.0 KB
bundle/logs/fixed-2.maps5.7 KB
bundle/logs/fixed-2.build-id0.0 KB
bundle/logs/fixed-2.binary-sha2560.1 KB
bundle/logs/fixed-2.randomization-base0.0 KB
bundle/logs/fixed-2.attacker.inspect.json8.1 KB
bundle/logs/fixed-2.marker0.1 KB
bundle/logs/fixed-2.proof-http-response0.3 KB
bundle/logs/fixed-2.container.log0.1 KB
bundle/logs/fixed-2.nginx-error.log7.1 KB
08 · How to Fix

How to Fix CVE-2026-42533

Coming soon

Step-by-step mitigation and hardening guidance for CVE-2026-42533 — configuration checks, workarounds where no patch exists, and how to verify you're protected — is on the way.

10 · FAQ

FAQ: CVE-2026-42533

Is CVE-2026-42533 exploitable?

Yes. Pruva independently reproduced CVE-2026-42533 in nginx/nginx and verified the exploit fires end-to-end in a sandboxed environment. A runnable proof-of-concept script and the full agent transcript are on this page (reproduction REPRO-2026-00308).

How severe is CVE-2026-42533?

CVE-2026-42533 is rated critical severity.

Which versions of nginx/nginx are affected by CVE-2026-42533?

nginx/nginx NGINX security index lists Open Source 0.9.6-1.31.2 as vulnerable and 1.31.3+ or 1.30.4+ as not vulnerable. F5 also lists NGINX Plus 37.0.0.1-37.0.2.1 fixed in 37.0.3.1 and R33-R36 fixed in R36 P7. is affected by CVE-2026-42533.

How can I reproduce CVE-2026-42533?

Pruva provides a verified reproduction script on this page. Download it and run it inside an isolated environment such as a container or virtual machine — never against production. The reproduction was confirmed end-to-end by Pruva's automated agents.

Is the CVE-2026-42533 reproduction verified?

Yes. Pruva reproduced CVE-2026-42533 with high confidence in a sandboxed environment, capturing the full agent transcript and artifacts as evidence.
11 · References

References for CVE-2026-42533

Authoritative sources for CVE-2026-42533 — official vulnerability databases and the upstream advisory. Pruva's reproduction verifies the issue firsthand; these are the primary records to corroborate it.