nginx 1.30.6/1.31.7 Fix 5 CVEs, Including CVE-2026-15176 (alias+rewrite)
If you run nginx, check your version and upgrade to stable 1.30.6 or mainline 1.31.7 or later, and remember that you need to restart, not just reload, to run the new binary.
1-minute summary
- Symptom / problem
- nginx มีช่องโหว่ 5 รายการที่แก้ใน 14 ต.ค. 2026 คือ alias+rewrite overflow, script evaluation overflow, HTTP/3 body injection, TLS ticket forgery และ AIO use-after-free
- Who should read
- nginx รุ่น 1.30.5 และ 1.31.6 ลงไป ตามช่วงของแต่ละ CVE โดยตัว HTTP/3 และ TLS ticket กระทบช่วงรุ่นกว้างมาก
- Fix in short
- อัปเป็น stable 1.30.6 หรือ mainline 1.31.7 ขึ้นไป แล้ว restart เพื่อให้ master process ใช้ binary ใหม่
I happened to open the security advisories page on nginx.org and found that stable 1.30.6 and mainline 1.31.7, released on 14 Oct. 2026, fixed 5 vulnerabilities at once, so I went through all of 2026 to see what else might still be outstanding. The page lists 26 advisories for CVEs from 2026, covered by 8 releases from February through October. If you have kept up with the releases, there is no need to worry, but if you have left nginx untouched since the start of the year, you have a lot of fixes pending.
What happened
The five issues fixed in 1.30.6 and 1.31.7, according to nginx CHANGES:
- CVE-2026-15176 A buffer overflow in a worker when
aliasis used and a URI is changed byrewrite, then mapped to a file path. Affects 0.1.29 through 1.31.6. - CVE-2026-93479 A buffer overflow when evaluating string expressions containing variables, affecting document root calculations and request logging in both the http and stream modules. Affects 1.31.2 through 1.31.6 and 1.30.0 through 1.30.5.
- CVE-2026-95101 When using HTTP/3, part of an unknown frame may be counted as the request body, allowing the
client_max_body_sizelimit to be bypassed or data to be injected into a proxied request. Affects 1.25.0 through 1.31.6. - CVE-2026-97629 When TLS session ticket key rotation is used, one key is left uninitialized, which may allow session forgery. Affects 1.23.2 through 1.31.6.
- CVE-2026-97205 A use-after-free when asynchronous file I/O (AIO) is used in certain configurations and an SSI page contains an
include virtualdirective. Affects 0.8.11 through 1.31.6.
Another issue fixed earlier was CVE-2026-90439 on 15 Sept. 2026 (1.31.6 and 1.30.5), a heap overflow in a worker when using HTTP/3 with OpenSSL 3.5.0 or earlier in certain configurations. It affects 1.29.2 through 1.31.5. Upgrading to 1.30.6 or 1.31.7 includes this fix too.
Severity
The nginx.org page rates all five issues as medium and provides no CVSS scores. I opened the linked F5 advisory pages, but they displayed no content (just a portal shell that failed to load), so I have left out scores I could not verify. None of these issues appears in CISA's KEV catalog in the file released on 3 Nov. 2026, and the nginx page does not state that they have been exploited in the wild.
The advisories page provides only severity levels (medium, Major), affected versions, and fixed versions, so I have not included scores without a source I could verify. If your organization needs scores, open the F5 advisory links on the same page in a browser.
Medium here does not mean you can leave it alone. A buffer overflow in a worker can at least crash the worker, and nginx's own wording does not rule out other outcomes. I give CVE-2026-95101 and CVE-2026-97629 high priority because their affected version ranges are very broad (starting at 1.25.0 and 1.23.2). If you enable HTTP/3 or terminate TLS at nginx, assume you are affected for now.
Who is affected across 2026
I compiled this table from the advisories page and CHANGES. The dates are the mainline release dates in CHANGES; the stable versions containing the fixes come from the "fixed in" field on the advisories page.
| Release date | Fixed in (mainline / stable) | Issues |
|---|---|---|
| 4 Feb. | 1.29.5 / 1.28.2 | CVE-2026-1642 SSL upstream injection |
| 24 Mar. | 1.29.7 / 1.28.3 | 6 issues: dav, two mp4 issues, mail (CRAM-MD5/APOP), auth_http with XCLIENT, OCSP in stream |
| 13 May | 1.31.0 / 1.30.1 | 6 issues: rewrite, proxy_set_body to HTTP/2, scgi/uwsgi, charset_map, HTTP/3 address spoofing, OCSP resolver |
| 22 May | 1.31.1 / 1.30.2 | CVE-2026-9256 overflow in rewrite (CHANGES says it may lead to code execution) |
| 17 June | 1.31.2 / 1.30.3 | CVE-2026-42530 HTTP/3 UAF (Major), CVE-2026-42055, CVE-2026-48142 |
| 15 July | 1.31.3 / 1.30.4 | CVE-2026-42533 map+regex overflow (Major), CVE-2026-60005, CVE-2026-56434 |
| 15 Sept. | 1.31.6 / 1.30.5 | CVE-2026-90439 HTTP/3 overflow |
| 14 Oct. | 1.31.7 / 1.30.6 | The 5 issues above |
The two issues rated Major on the advisories page are CVE-2026-42533 and CVE-2026-42530. I have already covered the first in An nginx heap overflow going back 15 years. Upgrading to 1.30.6 or 1.31.7 includes every fix in the table. If you are on 1.28.x or 1.29.x, you need to move to 1.30.x or 1.31.x, because for issues from May onward, the advisories page lists fixed versions only in those two branches.
The latest mainline version is 1.31.8 (21 Oct. 2026). It contains no new security entries, but it does include a "Change" making the working_directory path relative to the prefix directory. If you use mainline, read it before upgrading.
nginx.org also announced njs 1.0.2 on the same day (14 Oct.), fixing CVE-2026-101025 (memory exhaustion when parsing malformed XML) and CVE-2026-101019 (inconsistent XML attribute values affecting signed XML validation). If you use njs, check its version separately from nginx.
Check whether your configuration is affected
Start with the version and build options.
nginx -v
nginx -V 2>&1 | grep -iE 'built with openssl'
nginx -V 2>&1 | tr ' ' '\n' | grep -E 'http_v3|http_ssi|file-aio'
Then search for the relevant directives in the configuration nginx actually loads (including all includes).
sudo nginx -T 2>/dev/null | grep -nE '^\s*(alias|rewrite|ssi|aio|http3|ssl_session_ticket)|listen .*quic'
Read the results as follows. If you find alias and rewrite in the same site, treat it as affected by CVE-2026-15176. If you find quic or http3, it is affected by CVE-2026-95101 (and CVE-2026-90439 if it uses OpenSSL 3.5.0 or earlier). If you find ssi on together with aio, treat it as affected by CVE-2026-97205. For CVE-2026-93479, I cannot narrow this down with a filter, because "evaluating variables to calculate the root or log" is already part of typical configurations. Treat all versions from 1.30.0 through 1.30.5 and 1.31.2 through 1.31.6 as affected.
For CVE-2026-97629, I cannot confirm whether configurations that do not explicitly set ssl_session_ticket_key meet the conditions, because CHANGES says only "when using key rotation." I therefore recommend treating every machine that terminates TLS with nginx in the affected version range as affected until it is upgraded.
Installing a new package does not make the running master process use the new binary, and nginx -s reload does not replace the binary either. nginx -v reads the file on disk, so it cannot tell you which version is actually running. You need to restart or perform a binary upgrade, then check that the process is running the new binary.
How to fix it
nginx.org and the advisories page have not published workarounds for this set of issues. The available fix is to upgrade.
- Check the version and configuration Check whether the version is in an affected range and whether the relevant directives are present.
- Update the package To stable 1.30.6 or mainline 1.31.7 or later.
- nginx -t, then restart Not just reload.
- Check that the master process is running the new binary Before closing the task.
# แพ็กเกจจาก repo ของ nginx.org หรือ distro (Debian / Ubuntu)
sudo apt update
sudo apt install --only-upgrade nginx
sudo nginx -t && sudo systemctl restart nginx
# RHEL / Rocky / AlmaLinux
sudo dnf upgrade nginx
sudo nginx -t && sudo systemctl restart nginx
If you use a distro package, the version number may remain unchanged because of backports. Check the changelog for the CVE IDs.
apt changelog nginx | grep -oE 'CVE-2026-[0-9]+' | sort -u
rpm -q --changelog nginx | grep -oE 'CVE-2026-[0-9]+' | sort -u
Check that the master process is running the new binary. If the binary has been replaced but the old process is still running, you will see (deleted) at the end (the pid file path depends on the installation).
sudo readlink /proc/$(cat /run/nginx.pid)/exe
For machines with nginx installed through DirectAdmin CustomBuild, update the lists and rebuild. For containers, rebuild the image by pulling a fresh base image without using the cache, then redeploy every container.
cd /usr/local/directadmin/custombuild && ./build update && ./build nginx
docker build --pull --no-cache -t myapp:nginx-fixed .
Check whether you have been exploited
nginx and F5 have not published IOCs for these issues, so I can only point to a general sign of buffer overflows and use-after-free: workers crashing repeatedly.
sudo grep -hE 'worker process [0-9]+ exited on signal' /var/log/nginx/error.log* | tail -20
If you see this often, investigate which requests preceded the crashes. If you do not see it, that does not mean you are safe, especially for CVE-2026-97629, which involves session forgery and leaves no crash evidence in the logs.
Personally, for machines that enable HTTP/3 or terminate TLS at nginx, I would upgrade within a few days. There is no need to do it overnight, because these issues are not yet in KEV and I have seen no reports of exploitation in the wild from the primary sources. I would put the rest into the normal maintenance cycle. What I do not recommend is waiting for the distro to catch up. If you do wait, check the changelog periodically, as staffing allows.
P.S. If you are still on 1.28.x or 1.29.x, this is a good time to move to stable 1.30.x, because the later issues have no fixed versions available in the old branches.
Sources: nginx.org Security advisories (https://nginx.org/en/security_advisories.html), nginx.org CHANGES (https://nginx.org/en/CHANGES), nginx.org News (https://nginx.org/), CISA Known Exploited Vulnerabilities Catalog (https://www.cisa.gov/known-exploited-vulnerabilities-catalog). Information current as of 5 Nov. 2026; KEV checked against the file CISA released on 3 Nov. 2026. I will come back and update this later.
Want us to set this up?
Get help with server setup, configuration, migration, or troubleshooting. Save time for the work that matters.
Hit something like this? Stuck somewhere?
Come trade notes on the LinuxThai board



Comments 0
No comments yet — be the first