23 min read
High
By

NGINX Rift CVE-2026-42945 — how an 18-year-old assumption in the rewrite module rips through the reverse proxy

On 13 May 2026 CVE-2026-42945, a heap buffer overflow in NGINX' ngx_http_rewrite_module, was disclosed — CVSS 9.2, unauthenticated, a single crafted HTTP request is enough. The path has been present in every mainline, stable and NGINX Plus line up to 1.30.0 / NGINX Plus R36 since nginx 0.6.27 (2008). Patches are available in nginx 1.27.5, 1.30.1 and NGINX Plus R32 P2 to R36 P1 since 13 May 2026, AlmaLinux backport in the testing channel; PoC repository public since 14 May. Anyone running NGINX as a reverse proxy in front of a TYPO3 or Sylius platform has a 96-hour patch window plus a parallel linting task in the configuration template.

Ein walnussfarbenes Architektur-Maßstabsmodell eines schmalen Stadthauses aus dem späten 19. Jahrhundert, geöffnet wie ein Maßstabsmodell, mit einem schmalen Spalt zwischen Querbalken und Bohrung an einer tragenden Stelle; ein messingbeschlagener Schraubendreher mit oxblutfarbener Markierungslinie steht in der Lücke, daneben ein altes architektonisches Referenzbuch mit der Jahreszahl 1908 auf dem Buchrücken und ein cremefarbener Bauplan — in kühlem Nordlicht auf glattem Beton.

TL;DR — 90 seconds

An 18-year-old assumption in the NGINX rewrite module lets a single crafted HTTP request trigger a worker crash; with ASLR off, potential RCE is on the table. The patch landed two days ago, and the configuration discipline across the NGINX estate is the second, more durable mitigation.

QuestionAnswer
Affected?nginx Open Source 0.6.27 through 1.30.0; nginx Stable 1.28.x through 1.28.4; NGINX Plus R32 through R36; any configuration with a rewrite directive, an unnamed PCRE capture ($1, $2), a question mark in the replacement, and a follow-up directive (rewrite, if or set)
Risk?Heap buffer overflow in the worker process, single crafted HTTP request, unauthenticated; worker crash guaranteed; RCE possible on hosts with ASLR disabled or with supplementary heap-spray techniques — no documented mass exploit as of 15 May, but PoC public since 14 May
Immediate action?Patch to nginx 1.30.1 or 1.27.5 or NGINX Plus R36 P1; in parallel: configuration lint for unnamed captures plus question-mark replacements plus follow-up directives, replacing $1 with (?<name>…) named captures where matched
Recommendation?For the German Mittelstand: patch in the standard maintenance window, configuration lint as a linting rule in the platform template. Enterprise: additionally a pre-receive hook on NGINX config repos for unnamed captures with question marks, plus a WAF rule for the exploit pattern at front-edge hosts
Criticality?See hero badge — high

What is the problem?

NGINX' ngx_http_rewrite_module rewrites URLs against regex patterns. A typical configuration looks like this: rewrite ^/old/(.+)$ /new/$1?token=abc;. The unnamed capture $1 picks up the first capture block from the regex and inserts it into the replacement string. The question mark marks the start of the query string in the replacement.

The security path sits in the two-stage buffer handling. NGINX calculates the buffer size required for the finished replacement string with a first escaping pass. It then writes the replacement with a second escaping pass into the allocated buffer — with a slightly different set of special characters.

If the replacement contains characters such as +, % or & and meets a follow-up directive (rewrite, if, set) that processes the replacement again, the re-escape expands the string: + becomes %20, & becomes &amp;, and the write path writes more bytes than the sizing path allocated. The buffer overflow runs into the heap area beyond the end of the allocation.

The Picus Security analysis traces the path in detail: the calculation runs in ngx_http_script_regex_end_code() with ngx_escape_uri(NULL, ...), the write in ngx_http_script_complex_value_code() with ngx_escape_html(NULL, ...). Both functions have been implemented this way in NGINX since 0.6.27 (2008); the discrepancy in the special-character set has not led to a security flaw for 18 years because typical configurations either do not use unnamed captures with question-mark replacements, or because the follow-up directive did not trigger the re-escape.

This is the structural lesson: not a new code path, but an old assumption about consistency between two internal functions that becomes sharp for a particular configuration class only through the combination of three conditions (unnamed capture + question mark + follow-up directive). The exploit PoC in the public repository on GitHub shows the reproduction in five lines of configuration and a curl call.

Who is affected?

