Security
nginx has shipped 40 memory-safety bugs.
Across seventeen years and every major version. xin is a drop-in replacement built so that entire category — buffer overflows, use-after-frees, memory disclosure — cannot be written in the first place.
What you get
Memory safety, where it actually matters.
Rust is not a marketing word here. It is a compiler that refuses to build the code that produced most of nginx's security history.
A parser that cannot overflow
xin's HTTP/1 engine is #![forbid(unsafe_code)] — the compiler rejects the build if a single unsafe block appears. Every slice access is bounds-checked. The chunked-encoding overflow that gave nginx a remote root in 2013 is not a bug you can write here.
A resolver with nothing to corrupt
Four of nginx's advisories are memory corruption in its DNS resolver, including the off-by-one heap write of CVE-2021-23017. xin ships its own resolver containing zero unsafe code.
A smaller target, by design
25 of nginx's memory-safety advisories are in modules xin does not ship: mp4, dav, SSI, mail, SCGI, HTTP/3. Code you do not run cannot be exploited, and xin refuses those directives at startup instead of half-implementing them.
One binary to patch
No dynamic module ABI, no third-party C modules linked into your worker process. When a fix ships, it is one signed package across seven architectures.
The record
nginx's own advisory list, counted up.
Source: nginx.org/en/security_advisories.html. Descriptions and severities below are nginx's own words.
Head to head
15 bugs in the jobs xin does too.
Not modules xin skipped — the request parser, the rewrite engine, byte ranges, upstream response handling, the resolver. Same job, same hostile input, different language.
- CVE-2026-42533 major nginx 0.9.6–1.31.2
Buffer overflow when using map and regex
xin implements both map and regex locations. The lowering runs in xin-ir and xin-engine, both #![forbid(unsafe_code)].
- CVE-2026-9256 medium nginx 0.1.17–1.31.0
Buffer overflow in ngx_http_rewrite_module
rewrite / return / try_files are implemented and lowered by xin, in safe Rust.
- CVE-2026-42945 medium nginx 0.6.27–1.30.0
Buffer overflow in ngx_http_rewrite_module
Same module, same year, a second overflow. xin's rewrite lowering is BP-008, entirely in safe Rust.
- CVE-2026-40701 medium nginx 1.19.0–1.30.0
Resolver use-after-free in OCSP
xin ships its own resolver (xin-resolver). It contains no unsafe code at all.
- CVE-2021-23017 medium nginx 0.6.18–1.20.0
1-byte memory overwrite in resolver
An off-by-one writing a single '.' past a heap buffer in ngx_resolver_copy(); remote code execution was demonstrated. An off-by-one on a slice is a panic in safe Rust, not a write.
- CVE-2017-7529 medium nginx 0.5.6–1.13.2
Integer overflow in range filter
xin implements byte ranges, including multipart. The overflow leaked cache memory because the bad offset was then used to index; in Rust that index is bounds-checked.
- CVE-2016-4450 medium nginx 1.3.9–1.11.0
NULL pointer dereference while writing client request body
Request-body buffering to disk is a path xin implements. Rust has no null pointer to dereference here.
- CVE-2016-0742 medium nginx 0.6.18–1.9.9
Invalid pointer dereference in resolver
- CVE-2016-0746 medium nginx 0.6.18–1.9.9
Use-after-free during CNAME response processing in resolver
Use-after-free is the defect class Rust's ownership model exists to eliminate.
- CVE-2013-2070 medium nginx 1.1.4–1.2.8, 1.3.9–1.4.0
Memory disclosure with specially crafted HTTP backend responses
Parsing an upstream response is exactly what a reverse proxy does. xin parses them in xin-h1, which is #![forbid(unsafe_code)] and fuzzed.
- CVE-2013-2028 major nginx 1.3.9–1.4.0
Stack-based buffer overflow with specially crafted request
The chunked-encoding overflow — a signed/unsigned confusion in the request parser, and the best-known remotely exploitable nginx bug. xin's chunked decoder is safe Rust and has a dedicated fuzz target.
- CVE-2012-1180 major nginx 0.1.0–1.1.16
Memory disclosure with specially crafted backend responses
Upstream response parsing again, four years before the same class recurred.
- CVE-2011-4315 medium nginx 0.6.18–1.1.7
Buffer overflow in resolver
- CVE-2009-2629 major nginx 0.1.0–0.8.14
Buffer underflow vulnerability
A pointer walked backwards out of the request buffer during URI parsing. In safe Rust a slice cannot be indexed below its start.
- CVE-2009-3896 major nginx 0.1.0–0.8.13
Null pointer dereference vulnerability
Everything
All 62 advisories, unfiltered.
Including the 22 that are not memory-safety bugs — injections, session reuse, resource exhaustion. Rust does not fix those, so they are listed unmarked rather than left out.
| CVE | nginx's description | Severity | Affected | Class |
|---|---|---|---|---|
| CVE-2026-42533 | Buffer overflow when using map and regex | major | 0.9.6–1.31.2 | xin: safe Rust |
| CVE-2026-60005 | Memory disclosure when using ngx_http_slice_module | medium | 1.15.8–1.31.2 | xin: not shipped |
| CVE-2026-56434 | Use-after-free when using ngx_http_ssi_module | medium | 0.8.11–1.31.2 | xin: not shipped |
| CVE-2026-42530 | Use-after-free in HTTP/3 | major | 1.31.0–1.31.1 | xin: not shipped |
| CVE-2026-42055 | Buffer overflow in ngx_http_proxy_v2_module and ngx_http_grpc_module | medium | 1.13.10–1.31.1 | xin: not shipped |
| CVE-2026-48142 | Buffer overread in ngx_http_charset_module | low | 0.3.50–1.31.1 | xin: not shipped |
| CVE-2026-9256 | Buffer overflow in ngx_http_rewrite_module | medium | 0.1.17–1.31.0 | xin: safe Rust |
| CVE-2026-42926 | HTTP/2 request injection in ngx_http_proxy_module | medium | 1.29.4–1.30.0 | not memory safety |
| CVE-2026-42945 | Buffer overflow in ngx_http_rewrite_module | medium | 0.6.27–1.30.0 | xin: safe Rust |
| CVE-2026-42946 | Buffer overread in ngx_http_scgi_module and ngx_http_uwsgi_module | medium | 0.8.42–1.30.0 | xin: not shipped |
| CVE-2026-42934 | Buffer overread in ngx_http_charset_module | low | 0.3.50–1.30.0 | xin: not shipped |
| CVE-2026-40460 | HTTP/3 address spoofing | medium | 1.25.0–1.30.0 | not memory safety |
| CVE-2026-40701 | Resolver use-after-free in OCSP | medium | 1.19.0–1.30.0 | xin: safe Rust |
| CVE-2026-27654 | Buffer overflow in ngx_http_dav_module | medium | 0.5.13–1.29.6 | xin: not shipped |
| CVE-2026-27784 | Buffer overflow in ngx_http_mp4_module | medium | 1.1.19–1.29.6 | xin: not shipped |
| CVE-2026-32647 | Buffer overflow in ngx_http_mp4_module | medium | 1.1.19–1.29.6 | xin: not shipped |
| CVE-2026-27651 | NULL pointer dereference while using CRAM-MD5 or APOP | low | 0.5.15–1.29.6 | xin: not shipped |
| CVE-2026-28753 | Injection in auth_http and XCLIENT | medium | 0.6.27–1.29.6 | not memory safety |
| CVE-2026-28755 | OCSP result bypass in stream | medium | 1.27.2–1.29.6 | not memory safety |
| CVE-2026-1642 | SSL upstream injection | medium | 1.3.0–1.29.4 | not memory safety |
| CVE-2025-53859 | Buffer overread in ngx_mail_smtp_module | low | 0.7.22–1.29.0 | xin: not shipped |
| CVE-2025-23419 | SSL session reuse vulnerability | medium | 1.11.4–1.27.3 | not memory safety |
| CVE-2024-7347 | Buffer overread in ngx_http_mp4_module | low | 1.5.13–1.27.0 | xin: not shipped |
| CVE-2024-32760 | Buffer overwrite in HTTP/3 | medium | 1.25.0–1.25.5, 1.26.0 | xin: not shipped |
| CVE-2024-31079 | Stack overflow and use-after-free in HTTP/3 | medium | 1.25.0–1.25.5, 1.26.0 | xin: not shipped |
| CVE-2024-35200 | NULL pointer dereference in HTTP/3 | medium | 1.25.0–1.25.5, 1.26.0 | xin: not shipped |
| CVE-2024-34161 | Memory disclosure in HTTP/3 | medium | 1.25.0–1.25.5, 1.26.0 | xin: not shipped |
| CVE-2024-24989 | NULL pointer dereference in HTTP/3 | major | 1.25.3 | xin: not shipped |
| CVE-2024-24990 | Use-after-free in HTTP/3 | major | 1.25.0–1.25.3 | xin: not shipped |
| CVE-2022-41741 | Memory corruption in ngx_http_mp4_module | medium | 1.1.3–1.23.1, 1.0.7–1.0.15 | xin: not shipped |
| CVE-2022-41742 | Memory disclosure in ngx_http_mp4_module | medium | 1.1.3–1.23.1, 1.0.7–1.0.15 | xin: not shipped |
| CVE-2021-23017 | 1-byte memory overwrite in resolver | medium | 0.6.18–1.20.0 | xin: safe Rust |
| CVE-2019-9511 | Excessive CPU usage in HTTP/2 with small window updates | medium | 1.9.5–1.17.2 | not memory safety |
| CVE-2019-9513 | Excessive CPU usage in HTTP/2 with priority changes | low | 1.9.5–1.17.2 | not memory safety |
| CVE-2019-9516 | Excessive memory usage in HTTP/2 with zero length headers | low | 1.9.5–1.17.2 | not memory safety |
| CVE-2018-16843 | Excessive memory usage in HTTP/2 | low | 1.9.5–1.15.5 | not memory safety |
| CVE-2018-16844 | Excessive CPU usage in HTTP/2 | low | 1.9.5–1.15.5 | not memory safety |
| CVE-2018-16845 | Memory disclosure in ngx_http_mp4_module | medium | 1.1.3–1.15.5, 1.0.7–1.0.15 | xin: not shipped |
| CVE-2017-7529 | Integer overflow in range filter | medium | 0.5.6–1.13.2 | xin: safe Rust |
| CVE-2016-4450 | NULL pointer dereference while writing client request body | medium | 1.3.9–1.11.0 | xin: safe Rust |
| CVE-2016-0742 | Invalid pointer dereference in resolver | medium | 0.6.18–1.9.9 | xin: safe Rust |
| CVE-2016-0746 | Use-after-free during CNAME response processing in resolver | medium | 0.6.18–1.9.9 | xin: safe Rust |
| CVE-2016-0747 | Insufficient limits of CNAME resolution in resolver | medium | 0.6.18–1.9.9 | not memory safety |
| CVE-2014-3616 | SSL session reuse vulnerability | medium | 0.5.6–1.7.4 | not memory safety |
| CVE-2014-3556 | STARTTLS command injection | medium | 1.5.6–1.7.3 | not memory safety |
| CVE-2014-0133 | SPDY heap buffer overflow | major | 1.3.15–1.5.11 | xin: not shipped |
| CVE-2014-0088 | SPDY memory corruption | major | 1.5.10 | xin: not shipped |
| CVE-2013-4547 | Request line parsing vulnerability | medium | 0.8.41–1.5.6 | not memory safety |
| CVE-2013-2070 | Memory disclosure with specially crafted HTTP backend responses | medium | 1.1.4–1.2.8, 1.3.9–1.4.0 | xin: safe Rust |
| CVE-2013-2028 | Stack-based buffer overflow with specially crafted request | major | 1.3.9–1.4.0 | xin: safe Rust |
| CVE-2012-2089 | Buffer overflow in ngx_http_mp4_module | major | 1.1.3–1.1.18, 1.0.7–1.0.14 | xin: not shipped |
| CVE-2012-1180 | Memory disclosure with specially crafted backend responses | major | 0.1.0–1.1.16 | xin: safe Rust |
| CVE-2011-4963 | Vulnerabilities with Windows directory aliases | medium | nginx/Windows 0.7.52–1.3.0 | not memory safety |
| CVE-2011-4315 | Buffer overflow in resolver | medium | 0.6.18–1.1.7 | xin: safe Rust |
| CVE-2010-2266 | Vulnerabilities with invalid UTF-8 sequence on Windows | major | nginx/Windows 0.7.52–0.8.40 | not memory safety |
| CVE-2010-2263 | Vulnerabilities with Windows file default stream | major | nginx/Windows 0.7.52–0.8.39 | not memory safety |
| CORE-2010-0121 | Vulnerabilities with Windows 8.3 filename pseudonyms | major | nginx/Windows 0.7.52–0.8.32 | not memory safety |
| CVE-2009-4487 | Error log data are not sanitized | none | all | not memory safety |
| CVE-2009-3555 | SSL protocol renegotiation vulnerability | major | 0.1.0–0.8.22 | not memory safety |
| CVE-2009-3898 | Directory traversal vulnerability | minor | 0.1.0–0.8.16 | not memory safety |
| CVE-2009-2629 | Buffer underflow vulnerability | major | 0.1.0–0.8.14 | xin: safe Rust |
| CVE-2009-3896 | Null pointer dereference vulnerability | major | 0.1.0–0.8.13 | xin: safe Rust |
Stop patching a bug class you can delete.
xin runs your existing nginx.conf, beats nginx on TLS,
and takes 40 advisories' worth of attack
surface off the table.