NGINX's October fixes: five CVEs, one very old bug, and the configuration questions that decide your exposure
NGINX published 1.31.7 and 1.30.6 on 14 October 2026 with fixes for five security defects. Three are memory-safety bugs rated 9.2 under CVSS v4.0, one affects TLS session tickets, and one can inject request bytes toward a backend under HTTP/3. All five share a property that makes triage harder than the version number suggests: each requires specific directives to be in use.
That property is the practical problem for anyone running NGINX as an edge proxy, a sidecar, or a Kubernetes ingress. Installing the patched version is easy. Deciding whether your particular configuration was ever reachable is a separate exercise, and it determines both the urgency of the upgrade and what to look for afterwards.
What the five defects are
CVE-2026-15176 is a heap buffer overflow. The vendor description is narrower than some secondary reporting suggests: the vulnerable path needs a location that uses alias together with rewrite and a set or return directive referencing $request_filename, or the same variable used in an access log format. The affected range runs from 0.1.29 through 1.31.6, so configurations written years ago remain in scope if they use that pairing.
CVE-2026-93479 is a heap overflow in the map directive's regular-expression capture handling, affecting 1.31.2 to 1.31.6 and 1.30.0 to 1.30.5.
CVE-2026-97205 is a use-after-free in the core module. It appears when asynchronous file I/O is enabled and a Server Side Includes page containing include virtual is processed. It affects 0.8.11 through 1.31.6 and is rated 9.2.
CVE-2026-95101 is an HTTP/3 parsing defect that can cause NGINX to add extra bytes when forwarding to a backend. It is rated 6.9 and affects 1.25.0 through 1.31.6.
CVE-2026-97629 concerns TLS session ticket key rotation. With a shared TLS session cache enabled and keys not loaded manually, session forgery becomes possible, and the advisory describes a non-deterministic risk of bypassing client certificate verification. It is rated 8.3 and affects 1.23.2 through 1.31.6.
Reading the ratings correctly
The 9.2 scores are CVSS v4.0 values, not v3.1. Comparing them against a v3.1-based internal severity scale without conversion will misrank these items against older entries in the same backlog, and the mistake is easy to make because both scales produce a number between 0 and 10.
The affected-version strings matter more than usual here, because three of the five defects have conditional trigger paths. A build that never enables SSI with AIO cannot reach CVE-2026-97205 through that path. A configuration without alias plus $request_filename does not expose CVE-2026-15176 in the way the advisory describes.
None of that makes the patch optional. Conditional exposure lowers the probability of exploitation. It does not create a supported mitigation, and it does not survive the next configuration change made by someone who has never read this advisory.
Confirming which configuration you actually run
nginx -T dumps the full expanded configuration, including every included file. That output is the only reliable way to answer the directive questions, because a repository search will miss files generated by a deployment tool or mounted from a ConfigMap.
Four questions worth answering from that dump:
Does any
locationblock combinealiaswith$request_filename?Does any
mapblock use unnamed captures from a regular expression?Are
ssiandaioboth enabled in the same server context?Do
ssl_session_cachesettings rely on automatic ticket key rotation?
For teams that cannot patch immediately, the documented workarounds map to those questions: avoidaliaswith$request_filename, switch to named captures scoped to the matching block, disable AIO or SSI, and review session ticket key handling. Each workaround removes one path while leaving the vulnerable code in place, which is why they are stopgaps rather than fixes.
The TLS item deserves separate treatment
Session ticket forgery is not a memory-safety bug, and its consequences differ from the other four. If client certificates are part of your authentication model, CVE-2026-97629 sits directly on that assumption. Environments that treat mTLS as an internal trust boundary, such as service mesh control planes and administrative endpoints, should confirm that ticket keys are explicitly configured and rotated rather than left to whatever the default does.
Rotating keys after upgrading is worth the extra step. A ticket forged before the patch does not become invalid merely because the binary changed.
What to check after upgrading
Upgrade first, then look for evidence that the window was used. The useful questions are narrow enough to answer with logs you already have:
Are there requests whose URI would resolve differently under
aliashandling than under the equivalentrootconfiguration?Did any NGINX worker crash and restart in the days before patching? Both CVE-2026-15176 and CVE-2026-93479 cause worker crashes as a side effect, and a crash loop dismissed as a resource problem may have been something else.
For HTTP/3 deployments, do backend logs show requests with unexpected additional bytes or duplicated request lines?
For mTLS-fronted services, are there authenticated sessions whose client certificate details do not match your issued inventory?
Worker crash investigation is the cheapest of these. A worker that dies and is replaced within the same second looks like normal resilience from the outside, and it is exactly the signature several of these defects produce.
References
F5 NGINX security advisory, 14 October 2026
NGINX 1.31.7 and 1.30.6 release notes
NVD entries for CVE-2026-15176 and CVE-2026-97205
The Hacker News, "NGINX Fixes 5 Flaws Including a Possible RCE", October 2026
InfoQ, analysis of the October 2026 NGINX release, 22 October 2026