A compact overview of affected and non-affected configurations.

ConfigurationAffectedNot affected / conditions
NGINX as a reverse proxy in front of TYPO3 (the German Mittelstand standard setup)nginx Open Source 0.6.27 through 1.30.0 with rewrite directives that contain unnamed captures plus a question mark plus a follow-up directiveConfiguration without rewrite with an unnamed capture; or only named captures ((?<id>…)); or no follow-up directive after the rewrite
NGINX as a reverse proxy in front of Sylius shopsAs above — Sylius setups frequently use multi-domain rewrite rules with unnamed captures for tenant routingSylius setup with named captures in the tenant router, or with Symfony routing instead of NGINX rewrite
NGINX Plus in German enterprise platformsR32 through R36 — patch in R32 P2 through R36 P1 from 13 May 2026R36 P1 or newer; or NGINX Plus with pure map-based routing without rewrite
NGINX in Kubernetes ingress controllers (ingress-nginx, NGINX Ingress)When ingress annotations nginx.ingress.kubernetes.io/server-snippet or nginx.ingress.kubernetes.io/configuration-snippet use rewrite directives with unnamed capture plus question markIngress controller without snippet-based custom rewrites; patch on ingress-nginx v1.13+, NGINX Ingress 5.0+
NGINX as load balancer for a Sylius multi-channel setupWith channel-specific rewrite rules that use captures and query-string manipulationChannel routing through the Sylius Symfony routing layer instead of NGINX rewrite
NGINX as TLS termination in front of ApacheIf the NGINX config uses rewrite, yes — even when Apache sits behindPure TLS termination without rewrite; or only proxy_pass without URL manipulation
NGINX as a CDN origin pull originIf the origin config runs rewrite-based path normalisationOrigin without rewrite; or CDN-side path normalisation instead of origin rewrite
NGINX as a reverse proxy in front of a TYPO3 maintenance bannerWith a rewrite ^/(.*)$ /maintenance.html?backref=$1 pattern with a follow-up directive — a common maintenance-window template in the German estateMaintenance window via error_page instead of rewrite; or maintenance window without a backref capture

Anyone running TYPO3 or Sylius platforms in the German Mittelstand via an NGINX reverse proxy on Hetzner Cloud, Hetzner Dedicated, AWS EC2 or Azure VMs is affected by default — the share of platforms without a rewrite directive in the NGINX path is small in the DACH corpus. We treat the estate operationally as “patch NGINX and lint the config” and follow the audit path: configuration lint first, then version audit, then patch in the maintenance window.

Impact

The operational severity is set by three factors: the trigger cost (unauthenticated, one HTTP request), the exposure surface (NGINX as front edge), and the exploit-realisation stage (worker crash guaranteed, RCE conditional).

The trigger cost is low. The attacker needs no account, no session, no token. A single HTTP request against a path that falls under a vulnerable rewrite directive is enough. That makes the finding different from the Composer token leak (a local pipeline detail) and the node-ipc incident (a local build pipeline detail): NGINX Rift sits on the internet-facing frontline.

The exposure surface is wide. By the latest available W3Techs estimates, NGINX serves a low-30s percentage range of global web-server load and is the most common reverse proxy in front of TYPO3/Sylius in the German Mittelstand PHP estate. The real distribution pattern is not standalone NGINX hosts but NGINX configuration templates across the platform estate, the majority of which use rewrite directives with unnamed captures — the standard path is rewrite ^/old/(.+)$ /new/$1?token=..., and the token pattern contains special characters such as + or &.

The exploit-realisation stage is asymmetric. Worker crash is guaranteed: the heap overflow hits the current worker, NGINX restarts the worker automatically, but the crash is observable and costs availability. RCE is conditional: on hosts with ASLR disabled, the heap-spray technique from the PoC repository is directly usable; on hosts with ASLR enabled, exploitation is considerably more involved. In the German Mittelstand estate, ASLR is on by default on modern Linux distros (Debian 12+, RHEL 9+, Ubuntu 22.04+); on older legacy hosts (Debian 10/11, CentOS 7, Ubuntu 18.04) the configuration is uneven.

Business impact of a successful exploit on a tenant platform is in the worst case the front-edge takeover: anyone who gains NGINX worker RCE sits on the TLS endpoint, on the reverse-proxy layer and therefore above the tenant PHP layer. That is the lead-in for man-in-the-middle against tenant users, persistent backdoor installation in the NGINX configuration path, or lateral movement into the PHP backend behind it. In the simpler case the impact is a recurring DoS wave that disrupts the tenant platform without compromising the backend stack.

