Summary
| Field | Detail |
|---|---|
| Releases | nginx 1.30.6 (stable) and 1.31.7 (mainline), both released 2026-10-14 |
| Advisories | Five nginx core CVEs, listed under Advisories; every one is fixed in both releases |
| Headline | CVE-2026-97205 — use-after-free in the worker process when asynchronous file I/O (AIO) serves a Server Side Includes page with include virtual commands |
| Highest severity | CVE-2026-97205, CVE-2026-15176, and CVE-2026-93479: 8.1 high (CVSS 3.1) / 9.2 critical (CVSS 4.0), scored by F5 as CNA; nginx.org rates all five “medium” |
| Types | Two heap buffer overflows, a use-after-free, a TLS session forgery, and an HTTP/3 request-body injection |
| Who is exposed | Only configurations that use the affected feature — see Detection. Every bug is reachable by an unauthenticated remote client once the feature is on |
| Vendor naming | The NCSC-FI alert is titled for “NGINX Plus”, but F5’s own advisories list NGINX Open Source as affected: every one of these is in the open-source nginx core that NGINX Plus is built on |
| KEV listed | no |
| Public exploit | none known — CISA’s SSVC assessment on every one of the five CVE records says exploitation none |
| EPSS | not yet scored |
Advisories
nginx.org publishes the vulnerable ranges; F5, which is the CNA, publishes the scores and its own advisory per CVE. F5’s tables list only the versions F5 still supports, so the ranges below are nginx.org’s.
| CVE | nginx.org title | Vulnerable | CWE | CVSS 3.1 / 4.0 | F5 advisory |
|---|---|---|---|---|---|
| CVE-2026-97205 | Use-after-free when using asynchronous file I/O (AIO) | 0.8.11 – 1.31.6 | CWE-416 | 8.1 / 9.2 | K000162608 |
| CVE-2026-15176 | Buffer overflow when using alias with rewrite | 0.1.29 – 1.31.6 | CWE-122 | 8.1 / 9.2 | K000162416 |
| CVE-2026-93479 | Buffer overflow in script evaluation | 1.30.0 – 1.30.5, 1.31.2 – 1.31.6 | CWE-122 | 8.1 / 9.2 | K000162607 |
| CVE-2026-97629 | Session forgery when using TLS session tickets | 1.23.2 – 1.31.6 | CWE-908 | 6.5 / 8.3 | K000162606 |
| CVE-2026-95101 | Request body injection in HTTP/3 | 1.25.0 – 1.31.6 | CWE-172 | 5.3 / 6.9 | K000162613 |
Not vulnerable: 1.31.7+ and 1.30.6+. The fixed releases' changelog and F5’s advisories credit cyberlancer (CVE-2026-97205), Matt Suiche of Tolmo and, at F5, Mateusz Gierblinski (CVE-2026-93479), Hansol Lee of GOTROOT (CVE-2026-95101), and PhiNode Labs (CVE-2026-97629); F5 found CVE-2026-15176 internally.
What each bug needs
- CVE-2026-97205 —
aio onoraio threads, and SSI (ssi on) serving a page whoseinclude virtualcommands make subrequests. The result is memory corruption or a worker crash, and code execution where ASLR is disabled or bypassed. - CVE-2026-15176 — a location using
alias, whererewritechanged the URI andsetorreturnthen reads$request_filename;$request_filenamein alog_formatreaches it too. A heap overflow in the worker: a crash, and code execution without ASLR. - CVE-2026-93479 — evaluating string expressions with variables,
as in the document root and request logging, in both the http and
stream modules. F5’s example is a regex
mapwhose captures are used inrootor a log format before the map’s own variable; a non-cacheable variable in a string expression can reach it too. A heap overflow with the same impact as above. - CVE-2026-97629 —
ssl_session_cache shared:…without anssl_session_ticket_keyfile, which makes nginx rotate ticket keys itself. One rotated key was left uninitialised, so a client could forge a session — and skip client-certificate verification. - CVE-2026-95101 — HTTP/3 (
listen … quic). Part of an unknown frame could be read as request body, bypassingclient_max_body_sizeand, where the request is proxied, injecting data into the proxied request.proxy_request_buffering on, which F5 names as the condition, is the default.
Naming differences
F5’s advisory titles, which the NCSC-FI alert repeats, name these by module rather than by bug. Two could mislead:
- CVE-2026-97205 is “NGINX ngx_http_core_module vulnerability” at F5; the fix and nginx.org describe it as the AIO and SSI use-after-free.
- CVE-2026-93479 is “NGINX map directive and regex matching
vulnerability” at F5 — close to July’s CVE-2026-42533
tracker’s title. nginx.org calls it a buffer overflow in script
evaluation; the regex
mapis one way to reach it, not the only one.
njs and the Kubernetes products
The same F5 announcement covers products this tracker does not follow:
- njs (the
ngx_http_js_module/ngx_stream_js_moduleJavaScript modules): CVE-2026-101025, memory exhaustion when parsing malformed XML, and CVE-2026-101019, inconsistent XML attribute values. Both affect njs 0.7.10 – 1.0.1 and are fixed in njs 1.0.2 (njs advisories). nginx without ajs_importdirective never runs njs code and is not exposed. - NGINX Ingress Controller and NGINX Gateway Fabric — F5’s Kubernetes products, which bundle the nginx core and need their own updates from F5. NCSC-FI’s alert lists CVE-2026-94197 and CVE-2026-104939 for the first, and CVE-2026-91184 and CVE-2026-96615 for the second.
Patch status
A row is Fixed once its nginx carries the fix for every one of the five CVEs that applies to its version — a release at or past 1.30.6 (stable) or 1.31.7 (mainline), or a distribution package with the patches backported. Older series are outside some of the ranges: 1.26 is not affected by CVE-2026-93479, and 1.22 only by CVE-2026-97205 and CVE-2026-15176. A package with only some of the fixes stays vulnerable.
Current version is what the release ships today; First fixed is the first build that carried the fixes, and Fixed since the date it became available.
| Distribution | Release | Current version | First fixed | Fixed since | Status |
|---|---|---|---|---|---|
| nginx | mainline | 1.31.8 | 1.31.7 | 2026-10-14 | ✅ Fixed |
| nginx | stable | 1.30.6 | 1.30.6 | 2026-10-14 | ✅ Fixed |
| Debian | sid (unstable) | 1.30.6-2 | 1.30.4-8 | 2026-10-15 | ✅ Fixed |
| Debian | forky (testing) | 1.30.6-2 | 1.30.4-8 | 2026-10-18 | ✅ Fixed |
| Debian | 13 (trixie) | 1.26.3-3+deb13u10 | 1.26.3-3+deb13u10 | 2026-10-21 | ✅ Fixed — DSA-6575-1 |
| Debian | 12 (bookworm) | 1.22.1-9+deb12u10 | — | — | ❌ Vulnerable |
| pkgsrc | pkgsrc-current — nginx | nginx-1.30.6 | nginx-1.30.6 | 2026-10-15 | ✅ Fixed |
| pkgsrc | pkgsrc-current — nginx-devel | nginx-devel-1.31.5nb2 | — | — | ❌ Vulnerable — needs 1.31.7 |
| pkgsrc | pkgsrc-2026Q3 — nginx | nginx-1.30.5 | — | — | ❌ Vulnerable — needs 1.30.6 |
| pkgsrc | pkgsrc-2026Q3 — nginx-devel | nginx-devel-1.31.5 | — | — | ❌ Vulnerable — needs 1.31.7 |
| NixOS | nixos-unstable — nginxStable | 1.30.6 | 1.30.6 | 2026-10-17 | ✅ Fixed |
| NixOS | nixos-unstable — nginxMainline | 1.31.7 | 1.31.7 | 2026-10-17 | ✅ Fixed |
| NixOS | nixos-unstable-small — nginxStable | 1.30.6 | 1.30.6 | 2026-10-15 | ✅ Fixed |
| NixOS | nixos-unstable-small — nginxMainline | 1.31.7 | 1.31.7 | 2026-10-15 | ✅ Fixed |
| NixOS | nixos-26.05 — nginxStable | 1.30.6 | 1.30.6 | 2026-10-19 | ✅ Fixed |
| NixOS | nixos-26.05 — nginxMainline | 1.31.7 | 1.31.7 | 2026-10-19 | ✅ Fixed |
| NixOS | nixos-26.05-small — nginxStable | 1.30.6 | 1.30.6 | 2026-10-15 | ✅ Fixed |
| NixOS | nixos-26.05-small — nginxMainline | 1.31.7 | 1.31.7 | 2026-10-15 | ✅ Fixed |
| nixpkgs | master — nginxStable | 1.30.6 | 1.30.6 | 2026-10-15 | ✅ Fixed |
| nixpkgs | master — nginxMainline | 1.31.8 | 1.31.7 | 2026-10-15 | ✅ Fixed |
| nixpkgs | release-26.05 — nginxStable | 1.30.6 | 1.30.6 | 2026-10-15 | ✅ Fixed |
| nixpkgs | release-26.05 — nginxMainline | 1.31.7 | 1.31.7 | 2026-10-15 | ✅ Fixed |
| nixpkgs | nixpkgs-unstable — nginxStable | 1.30.6 | 1.30.6 | 2026-10-16 | ✅ Fixed |
| nixpkgs | nixpkgs-unstable — nginxMainline | 1.31.7 | 1.31.7 | 2026-10-16 | ✅ Fixed |
nginx
nginx ships two supported tracks: stable (1.30.x), the one most distributions package, and mainline (1.31.x), where new features land first. Both got their fixed release on the same day, and every older series is past its end of support upstream — a host on 1.28 or earlier gets no further nginx.org release and has to move to 1.30.6 or rely on its distribution’s backports.
For operators building from source, nginx.org publishes no separate patches this time; the fixes ship only in the 1.30.6 and 1.31.7 tarballs.
Debian
The Debian security tracker is the authoritative source for per-suite status. sid, forky, and trixie all carry every fix that applies to their nginx; trixie’s came via DSA-6575-1. bookworm, still on 1.22, lacks the CVE-2026-97205 and CVE-2026-15176 fixes — the only two of the five whose range reaches that series.
Debian packages the stable track only, and the nginx source package
also builds the libnginx-mod-* dynamic modules, so one row per
suite covers them all.
Debian 11 (bullseye) left Debian LTS on 2026-08-31. Its nginx 1.18 is inside the CVE-2026-97205 and CVE-2026-15176 ranges and no Debian fix is coming — a host still on bullseye needs to upgrade to a supported release, a paid extended-support offering such as Freexian ELTS, or the configuration mitigations below.
pkgsrc
The pkgsrc tree (NetBSD’s package collection, also used on SmartOS,
macOS via pkgin, and elsewhere) ships the two tracks as separate
packages: www/nginx follows stable and www/nginx-devel follows
mainline. pkgsrc-2026Q3, the current quarterly branch, receives
fixes by pull-up from pkgsrc-current.
pkgsrc-current’s www/nginx has reached the fixed stable release;
www/nginx-devel on the same branch, and both packages on
pkgsrc-2026Q3, have not yet picked it up.
The identifier carries an nbN suffix when the package’s
PKGREVISION is set. That revision bumps for many reasons besides
security patches — recursive bumps for shared-library ABI changes,
dependency and build-system tweaks — so an nbN suffix on its own
says nothing about these CVEs.
NixOS
nixpkgs builds both tracks: nginxStable (also plain nginx, and
the NixOS services.nginx module’s default package) and
nginxMainline. Variants such as nginxShibboleth and builds with
extra modules from nginxModules derive from one of these two, so the
two rows per channel cover them.
nixpkgs-unstable is the channel for Nix users outside NixOS — on
macOS or another Linux distribution. A channel row’s Fixed since is
the date that channel published its first release containing the fix;
a branch row’s is the date the fix was merged into that branch.
The fix landed on master and on release-26.05 the same day,
2026-10-15, and every NixOS channel has since picked it up. Each
branch’s lighter -small gate led its sibling: nixos-unstable-small
and nixos-26.05-small both published a release carrying the fix that
same day. nixos-unstable followed on 2026-10-17, and nixos-26.05
on 2026-10-19.
Flake users
A flake input such as github:NixOS/nixpkgs/nixos-unstable follows
the branch of that name, which moves with the channel — so the
channel’s row answers for it. An input on master or release-26.05
gets the fix as soon as it lands there, before any channel publishes
it.
Detection
First check the version. A build at or past 1.30.6 or 1.31.7 is fixed; a distribution build is fixed only once the table above says so.
nginx -v
The bugs are reachable only through specific configuration, so the
next step is to check whether a host uses it. Run the checks against
the full configuration that nginx -T prints — it follows every
include. Run them as root, or with sudo. A grep only finds
candidates: read the surrounding blocks to see whether the directives
actually apply to the same requests.
CVE-2026-97205 needs both AIO and SSI. A hit on both of these two is
worth a closer look, especially where an SSI page uses include virtual:
nginx -T 2>/dev/null | grep -nE '(^|[[:space:]{;])aio[[:space:]]+(on|threads)'
nginx -T 2>/dev/null | grep -nE '(^|[[:space:]{;])ssi[[:space:]]+on'
CVE-2026-15176 is reachable where alias and $request_filename are
used together, with a rewrite changing the URI first — in the same
location or at the server level:
nginx -T 2>/dev/null | grep -nE '(^|[[:space:]{;])(alias|rewrite)[[:space:]]|[$]request_filename'
CVE-2026-93479 is reachable through regex map blocks whose captures
($1, $2, …) are used outside the map, among other string
expressions — so there is no single grep for it. These lines show
where map blocks and regex keys are:
nginx -T 2>/dev/null | grep -nE '(^|[[:space:]{;])map[[:space:]]|^[[:space:]]*"?~'
CVE-2026-95101 needs HTTP/3. Any hit is exposure, since request buffering is on by default:
nginx -T 2>/dev/null | grep -nE '(^|[[:space:]{;])listen[[:space:]].*[[:space:]]quic'
CVE-2026-97629 needs a shared TLS session cache without static ticket
keys. A server block that inherits a ssl_session_cache shared:
line but no ssl_session_ticket_key line is exposed, unless it sets
ssl_session_tickets off; the same directives in the stream module
count too:
nginx -T 2>/dev/null | grep -nE '(^|[[:space:]{;])ssl_session_(cache[[:space:]].*shared:|ticket_key[[:space:]]|tickets[[:space:]]+off)'
The njs CVEs need njs code loaded with js_import:
nginx -T 2>/dev/null | grep -nE '(^|[[:space:]{;])js_import[[:space:]]'
Mitigation
The real fix is nginx 1.30.6 / 1.31.7, or a distribution package with
the patches. Until one is installed, F5’s advisories list a
configuration workaround for each bug; each takes effect on
nginx -t && nginx -s reload:
- CVE-2026-97205 — turn off AIO (
aio off, the default) or SSI (ssi off). Without AIO, workers may block on disk reads, which matters mostly for large static files under heavy load. - CVE-2026-15176 — avoid the
aliasdirective, and avoid the$request_filenamevariable, including in log formats. - CVE-2026-93479 — use named captures (
(?<name>…)) in regexmapblocks, and use them only within the block that matched. F5 lists no workaround for the other, non-cacheable-variable path. - CVE-2026-97629 — load static ticket keys with
ssl_session_ticket_key, or setssl_session_tickets off, or drop theshared:session cache. - CVE-2026-95101 — set
proxy_request_buffering offin proxied locations served over HTTP/3, or stop listening on QUIC.
A workaround does not change a row’s status above: only an nginx build with the fixes does.
Verification log
Every verdict in the table above is backed by a checkable source. This log records the provenance — the advisory, repository index, or git reference that established each fact — so any row can be audited or reproduced. Most readers never need it.
Full verification log
Upstream
- nginx.org ([security advisories][nginx-advisories],
[CHANGES][nginx-changes], [CHANGES-1.30][nginx-changes-130]):
- All five CVEs: not vulnerable 1.31.7+ and 1.30.6+; vulnerable ranges as in the Advisories table; severity “medium” for each.
- The
Changes with nginx 1.31.7andChanges with nginx 1.30.6headers are both dated 14 Oct 2026, the Fixed since of the twonginxrows. - Current version is the newest
Changes with nginxheader of each changelog.
- F5 advisories (K000162608, K000162416, K000162607, K000162606,
K000162613; F5’s portal needs JavaScript, so read from copies of
the published pages):
- All published 2026-10-14; F5 tracking ids NPS-187, NPS-139, NPS-180, NPS-179, and NPS-253 in that order.
- CWE, both CVSS scores, the trigger conditions, the mitigations, and the acknowledgements in this tracker are F5’s.
- CVE records (the [CVE Services API][cve-api], F5 as CNA):
- Published 2026-10-14; CVSS 3.1 and 4.0 vectors match F5’s scores.
- CISA’s SSVC is recorded on all five records: exploitation
noneon every one. - NVD’s status is “Awaiting Analysis”, with no NVD score of its own.
- Not in CISA’s KEV catalog; no FIRST EPSS score yet.
Distributions
- Debian (security tracker per-CVE pages; versions from
scripts/debian-versions):- sid and forky are listed fixed in
1.30.4-8for all five CVEs; trixie is fixed in1.26.3-3+deb13u10for the four CVEs that reach 1.26; bookworm remains vulnerable to the two that reach 1.22. 1.30.4-8’s non-orig source files first appeared on snapshot.debian.org on 2026-10-15, sid’s Fixed since.- forky’s testing archive held
1.30.4-7as of 2026-10-18T00:00Z and1.30.4-8by 2026-10-18T08:00Z per snapshot.debian.org, forky’s Fixed since. - trixie’s
1.26.3-3+deb13u10landed via DSA-6575-1, accepted into stable-security on 2026-10-21, trixie’s Fixed since. - Current version is the
-securityarchive’s where it is ahead of the main archive.
- sid and forky are listed fixed in
- pkgsrc (local clone,
scripts/pkgsrc-versions):www/nginxandwww/nginx-develonorigin/trunkandorigin/pkgsrc-2026Q3; no patch names a tracked CVE.pkgsrc-current’swww/nginxreachednginx-1.30.6in commit00d6f2e8d590(“nginx: Update to 1.30.6”) on 2026-10-15.www/nginx-develsetsPKGNAME, so its identifier readsnginx-devel-<version>.
- NixOS channels (local nixpkgs clone at each channel’s revision,
scripts/nixpkgs-versions; releases viascripts/nixos-first-shipped):- Versions read from
pkgs/servers/http/nginx/stable.nixandmainline.nix; no file names a tracked CVE. nixos-unstablefirst shipped the fix in releasenixos-26.11pre1093333.fe13242281a6, found against4c5e37d81d86.nixos-unstable-smallfirst shipped the fix in releasenixos-26.11pre1092962.3536189026af, found against4c5e37d81d86.nixos-26.05first shipped the fix in releasenixos-26.05.12104.ed583b5bcfb5, found against195d8c7a94c0.nixos-26.05-smallfirst shipped the fix in releasenixos-26.05.12063.14a830c3c9a9, found against195d8c7a94c0.nixpkgs-unstablefirst shipped the fix in releasenixpkgs-26.11pre1092923.95b2dd0e78e6, found against4c5e37d81d86.
- Versions read from
- nixpkgs branches (local clone, first-parent history):
master:36ff115a1542(nginxStable 1.30.5 → 1.30.6) and22e558071c33(nginxMainline 1.31.6 → 1.31.7), merged together as4c5e37d81d86(#574037) on 2026-10-15.release-26.05: backported as195d8c7a94c0(#574270) on 2026-10-15.
References
| Source | URL |
|---|---|
| nginx security advisories | https://nginx.org/en/security_advisories.html |
| nginx CHANGES (mainline) | https://nginx.org/en/CHANGES |
| nginx CHANGES-1.30 (stable) | https://nginx.org/en/CHANGES-1.30 |
| njs security advisories | https://nginx.org/en/docs/njs/security.html |
| F5 K000162608 (CVE-2026-97205) | https://my.f5.com/manage/s/article/K000162608 |
| F5 K000162416 (CVE-2026-15176) | https://my.f5.com/manage/s/article/K000162416 |
| F5 K000162607 (CVE-2026-93479) | https://my.f5.com/manage/s/article/K000162607 |
| F5 K000162606 (CVE-2026-97629) | https://my.f5.com/manage/s/article/K000162606 |
| F5 K000162613 (CVE-2026-95101) | https://my.f5.com/manage/s/article/K000162613 |
| CVE-2026-97205 | https://www.cve.org/CVERecord?id=CVE-2026-97205 |
| Debian security tracker | https://security-tracker.debian.org/tracker/CVE-2026-97205 |
| NixOS security tracker | https://tracker.security.nixos.org/ |