
Proof-of-Concept-Exploit, Ursachenanalyse und Ein-Zeilen-Patch für CVE-2026-97629, eine nginx-TLS-Session-Ticket-Fälschung, die die Client-Zertifikat-Authentifizierung (mTLS) umgeht.
Eine Zeile C. Eine gefälschte TLS-Session. Gefunden, end-to-end bewiesen und koordiniert bis zu einem Fix durch PhiNode Labs.
Ein Proof-of-Concept-Exploit, die Root-Cause-Analyse, der Ein-Zeilen-Patch und die Reproduktionsnachweise für CVE-2026-97629, eine TLS-Session-Ticket-Fälschung in nginx, die die Client-Zertifikats-Authentifizierung (mutual TLS) umgehen kann. Offengelegt gegenüber F5 im Rahmen koordinierter Offenlegung und PhiNode Labs zugeschrieben.
Den vollständigen Write-up lesen: https://phinode.io/nginx-cve-2026-97629.html
„F5 dankt PhiNode Labs dafür, dass sie uns auf dieses Problem aufmerksam gemacht und die höchsten Standards koordinierter Offenlegung eingehalten haben." — F5 Security Advisory K000162606
| CVE | CVE-2026-97629 |
| Advisory | F5 K000162606 · GHSA-862p-pr69-37gq |
| Schweregrad | CVSS 3.1 6.5 / CVSS 4.0 8.3 (F5). Bis zu 10.0 bei mutual-TLS-Deployments |
| Schwachstelle | CWE-908 — Verwendung einer nicht initialisierten Ressource |
| Komponente | ngx_http_ssl_module — ngx_ssl_rotate_ticket_keys() |
| Betroffen | nginx 1.23.2 – 1.31.6, NGINX Plus bis R37 (37.0.5) sowie auf nginx basierende F5-Produkte |
| Behoben | nginx 1.31.7 und 1.30.6, NGINX Plus 37.0.5.1 / 37.1.0.1 |
| Danksagung | PhiNode Labs — [email protected] |
Um TLS-Verbindungen schnell wiederaufzunehmen, versiegelt nginx ein Session-Ticket
mit einem rotierenden Schlüssel und hält drei solcher Schlüssel pro Worker: aktuell,
vorherig, nächster. Während der Rotation kopierte ngx_ssl_rotate_ticket_keys() nur
zwei der drei Slots in jeden Worker; der dritte wurde nach dem Start nie beschrieben.
Bei einem Standard-Linux-Build ist dieser Speicher alles Nullen — derselbe,
vorhersagbare Wert in jedem Worker bei jedem Standard-Deployment.
Der Entschlüsselungs-Callback durchsucht alle drei Slots. Ein Client kann ein gefälschtes Ticket einreichen, dessen 16-Byte-Schlüsselname alles Nullen ist, den unberührten dritten Slot treffen und nginx dazu bringen, es mit AES- und HMAC-Schlüsseln aus lauter Nullen zu entsiegeln, die jeder erraten kann. Von dort aus fälscht ein Angreifer eine gültige Session mit Schlüsseln seiner Wahl und nimmt eine verschlüsselte Verbindung wieder auf, ohne einen echten Handshake abzuschließen. Wo ein Server einem Client-Zertifikat vertraut, um zu entscheiden, wer hereinkommt, wird diese Prüfung umgangen.
Der Fix ist ein einziges Zeichen:
ngx_memcpy(keys->elts, cache->ticket_keys,
- 2 * sizeof(ngx_ssl_ticket_key_t));
+ 3 * sizeof(ngx_ssl_ticket_key_t));
Siehe patch/ für den anwendungsfertigen Diff.
nginx bedient etwa ein Drittel aller Websites. Die Auswirkung, die F5 zugesteht — die Umgehung der Client-Zertifikatsprüfung — trifft am härtesten auf mutual TLS: Open Banking (PSD2 / FAPI), den Austausch von Gesundheitsdaten, 5G-Core-Netzwerkfunktionen, Kubernetes-Ingress, Zero-Trust- und Geräteflotten, wo ein Zertifikat die gesamte Zugriffsentscheidung darstellt. In diesen Deployments ist die Fälschung eine vollständige Umgehung der Client-Authentifizierung, die Lesart mit maximaler Schwere.
Alles ist lokal, auf einem Loopback-Listener mit einem wegwerfbaren selbstsignierten
Zertifikat. Siehe poc/ für den Exploit und evidence/
für die aufgezeichnete Ausgabe: nginx akzeptiert den Schlüssel aus lauter Nullen, den verkürzten
Handshake und ein vollständiges Lesen/Schreiben über die gefälschte Sitzung (entschlüsseltes HTTP 404).
cd poc
python3 make_forged_session.py # patch the session_id_context
python3 forge_ticket.py # -> VERDICT: TICKET ACCEPTED
python3 forge_ticket_full.py # -> full read/write over the forged session
ssl_session_tickets off;ssl_session_ticket_key-Dateien, die Sie selbst rotieren.Ein Server ist nur exponiert, wenn alle folgenden Bedingungen zutreffen: eine anfällige Version, ein
ssl_session_cache shared:…, Tickets aktiviert ohne Schlüsseldatei und Zertifikate,
die über den Zugriff entscheiden.
| Datum | Ereignis |
|---|---|
| Jun 2026 | PhiNode Labs identifiziert die Slot-Diskrepanz und weist sie durchgängig nach |
| Aug 2026 | Meldung an F5 SIRT; weitergeleitet an NGINX Product Engineering |
| Sep 2026 | NGINX PE klassifiziert sie als Schwachstelle |
| Oct 12, 2026 | CVE-2026-97629 zugewiesen (F5 NPS-179) |
| Oct 14, 2026 | F5 veröffentlicht K000162606; Fixes werden in nginx 1.31.7 / 1.30.6 ausgeliefert |
Dieser Proof of Concept wird nach der Auslieferung des Fixes und im Rahmen der koordinierten Veröffentlichung von F5 publiziert, damit Verteidiger ihre eigenen Server überprüfen können. Verwenden Sie ihn nicht gegen Systeme, die Ihnen nicht gehören oder die Sie nicht betreiben.
PhiNode Labs ist ein angewandtes Forschungsinstitut für Programmanalyse. Wir finden die Defekte, an denen Scanner und Sprachmodelle vorbeigehen — kein eingeschleuster String, keine offensichtlich fehlerhafte Funktion, nur eine Größe, die drei hätte sein sollen und zwei war — indem wir darüber nachdenken, was der Speicher eines Programms zur Laufzeit tatsächlich enthält. Keine Behauptung ohne Zeugen.
Keywords: CVE-2026-97629, nginx, TLS session ticket, session ticket forgery, session resumption, mutual TLS, mTLS, client certificate bypass, ngx_http_ssl_module, ngx_ssl_rotate_ticket_keys, F5, NGINX Plus, proof of concept, PoC, exploit, CWE-908, PhiNode Labs, program analysis.