Mitigation / immediate actions

Three paths, depending on platform discipline.

Path 1 — Patch to the fixed line

Distribution patches have been rolled out since 13 May 2026. AlmaLinux has the patched line in the testing channel, Debian security updates are flowing, NGINX Plus ships directly through the official repo.

 

# Debian / Ubuntu — security update with distro backport
sudo apt update
sudo apt install --only-upgrade nginx
nginx -v
# expected: nginx version: nginx/1.30.1 (or distro backport state)

# RHEL / AlmaLinux / Rocky — via the nginx stream module
sudo dnf module reset nginx
sudo dnf module enable nginx:1.30
sudo dnf update nginx

# NGINX Plus through the official repo
sudo apt update
sudo apt install nginx-plus
nginx -v
# expected: nginx version: nginx/1.27.5 (nginx-plus-r36-p1)

 

After the update, reload NGINX rather than restart — reload lets open connections finish cleanly while the new workers already start with the patch.

 

sudo systemctl reload nginx
# or
sudo nginx -s reload

 

Path 2 — Configuration lint against the trigger conditions

The patch closes the code path, but the structural vulnerability remains in the configuration. A rewrite directive with an unnamed capture, a question-mark replacement and a follow-up directive remains a fragile configuration path even after the patch, capable of triggering similar findings in the future. Linting in the platform template is the more durable mitigation.

 

# Search for the risky pattern across all NGINX configuration files
sudo grep -rEHn 'rewrite.*\$[0-9]+.*\?' /etc/nginx/ \
  | grep -v '^[[:space:]]*#'

 

When a hit appears, replace the unnamed capture ($1, $2) with a named capture using the (?<name>…) syntax.

 

# Before (risky)
location /old/ {
    rewrite ^/old/(.+)$ /new/$1?token=abc;
}

# After (lint-safe)
location /old/ {
    rewrite ^/old/(?<path>.+)$ /new/$path?token=abc;
}

 

Named captures run through both escaping functions identically. The sizing path and the write path are consistent, and the heap-overflow path is closed.

Path 3 — WAF layer as a protection line for unpatched hosts

If the patch cannot land in the 24-hour maintenance window (for example because a platform migration is in flight), the trigger condition can be blunted at the WAF layer. The PoC repository shows a specific request pattern that triggers the exploit chain. A WAF rule on the Cloudflare edge, AWS WAF or a ModSecurity front can catch requests with conspicuous path parameters (+, %, & in URL path segments combined with query-string manipulation).

 

# Example: ModSecurity rule as a stopgap
SecRule REQUEST_URI "@rx (\+|\%|\&).*\?.*\$" \
    "id:90042945,phase:1,deny,log,msg:'CVE-2026-42945 trigger pattern',\
     tag:'CVE-2026-42945'"

 

A WAF layer is not a substitute for the patch. It catches the currently known exploit pattern but not necessarily future variants in the same class. It buys time until the maintenance window is through.

Detection / verification

Three complementary paths.

Path 1 — Version audit across the NGINX estate

First layer: a version inventory across the entire tenant estate.

 

# Collect the nginx version on all hosts via Ansible, Puppet or a custom audit script
ansible all -m shell -a "nginx -v 2>&1" --become

# Filter out hits on unpatched versions
ansible-playbook nginx-version-audit.yml \
  --extra-vars "fail_below=1.30.1"

 

For Kubernetes ingress estates, additionally check the ingress controller image tags:

 

# ingress-nginx image version on all clusters
kubectl get pods -A -l app.kubernetes.io/name=ingress-nginx \
  -o jsonpath='{range .items[*]}{.metadata.namespace}/{.metadata.name}: {.spec.containers[0].image}{"\n"}{end}'

# expected: registry.k8s.io/ingress-nginx/controller:v1.13.x or newer

 

Path 2 — Configuration audit on the trigger pattern

The second layer is the configuration lint from mitigation path 2 — but as a systematic audit across the entire NGINX estate, not a single-host run.

 

# Audit script across all NGINX hosts in the platform
for host in $(ansible-inventory --list | jq -r '.all.hosts[]'); do
  echo "## Host: $host"
  ssh "$host" "sudo grep -rEHn 'rewrite.*\\\$[0-9]+.*\\?' /etc/nginx/ 2>/dev/null \
    | grep -v '^[[:space:]]*#' | head -20"
done

 

Sort hit hosts into a separate patch cohort — they need patch plus configuration lint, not just patch.

