NGINX Plus and NGINX Open Source
CVE-2026-15176: NGINX heap overflow when alias is combined with $request_filename
A crafted HTTP request can overflow a heap buffer in an NGINX worker on servers that pair alias with rewrite and use $request_filename. It causes a worker restart, and may allow code execution if ASLR is off or bypassed. F5 found it internally; CISA's SSVC data lists no exploitation.
Published Updated
Affected and fixed versions
| Product / branch | Fixed in |
|---|---|
| NGINX Open Source 1.31.0 to 1.31.6 | 1.31.7 or later |
| NGINX Open Source 0.1.29 to 1.30.5 | 1.30.6 or later |
| NGINX Plus 37.1.0 | 37.1.0.1 or later |
| NGINX Plus 37.0.0 to 37.0.5 | 37.0.5.1 or later |
| NGINX Plus R33 to R36 | No fixed version listed in the CVE record. Upgrade to a fixed release |
Always confirm against the vendor advisory, which lists every fixed hotfix.
What it is
NGINX can overflow a heap buffer in a worker process when it handles a crafted HTTP request for a certain kind of location. An unauthenticated attacker over the network can trigger it. The result is a worker crash and restart. If ASLR is disabled on the host, or the attacker can bypass it, code execution is possible.
The bug is in ngx_http_core_module, so it sits in the data plane only. F5 says the control plane is not exposed. F5 rates it CVSS 8.1 (v3.1) and 9.2 (v4.0), with high attack complexity because the attacker needs the right configuration to be present.
F5 found the bug itself. CISA’s SSVC data in the CVE record lists exploitation as “none” and the issue as not automatable. No public proof of concept is confirmed by a source we opened.
Am I affected?
You are exposed only if both are true:
- You run an affected version (see the table above).
- Your configuration includes one of these:
- a
locationthat usesaliastogether withrewrite, plus asetorreturndirective that references$request_filename, or $request_filenameinside an access loglog_formatdirective.
- a
Versions past End of Technical Support were not evaluated by F5, so treat them as unknown and upgrade.
To find the risky configuration, search your dumped config for the pattern:
nginx -T 2>/dev/null | grep -nE 'alias|request_filename'
Check the version with nginx -v. Include config files pulled in with include, which nginx -T prints in full.
What to do
-
Upgrade. Move NGINX Open Source to 1.31.7 or 1.30.6, and NGINX Plus to 37.1.0.1 or 37.0.5.1. If you run Plus R33 to R36, the CVE record lists no fixed version for those branches, so plan a move to a fixed release. Distribution packages may use their own version numbers; check your vendor’s changelog.
-
If you can’t upgrade tonight, remove the trigger. F5 gives two workarounds:
- Avoid
aliasin a location. - Avoid the
$request_filenamevariable, including inlog_format.
Production impact: replacing
aliaswithrootchanges how paths map to files, so test it first. Dropping$request_filenamefrom a log format removes that field from your logs. - Avoid
-
Check ASLR on hosts that run NGINX. It turns a crash into a harder code-execution problem.
-
If the server was exposed while vulnerable, review the worker crash history below. A confirmed compromise means rebuilding the host and rotating any secrets that NGINX’s user could read, such as TLS private keys and upstream credentials.
Detection
No exploitation reports or indicators have been published. Until they are, look for the side effects of the bug:
- Repeated
worker process ... exited on signal 11(or other signals) lines in the NGINX error log, especially after unusual requests. - Requests to locations that use
aliaswith long or odd paths, in the access log, just before a worker restart. - Unexpected child processes or outbound connections from the NGINX worker user.
Indicators of compromise
No indicators of compromise were found. No exploitation has been reported, so none are expected yet.
No indicators of compromise have been published for this CVE yet. We'll add them here if the vendor or a researcher releases any. Until then, use the behaviour in Detection.
Sources
Page changelog
- Full analysis published.
KEV status, EPSS score and vendor data refreshed automatically, last on 16 Oct 2026.