CVE-2026-23918 — der mod_http2-Double-Free in Apache 2.4.66 im Betreiberüberblick
Am 5. Mai 2026 hat das Apache-HTTPD-Team die Lücke offengelegt, die seither als CVE-2026-23918 geführt wird: ein Double-Free in mod_http2, genauer im Stream-Cleanup-Pfad von h2_mplx.c. Fixed in Apache HTTP Server 2.4.67. CVSS 8.8. Eine TCP-Verbindung, zwei HTTP/2-Frames, und der Worker stürzt ab — auf jedem Default-Deployment mit mod_http2 und multi-threaded MPM. Auf Debian-abgeleiteten Distributionen, in denen die Apache Portable Runtime den mmap-Allokator als Default fährt, ist die Lücke kein reiner DoS, sondern remote ausnutzbar zu Remote Code Execution. Zwei öffentliche PoCs auf GitHub liefern sowohl den DoS- als auch den Detection-Vektor.
Was ist passiert? Wer am Abend des 5. Mai noch HTTP/2 auf Apache 2.4.66 unter Debian, Ubuntu oder einem davon abgeleiteten Image laufen lässt, fährt seit acht Tagen einen Pre-Auth-RCE-Pfad. Kein CISA-KEV-Eintrag, keine dokumentierte aktive Ausnutzung, aber öffentliche PoCs und eine triviale Trigger-Sequenz.
Warum relevant? TYPO3- und Sylius-Hosting im DACH-Mittelstand läuft 2026 weiterhin überwiegend auf Apache 2.4 mit mod_http2 und Debian-/Ubuntu-Base. Wer den HTTP-Front-End-Stack im Eigenbetrieb hat, hat heute eine konkrete 48-Stunden-Patch-Pflicht.
Wer sollte weiterlesen? Plattform-Betreiber von TYPO3- oder Sylius-Hostings, Betreiber gemischter PHP-Webserver-Flotten, Teams, die Apache 2.4.66 in Container-Images, Docker-Compose-Stacks oder Helm-Charts gepinnt führen.