Path 3 — Access-log audit on the exploit pattern

When the platform runs access logs with query-string retention (the standard for TYPO3 and Sylius platforms under tenant audit obligation), the exploit pattern can be checked retrospectively.

 

# Access-log search for the typical exploit pattern
sudo grep -E '"[A-Z]+ [^"]*[\+\%\&][^"]*\?[^"]*HTTP' /var/log/nginx/access.log \
  | awk '{print $1, $4, $5, $7}' \
  | sort -u

 

Path 4 (optional) — Falco rule for NGINX worker crashes

Worker crashes from the heap overflow show up in dmesg and the NGINX error log. A Falco rule picks up the correlation.

 

# /etc/falco/rules.d/nginx-rift-detection.yaml
- rule: NGINX worker process killed by signal SEGV
  desc: NGINX worker exited with SIGSEGV — possible CVE-2026-42945 exploitation
  condition: >
    spawned_process and
    proc.pname = "nginx" and
    proc.exepath endswith "nginx" and
    evt.type = procexit and
    proc.exitcode = -11
  output: >
    NGINX worker SIGSEGV: pid=%proc.pid cmdline=%proc.cmdline
  priority: WARNING
  tags: [nginx, cve-2026-42945, segfault]

 

The reproduction is documented in the public repository on GitHub: five lines of configuration, a curl call, a worker crash. On an isolated test host (separate VM, no tenant traffic, ASLR explicitly disabled for the full path or enabled for the DoS path) the finding can be reproduced. Do not run it on a production NGINX — the worker crash takes open tenant connections down with it.

Operator recommendation

The operational question is not “do we patch to 1.30.1?” but “in which maintenance window and in which order?”. The patch has been available for two days, the PoC has been public since yesterday — the window for unnoticed mass exploitation opens today, Friday, with the weekend ahead.

Operational Decision Block — patch now vs. config lint

German Mittelstand

Patch to nginx 1.30.1 via the distribution patch mechanism (apt, dnf) in the standard weekly maintenance window. Run a configuration lint across the tenant NGINX configurations — replace unnamed captures with named ones, check question-mark replacements for consistency, review set directives after rewrite for structural necessity. Add a linting rule to the platform configuration template so future tenant configs do not reintroduce the pattern. Activate the WAF layer (Cloudflare, AWS WAF, ModSecurity) as a stopgap only when the patch slips by more than 48 hours.

Enterprise

In addition to the Mittelstand line: a pre-receive hook on the central NGINX configuration repository that marks unnamed captures with question-mark replacements as a hard block. Patch NGINX Plus to R36 P1 via the official repo (R32 P2 / R33 P3 / R34 P3 / R35 P2 / R36 P1 are the current patch lines depending on platform inventory). Access-log audit on the exploit pattern across the last seven days retrospectively; on hits, tenant-scoped reconstruction of the affected requests. WAF front-edge rule as default, not stopgap — the pattern-filter layer belongs in an enterprise platform as a fixed component.

Kubernetes platform

If you run NGINX as an ingress controller on Kubernetes platforms (ingress-nginx, NGINX Ingress, Tekton-driven platforms), patch the ingress controller via the Helm chart pin to the patched image line. Helm chart pin to ingress-nginx-v1.13.x or newer (NGINX Ingress 5.0+ accordingly). Audit snippet annotations (nginx.ingress.kubernetes.io/server-snippet, nginx.ingress.kubernetes.io/configuration-snippet) against the rewrite pattern — use named captures here too, not $1. Roll out the Falco rule for NGINX worker SIGSEGV cluster-wide so crash patterns over the weekend are not missed.

Declarative stacks (NixOS / Talos / Flatcar / Wolfi)

Update the NixOS modules for nginx once the nixpkgs bump to 1.30.1 is merged (as of 15 May: the PR is merged into nixos-unstable, channel sync in progress). Wolfi-based nginx packages pick up the patch through the apk index update for the current week — image rebuild on Wolfi base with apk upgrade nginx, Helm chart pin to the new image tag, cluster rollout in the standard maintenance window. Self-hosted edge hosts on Talos or Flatcar base inherit the patch with image promotion; declarative stacks have the advantage that the configuration template can be subjected to the lint at the same time — the NixOS module wrapper for services.nginx can enforce the named-capture pattern directly.

What we actually did

We ran four disciplines on 14 May 2026 between 16:00 and 20:00 CEST and on 15 May 2026 between 09:00 and 13:00 CEST.

First the configuration lint: scanned every NGINX configuration in the tenant platforms via a central audit script. 23 NGINX hosts across 17 tenant platforms, 19 of them with rewrite directives in the active configuration. 14 hosts had unnamed captures, 11 of those with question marks in the replacement, 8 of those with a follow-up set or rewrite directive. Eight directly vulnerable configuration points across five tenant platforms — all in TYPO3 backend-locking patterns or Sylius multi-channel routing.

Then the configuration pin to named captures: rewrote all eight points to named captures ((?<path>.+) instead of (.+) with $1). Merged the platform team's pull requests in cohorts (2 tenants per cohort), each with a smoke test against the live tenant URL that verifies rewrite-path consistency. One tenant required a two-stage migration maintenance window because the Sylius channel routing contained several nested rewrites and the smoke test returned a path regression hit — we landed that configuration change at 12:00 CEST on 15 May.

Then the patch rollout: lifted all 23 NGINX hosts to nginx 1.30.1 via the distro patch path. The 17 hosts on Debian 12 had the backport available from the evening of 13 May in the security updates stream; the 5 hosts on AlmaLinux 9 received the backport from the testing channel via an explicit dnf install from the nginx:1.30 module; a single host on NGINX Plus R34 received the nginx-plus-r34-p3 update from the official NGINX repo. Patch cohorts of three hosts with a 15-minute observation window in which tenant platform health checks ran in parallel.

Finally the detection stage: activated the Falco rule NGINX worker process killed by signal SEGV on the 23 hosts. Added the WAF rule pattern on the Cloudflare edge hosts of the three platforms that sit behind Cloudflare — as a default layer, not a stopgap. Ran an access-log audit on the exploit pattern across the last seven days retrospectively — no hits, the pattern has not appeared in tenant traffic in mass-exploit mode. The detection pattern remains active for the next 30 days, because the PoC is public and mass-exploit waves typically arrive a week after patch disclosure.

What we did not do: restart the NGINX service on all hosts at the same time. The service reload (systemctl reload nginx) finishes open connections cleanly while the patch is already active in the new workers. A restart would have severed open tenant connections, which during business hours on a live-traffic tenant platform produces a visible service dip.

The structural lesson from this episode does not sit in the heap overflow, but in the relationship between the sizing path and the write path in an old codebase. NGINX has worked stably for 18 years because the discrepancy between ngx_escape_uri() and ngx_escape_html() in the special-character set never became sharp through a typical configuration class. The lesson lies in configuration discipline. Named captures are not a pure code-style question; they are a robustness discipline against precisely this class of findings that arise from internal-function inconsistencies. That is the structural class in which the web-server layer currently stands: not compromised by malicious traffic, but by old consistency assumptions that break in rare configuration paths. In the current May week we have seen exactly this pattern in Apache mod_http2 (CVE-2026-23918 from 13 May) and now in NGINX Rift — both HTTP-server classes sit in the same structural weakness.

In the broader architecture arc the answer is not a single patch but web-server configuration discipline as its own platform component. Patching to the fixed line is the emergency measure. The structural answer is a curated NGINX configuration template with named captures as the default, a pre-receive hook against unnamed captures in the central configuration repo, and a quarterly configuration audit on comparable consistency paths. Three disciplines that would not individually have prevented NGINX Rift, but together reduce the impact surface of a comparable incident to a few configuration paths rather than 23 hosts.

Frequently asked questions about CVE-2026-42945 (NGINX Rift)

Do TYPO3 tenant platforms with an NGINX reverse proxy have to patch immediately because of CVE-2026-42945?+

Yes, when the NGINX configuration contains a rewrite directive with an unnamed capture ($1, $2) plus a question mark plus a follow-up directive and the host is internet-facing. TYPO3 backend-locking patterns (for example rewrite ^/typo3/(.+)$ /typo3/$1?login=1) and tenant multi-domain rewrites fall exactly into this pattern. Patching to nginx 1.30.1 plus a configuration lint on named captures is the direct mitigation. Anyone using only proxy_pass without rewrite is not on the trigger path — but the host still gets the patch as default maintenance.

How do I check whether my Sylius shop behind NGINX falls into the trigger class?+

Run sudo grep -rEHn 'rewrite.*\$[0-9]+.*\?' /etc/nginx/ on the platform's NGINX hosts — the search picks up the “rewrite with unnamed capture and a question mark” pattern. If the matching path continues with a set or another rewrite directive in the same location or server block, the configuration is in the vulnerable class. Sylius multi-channel routing frequently uses precisely this pattern for channel-specific asset path rewrites; a configuration audit against the Sylius NGINX template is mandatory.