TL;DR — 90 Sekunden
Ein triviales Crash-Pattern, ein dokumentierter RCE-Pfad auf Debian-Default und acht Tage seit Disclosure mit öffentlichem PoC.
- Betroffen?
Apache HTTP Server 2.4.66 mit aktiviertem
mod_http2und multi-threaded MPM (event,worker). Praktisch alle TYPO3- und Sylius-Hostings im DACH-Mittelstand, die HTTP/2 für Performance aktiviert haben. Frühere 2.4er-Linien sind nach Apache-Beschreibung nicht betroffen.- Risiko?
DoS trivial — eine TCP-Verbindung, zwei HTTP/2-Frames. RCE remote auf Debian-/Ubuntu-Default mit APR-
mmap-Allokator. CVSS 8.8.- Sofortmaßnahme?
Auf Apache 2.4.67 upgraden. Wenn das Wartungsfenster nicht in den nächsten 24 Stunden zu öffnen ist:
Protocols http/1.1setzen,mod_http2temporär deaktivieren.- Empfehlung?
Mittelstand: Distribution-Patch im laufenden Wartungsfenster, Stopgap-HTTP/1.1-Fallback bis dahin. Enterprise: kuratierte Image-Promotion auf gepatchte Base-Images, WAF-Regel auf die Frame-Sequenz HEADERS → RST_STREAM mit non-zero error code.
- Kritikalität?
Siehe Hero-Badge —
high.
Was ist das Problem?
Die Lücke ist im Stream-Cleanup-Pfad von mod_http2 angesiedelt, technisch in h2_mplx.c. Die Trigger-Sequenz ist nüchtern: ein Client sendet einen HTTP/2-HEADERS-Frame, sofort gefolgt von einem RST_STREAM-Frame mit einem nicht-null Error-Code, auf demselben Stream, bevor der Multiplexer den Stream überhaupt registriert hat. Zwei nghttp2-Callbacks feuern in Folge: on_frame_recv_cb für das RST und on_stream_close_cb für den Close. Beide rufen anschließend h2_mplx_c1_client_rst → m_stream_cleanup, was denselben h2_stream-Pointer zweimal auf das spurge-Cleanup-Array schiebt. Wenn c1_purge_streams später über spurge iteriert und h2_stream_destroy aufruft, trifft der zweite Aufruf bereits freigegebenen Speicher. Das ist die klassische Double-Free-Bedingung.
Der DoS-Pfad ist damit trivial. Ein einziger angreifender Client kann mit einer einzigen TCP-Verbindung und zwei Frames einen Worker zum Absturz bringen. Apache restartet den Worker im Standardmodus, aber wenn der Angreifer das in Schleife fährt, geht die effektive Verfügbarkeit der HTTPS-Frontline gegen Null.
Der RCE-Pfad ist die strukturell schwere Komponente. Die Apache Portable Runtime kennt zwei Allokatoren für ihren Pool-Mechanismus: einen privaten Heap-Allokator und den mmap-basierten Allokator. Auf Debian, Ubuntu und allen davon abgeleiteten Distributionen ist der mmap-Allokator der Default. Ein Angreifer kann die freigegebene virtuelle Adresse über mmap-Reuse mit einer eigens präparierten, gefälschten h2_stream-Struktur belegen, deren Pool-Cleanup-Funktion auf system() zeigt, und die Apache-Scoreboard-Memory als stabilen Container nutzen, um die Ausnutzung deterministisch zu machen.
Wer ist betroffen?
Eine kompakte Übersicht über betroffene und nicht betroffene Konfigurationen:
| Stack | Betroffen | Nicht betroffen / Bedingungen |
|---|---|---|
| Apache HTTP Server 2.4.66 | Default-Build mit mod_http2 aktiviert und multi-threaded MPM | 2.4.67 und höher; mod_http2 deaktiviert; reines prefork-MPM ohne HTTP/2-Modul |
| Debian 12 / 13 | Apache 2.4.66 aus dem Distro-Repo, APR mit mmap-Allokator (Default) — RCE-Pfad offen | Apache 2.4.67-Backport eingespielt oder HTTP/2 deaktiviert |
| Ubuntu 24.04 / 26.04 LTS | Apache 2.4.66 aus dem Distro-Repo, APR mmap-Default — RCE-Pfad offen | 2.4.67-Update via unattended-upgrades eingespielt |
| RHEL / Rocky / AlmaLinux 9 | Apache 2.4.66 aus dem AppStream; APR typischerweise privater Heap-Allokator, nur DoS-Pfad | 2.4.67-Update via dnf upgrade eingespielt |
Docker httpd:2.4, httpd:2.4.66 | Alle Image-Tags vor dem 2.4.67-Bump | Neu gezogene httpd:2.4-Tags nach dem Bump |
| Wolfi-basierte Apache-Container | Alle vor dem apk-Index-Update der laufenden Woche | Neu gebautes Image nach apk upgrade |
| nginx, Caddy, HAProxy, Traefik | Nicht betroffen vom Apache-Cluster — eigene HTTP/2-Implementationen | — |
| TYPO3-/Sylius hinter Reverse-Proxy | Apache als Reverse-Proxy mit HTTP/2 nach außen ist direkt betroffen | Apache als reines Origin hinter nginx-Proxy mit HTTP/1.1-Downstream nicht betroffen |
Wer in den letzten acht Tagen Apache 2.4.66 mit mod_http2 auf einer Debian-/Ubuntu-Basis im Internet exponiert hat, hat damit acht Tage einen Pre-Auth-RCE-Pfad gefahren. Wir behandeln den Bestand operativ als „bis zum Beweis des Gegenteils kompromittierbar“ — kein Vollalarm-Zustand „kompromittiert“, aber kein Vertrauensstand wie vor dem 5. Mai.
Auswirkungen
CVSS-Wert 8.8 (High), Apache klassifiziert das Advisory als Critical wegen der Kombination aus trivialem DoS-Pfad und dokumentiertem RCE-Pfad auf Debian-Default. Im DACH-Mittelstand ist die betroffene Konstellation die Standardform: Apache 2.4 ist der Default-Webserver in Plesk, cPanel, ISPConfig und als Standard-Container-Image für PHP-Workloads. HTTP/2 ist seit etwa 2018 auf den meisten DACH-Mandanten-Hostings aktiviert.
Eine kompromittierte Webserver-Frontline auf einem TYPO3- oder Sylius-Mandanten-Host bedeutet operativ den Zugriff auf den lokalen Klartext-Source-Code, die laufenden PHP-FPM-Pools mit allen aktiven Backend-User-Sessions, die Datenbank-Verbindung über das in der Konfiguration hinterlegte Credential-Paar, den Cloud-Provider-Token aus dem systemd-Unit oder dem Container-Init, den Backup-Pfad und damit alle historischen Inhalte des Mandanten. Auf Sylius-Hostings kommt der direkte Zugriff auf das Stripe-/Mollie-/Adyen-API-Credential hinzu, wenn es als Umgebungsvariable konfiguriert ist.
Mitigation und Sofortmaßnahmen
Drei Pfade, je nach Wartungsfenster und Distribution-Disziplin.
Pfad 1 — Distribution-Patch (empfohlen)
# Debian / Ubuntu
sudo apt-get update
sudo apt-get install --only-upgrade apache2
# RHEL / Rocky / AlmaLinux
sudo dnf upgrade httpd
# Version prüfen
apache2 -v # bzw. httpd -v
# Erwartet: Apache/2.4.67 oder höher
Pfad 2 — Container-Image neu ziehen
# Standard-Docker-Image
docker pull httpd:2.4
docker pull httpd:2.4-alpine
# In Compose-Setups
docker compose pull
docker compose up -d --force-recreate webserver
# In Helm-Charts
helm upgrade <release> <chart> \
--set image.tag=2.4.67 \
--reuse-values
Pfad 3 — Stopgap, wenn das Wartungsfenster nicht in 24 Stunden öffnet
# /etc/apache2/conf-available/disable-http2.conf
# Apache zwingt HTTP/1.1 zurück, mod_http2 wird nicht angesprochen
Protocols http/1.1
# Linux: Konfiguration aktivieren und Apache reloaden
sudo a2enconf disable-http2
sudo systemctl reload apache2
# RHEL-Linie
echo "Protocols http/1.1" | sudo tee /etc/httpd/conf.d/disable-http2.conf
sudo systemctl reload httpd
Verifizieren, dass HTTP/2 tatsächlich aus ist:
curl --http2 -I mandant.example.com 2>&1 | head -5
# Erwartet: HTTP/1.1 200 OK (nicht HTTP/2 200)
ModSecurity erkennt die Trigger-Sequenz an der TCP-Schicht nicht direkt — eine WAF-Regel ist primär für Wiederholungs-Trigger-Versuche sinnvoll, nicht als alleinige Mitigation. Der Patch bleibt die einzige vollständige Lösung.
Detection und Prüfung
Drei komplementäre Detection-Pfade, die wir parallel fahren.
Pfad 1: Access-Log-Pattern für unrealistische HEADERS-/RST-Sequenzen
Auf den letzten 7–10 Tagen prüfen. Apache logt RST_STREAM-Frames im normalen mod_http2-Logging-Pfad nicht detailliert; der Indikator ist indirekt — kurze Connection-Lifetime mit sofortigem Stream-Reset und HTTP-Status 400/499.
# Apache-Error-Log auf mod_http2-Crash-Hinweise prüfen
sudo grep -E "h2_(stream|mplx)|child pid .* exit signal|Segmentation fault" \
/var/log/apache2/error.log* | tail -50
Pfad 2: Falco-Regel für Apache-Worker-Crashes mit ungewöhnlichem Process-Tree
# /etc/falco/rules.d/apache-h2-crash.yaml
- rule: Apache worker unexpected exit with mod_http2
desc: Apache worker died abnormally while serving mod_http2 — possible CVE-2026-23918 exploitation
condition: >
proc_exit and
proc.name in (apache2, httpd) and
proc.exitcode != 0 and
proc.aname[1] in (apache2, httpd)
output: >
Apache worker exited abnormally: pid=%proc.pid exitcode=%proc.exitcode cmdline=%proc.cmdline
priority: WARNING
tags: [apache, mod_http2, cve-2026-23918]
Pfad 3: Tetragon-TracingPolicy als eBPF-Alternative
apiVersion: cilium.io/v1alpha1
kind: TracingPolicy
metadata:
name: apache-mod-http2-anomaly
spec:
kprobes:
- call: "sys_munmap"
syscall: true
args:
- index: 0
type: "uint64"
- index: 1
type: "size_t"
selectors:
- matchBinaries:
- operator: "In"
values:
- "/usr/sbin/apache2"
- "/usr/sbin/httpd"
matchActions:
- action: "Audit"
PoC-Validierung im eigenen Mandanten-Bestand
Wer eine eigene Staging-Umgebung mit Apache 2.4.66 hat, kann mit einem der öffentlichen PoCs die Detection-Regel im passiven Modus validieren — der xeloxa-PoC unterstützt einen --detection-only-Modus, der den Crash-Trigger nicht ausführt, sondern nur die Fingerprint-Sequenz sendet. Nicht gegen Produktiv-Hosts laufen lassen.
Betreiberempfehlung
Die operative Frage ist nicht „patchen oder nicht?“, sondern „wann öffnet sich das nächste Wartungsfenster?“ und „wer trägt das Risiko der acht Tage zwischen Disclosure und Eigenpatch?“.
Operational Decision Block — Patch-Fenster jetzt vs. Stopgap-Fallback
- Sofort patchen, wenn der Host eine TYPO3- oder Sylius-Mandanten-Frontline trägt, öffentlich auf 443 erreichbar ist, und Apache 2.4.66 mit
mod_http2aus dem Debian-/Ubuntu-Repo läuft. - Stopgap HTTP/1.1-Fallback einsetzen, wenn das Wartungsfenster nicht in 24 Stunden öffnet, der Host aber öffentlich erreichbar ist. Performance-Einbruäch durch HTTP/2-Verzicht ist messbar, aber tragbar.
- Wartungsfenster im Standardzyklus möglich, wenn der Host hinter einem HTTP/1.1-Downstream-Reverse-Proxy steht und der
mod_http2-Pfad nicht erreichbar ist. - Reine Awareness, wenn keine Apache-2.4.66-Instanz im Mandanten-Bestand erreichbar ist (nginx-Only-Stack).
Mittelstand
Distribution-Patch im laufenden Wartungsfenster. Wer unattended-upgrades auf Debian/Ubuntu konfiguriert hat, sollte den Lauf der nächsten 24 Stunden überprüfen — der 2.4.67-Bump kommt typischerweise mit der apt-security-Linie, braucht keinen Reboot, aber den Apache-Reload. Stopgap-HTTP/1.1-Fallback ist die zweite Verteidigungslinie.
Enterprise
Kuratierte Image-Promotion auf gepatchte Apache-2.4.67-Base-Images. WAF-Regel auf die HEADERS-/RST-Frame-Sequenz als zusätzliche Schicht, die auch nach dem Patch sinnvoll bleibt. Mandanten-Frontline-Hosts in den 24h-Frühpatch-Pool nehmen, nicht in den 14-Tage-Standardzyklus.
Kubernetes-Plattform
Container-Images mit Apache 2.4.66 neu bauen. Helm-Chart-Pin auf gepatchten Tag ziehen, Cluster-weiten Rollout im Standard-Wartungsfenster, mit Vorzug für Mandanten-Frontline-Hosts. Falco-Regel aus der Detection-Sektion Cluster-weit ausrollen.
- Sub-Szenario Kubernetes-Ingress mit Apache-Sidecar: Sidecar-Image-Tag im Pod-Template-Spec aktualisieren, Rolling-Update über
kubectl rollout restart. - Sub-Szenario Helm-basierte TYPO3-Charts:
image.repositoryundimage.tagimvalues.yamlprüfen, oft auf älteren Apache-Tags gepinnt.
Deklarative Stacks (NixOS / Talos / Flatcar / Wolfi)
NixOS-Module für apacheHttpd aktualisieren, sobald der nixpkgs-Bump für 2.4.67 gemerged ist (Stand 13.05.: bereits gemerged, in den meisten Channels verfügbar). Wolfi-basierte Apache-Container schließen den Patch über das apk-Index-Update der laufenden Woche — Image-Rebuild auf Wolfi-Base mit apk upgrade triggern.
Was wir konkret getan haben
Wir haben am 13.05.2026 zwischen 07:15 und 08:30 CEST drei Disziplinen durchgezogen.
Zuerst die Inventur: alle Mandanten-Hosts unter eigenem Betrieb mit apache2 -v bzw. httpd -v abgefragt, plus die Container-Tags aller TYPO3- und Sylius-Mandanten-Images mit docker image ls | grep httpd. Drei Hosts standen auf 2.4.66 (alle Debian-12-Base, alle mit mod_http2 aktiviert), zwei Container-Images auf httpd:2.4.66. Die übrigen Hosts laufen auf nginx oder bereits auf 2.4.67.
Dann der Patch: apt-get install --only-upgrade apache2 auf den drei betroffenen Hosts, Container-Images mit docker pull httpd:2.4 && docker compose up -d --force-recreate webserver neu gezogen. Auf einem Plesk-managed Host musste der Distribution-Patch über das Plesk-Web-UI gezogen werden, weil das apt-Repo dort durch ein Plesk-Mirror überlagert ist — Notiz im Mandanten-Onboarding-Leitfaden ergänzt.
Schließlich die Detection-Stage: Falco-Regel Apache worker unexpected exit with mod_http2 in zwei Cluster-Plattformen aktiviert. Access-Log-Pattern-Check auf den letzten 10 Tagen ergab in keinem Mandanten-Log auffallende Häufungen kurzer Connection-Lifetimes mit Stream-Reset.
Die strukturelle Lehre dieser Lücke liegt im Zusammenspiel zwischen nghttp2-Callback-Reihenfolge und der APR-Allokator-Wahl. Der Fehler in 2.4.66 liegt nicht in nghttp2, sondern in der Annahme von mod_http2, dass die beiden Callbacks bei einem unregistrierten Stream nicht beide den Cleanup-Pfad triggern. Sie tun es. Die APR-Allokator-Wahl ist der zweite Hebel: auf Debian-basierten Distributionen wird historisch mmap als Default kompiliert. Genau dieser mmap-Default ist der Hebel, der aus dem Double-Free einen Pre-Auth-RCE-Pfad macht. Das ist der direkte Anschluss an die Linie, die wir mit CVE-2026-31431 „Copy Fail“ als „die Distribution ist die Architektur“-Befund aufgemacht haben.
Häufige Fragen zum Apache-mod_http2-Double-Free (CVE-2026-23918)
Müssen TYPO3-Hostings unter Plesk oder cPanel wegen CVE-2026-23918 sofort gepatcht werden?+
Ja, sobald der Plesk- oder cPanel-Mirror den 2.4.67-Bump übernimmt. Plesk hat eine eigene Patch-Welle, die typischerweise 24–72 Stunden nach dem Distribution-Patch erscheint. Bis dahin lässt sich der Stopgap-HTTP/1.1-Fallback über die Plesk-Apache-Tweaks-Sektion (Hosting → Apache & nginx Settings → Additional directives for HTTPS) setzen: Protocols http/1.1. Apache-Reload erfolgt automatisch über die Plesk-Apply-Routine.
Wie prüfe ich, ob mein Sylius-Mandant-Host wirklich Apache 2.4.66 mit mod_http2 fährt?+
apache2 -v (Debian/Ubuntu) oder httpd -v (RHEL) für die Version. apache2ctl -M | grep http2 oder httpd -M | grep http2 für das Modul. curl --http2 -I shop.mandant.example.com für den Live-Check, ob HTTP/2 tatsächlich auf der Mandanten-Frontline aktiv ist.
Sind hinter Cloudflare gehostete TYPO3-Sites automatisch gegen CVE-2026-23918 geschützt?+
Teilweise. Cloudflare terminiert TLS und HTTP/2 selbst und spricht zu den Origin-Hosts typischerweise HTTP/1.1 oder HTTP/2 — die Konfiguration ist im Cloudflare-Dashboard unter Network → HTTP/2 to Origin einsehbar. Wenn HTTP/2 zum Origin deaktiviert ist, ist der Origin-Pfad nicht direkt erreichbar; wenn der Origin-Pfad selbst aber öffentlich auf 443 erreichbar ist (häufiges Setup), bleibt die Lücke offen. Wir empfehlen unabhängig vom Cloudflare-Status zu patchen.
Müssen Wolfi-basierte Apache-Container wegen CVE-2026-23918 neu gebaut werden?+
Ja. Wolfi-basierte apache2-Container schließen den Patch über das apk-Index-Update der laufenden Woche — Image-Rebuild auf Wolfi-Base mit apk upgrade triggern, Helm-Chart-Pin auf das neue Image-Tag, Rollout im Standard-Wartungsfenster.
Reicht der Stopgap-HTTP/1.1-Fallback als alleinige Mitigation für die nächsten Tage?+
Ja, mit Einschränkung. Wer Protocols http/1.1 setzt, deaktiviert den mod_http2-Codepfad vollständig — die Lücke wird nicht mehr erreichbar. Der Performance-Einbruch durch HTTP/2-Verzicht ist messbar (Latency-Erhöhung bei vielen kleinen Assets, weil Multiplexing wegfällt), aber im 24–72-Stunden-Fenster bis zum echten Patch operativ tragbar. Nicht als Dauermitigation laufen lassen.
Hängt der Apache-Befund mit dem VS-Code-Cluster vom 12.05. strukturell zusammen?+
Strukturell nein — die Lücken liegen auf verschiedenen Schichten (Webserver-Frontline vs. Entwickler-Workstation). Operativ ja, weil beide den Mandanten-Plattform-Betreiber in denselben 48-Stunden-Patch-Korridor zwingen. Wer heute beide Patches synchron einspielt, kann den nächsten Mandanten-Wartungsfenster-Termin entlasten.
Fazit
CVE-2026-23918 ist im Mai-Patch-Cycle nicht der spektakulärste Befund — keine aktive Ausnutzung in freier Wildbahn, kein CISA-KEV-Eintrag, kein BSI-Sondergutachten. Was den Befund operativ schwer macht, ist seine Trivialität auf der Trigger-Seite kombiniert mit der strukturellen RCE-Pfad-Bedingung auf Debian-Default. Eine TCP-Verbindung, zwei Frames, ein Mandanten-Host weniger. Und seit acht Tagen liegen die PoCs öffentlich.
Die Frage lautet nicht, ob 2.4.67 ausreicht — sie reicht für den konkreten Codepfad, den Apache am 5. Mai geschlossen hat. Sie lautet, ob Ihre Plattform die HTTP-Front-End-Schicht als eigene Patch- und Detection-Pflicht führt, oder ob Sie die Front-End-Frontline weiterhin als „kommt mit dem Distribution-Update mit“-Komponente behandeln. Die strukturelle Antwort ist die erste Variante, mit eigenem Inventar, eigener Frühpatch-Kohorte und eigener WAF-Regel-Disziplin.
Persönlicher Hintergrund und technische Details zur Härtung von Apache-Frontlines im DACH-Mittelstand: ole-hartwig.eu.
Wir prüfen, patchen und validieren produktive Apache-2.4-Frontlines gegen CVE-2026-23918.
Inventur der TYPO3- und Sylius-Hosting-Bestände, Stopgap-HTTP/1.1-Fallback wo nötig, Distribution-Patch auf 2.4.67 im Wartungsfenster, WAF-Regel-Einbau gegen die HEADERS-/RST-Frame-Sequenz, PoC-basierte Detection-Validierung auf Staging-Umgebungen.
Wenn Sie TYPO3- oder Sylius-Hostings im DACH-Mittelstand betreiben, Apache 2.4 als Mandanten-Frontline im Eigenbetrieb fahren, oder eine kuratierte Container-Image-Linie mit Apache-Base verantworten — sprechen wir vor dem nächsten Mandanten-Wartungsfenster. Schauen Sie sich vorab unsere Standard-Linie für DevSecOps-Plattformbetrieb und TYPO3-Plattformbetrieb an.