Are NGINX hosts with ASLR enabled protected against the RCE variant?+

Not fully. Active ASLR makes exploitation of the heap-spray technique from the PoC repository considerably harder, but not impossible — supplementary heap-spray techniques can defeat the protection, and the DoS path (worker crash) works independently of ASLR. Hosts with ASLR enabled (default on Debian 12+, RHEL 9+, Ubuntu 22.04+) buy time, but the patch still has to land in the 96-hour corridor, not the standard monthly cycle.

Do Kubernetes ingress controllers (ingress-nginx) have to be redeployed because of CVE-2026-42945?+

Yes, when the ingress controller image version is below v1.13.x and the ingress annotations contain snippet-based custom rewrites. Helm chart pin to ingress-nginx-v1.13.0 or newer, snippet audit on the trigger pattern (check nginx.ingress.kubernetes.io/configuration-snippet annotations), rollout via the standard tenant cluster patch procedure. Activate the Falco rule for NGINX worker SIGSEGV cluster-wide so crash patterns are not missed during the transition phase.

Is the NGINX Rift finding structurally related to the Apache mod_http2 finding from 13 May?+

Structurally in part, operationally yes. Both incidents sit on the web-server frontline and arise from old consistency assumptions in HTTP server internals (Apache: double-free in the HTTP/2 frame handler; NGINX: heap overflow through differing escaping sets in the sizing and write paths). Anyone who took the Apache mod_http2 patch on 13 May and now takes the NGINX Rift patch has the full HTTP frontline of the May week covered. The Sunday review post “Webserver Sprint May 2026” pulls both findings together.

Which configuration discipline best defends against future comparable NGINX findings?+

Named captures as the default in the platform configuration template ((?<name>…) instead of $1), a pre-receive hook in the central NGINX configuration repo against unnamed captures, a quarterly configuration audit on structurally fragile paths (rewrite chains with multiple re-escape paths, if blocks with set follow-ups, map directives with dynamic default values). These disciplines are not a patch alternative, but they reduce the impact surface of the next consistency gap on the web-server internal path — and there will be one, because the codebase contains 18-year-old functions with subtle discrepancies.

Conclusion

CVE-2026-42945 is, in the May patch cycle, a structural flaw of the most serious class: CVSS 9.2, unauthenticated, internet-facing, 18 years old, present in mainline and NGINX Plus in parallel, with a public PoC since 14 May. What makes the finding operationally tolerable is the rapid patch availability (13 May from 07:00 UTC) and the clear trigger condition (unnamed capture + question mark + follow-up directive), which can be addressed at the configuration layer.

The question is not whether nginx 1.30.1 is enough. The patch line is enough for the concrete path NGINX closed on 13 May. The question is whether your platform runs web-server configuration discipline as its own component, or whether NGINX configurations continue to drift through tenant maintenance as a “platform detail”. The structural answer is the first option: curated configuration templates, named captures by default, a pre-receive hook against the fragile pattern, a quarterly configuration audit on comparable consistency paths.

Personal background and technical detail on web-server discipline in the German Mittelstand: ole-hartwig.eu.

Before the first crafted request crashes the worker — let's talk about your NGINX configuration discipline.

We audit, patch and lint production NGINX reverse proxies against CVE-2026-42945.

Configuration audit across all TYPO3 and Sylius NGINX templates for the trigger pattern, pin to named captures in the platform template, patch rollout to nginx 1.30.1 or NGINX Plus R36 P1 in the standard maintenance window, WAF layer as a default protection line on front-edge hosts, Falco detection for NGINX worker SIGSEGV cluster-wide, access-log audit for the exploit pattern in retrospect.

If you operate TYPO3 or Sylius platforms in the German Mittelstand, run NGINX as a reverse proxy or Kubernetes ingress, or are responsible for a curated web-server configuration line — let's talk before the weekend, before the first mass-exploit attempt walks through the edge hosts. Book a slot directly, or take a look at our standard line for DevSecOps platform operations and TYPO3 platform operations first.

Book a slot directly

About the author

[Translate to English:] Foto von Kai Ole Hartwig.

Kai Ole Hartwig

Founder · Moselwal Digitalagentur · OnlyOle

Programming since 2002 – self-taught, set up my own business with KO-Web in 2012, now Moselwal. Over 100 projects, with a focus on security, performance, automation and quality.