
Proof-of-concept di exploit, analisi della causa radice e patch di una riga per CVE-2026-97629, una falsificazione dei session-ticket TLS di nginx che aggira l'autenticazione tramite certificato client (mTLS).
Una riga di C. Una sessione TLS falsificata. Individuata, dimostrata end to end e coordinata fino alla correzione da PhiNode Labs.
Un exploit proof-of-concept, l'analisi della causa radice, la patch di una riga e le prove di riproduzione per CVE-2026-97629, una falsificazione dei session ticket TLS in nginx che può aggirare l'autenticazione con certificato client (mutual-TLS). Divulgata a F5 nell'ambito della divulgazione coordinata e attribuita a PhiNode Labs.
Leggi l'analisi completa: https://phinode.io/nginx-cve-2026-97629.html
"F5 ringrazia PhiNode Labs per averci segnalato questo problema e per aver seguito i più alti standard della divulgazione coordinata." — F5 Security Advisory K000162606
| CVE | CVE-2026-97629 |
| Advisory | F5 K000162606 · GHSA-862p-pr69-37gq |
| Gravità | CVSS 3.1 6.5 / CVSS 4.0 8.3 (F5). Fino a 10.0 nelle distribuzioni mutual-TLS |
| Debolezza | CWE-908 — uso di risorsa non inizializzata |
| Componente | ngx_http_ssl_module — ngx_ssl_rotate_ticket_keys() |
| Affette | nginx 1.23.2 – 1.31.6, NGINX Plus fino a R37 (37.0.5) e prodotti F5 basati su nginx |
| Corrette | nginx 1.31.7 e 1.30.6, NGINX Plus 37.0.5.1 / 37.1.0.1 |
| Credito | PhiNode Labs — [email protected] |
Per riprendere rapidamente le connessioni TLS, nginx sigilla un session ticket con una
chiave a rotazione e mantiene tre di queste chiavi per worker: corrente, precedente, successiva.
Durante la rotazione, ngx_ssl_rotate_ticket_keys() copiava solo due dei tre
slot in ciascun worker; il terzo non veniva mai scritto dopo l'avvio. In una build Linux predefinita
quella memoria è tutta a zero — lo stesso valore prevedibile in ogni
worker di ogni distribuzione predefinita.
La callback di decifratura esamina tutti e tre gli slot. Un client può inviare un ticket falsificato il cui nome di chiave di 16 byte è tutto a zero, corrispondere allo slot terzo non toccato e far sì che nginx lo apra con chiavi AES e HMAC tutte a zero che chiunque può indovinare. Da qui un attaccante falsifica una sessione valida con chiavi di propria scelta e riprende una connessione cifrata senza completare un handshake reale. Dove un server si affida a un certificato client per decidere chi può entrare, quel controllo viene aggirato.
La correzione è un singolo carattere:
ngx_memcpy(keys->elts, cache->ticket_keys,
- 2 * sizeof(ngx_ssl_ticket_key_t));
+ 3 * sizeof(ngx_ssl_ticket_key_t));
Vedi patch/ per il diff pronto all'applicazione.
nginx serve circa un terzo di tutti i siti web. L'impatto che F5 riconosce — il bypass della verifica del certificato client — colpisce più duramente il mutual TLS: open banking (PSD2 / FAPI), scambio di dati sanitari, funzioni del core network 5G, ingress di Kubernetes, zero-trust e flotte di dispositivi, dove un certificato rappresenta l'intera decisione di accesso. Su tali distribuzioni la contraffazione è un bypass completo dell'autenticazione client, la lettura di massima gravità.
Tutto è locale, su un listener di loopback con un certificato self-signed usa e getta.
Vedi poc/ per l'exploit e evidence/
per l'output catturato: nginx che accetta la chiave tutta a zero, l'handshake
abbreviato e una lettura/scrittura completa sulla sessione contraffatta (HTTP 404 decifrato).
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 espliciti che ruoti tu stesso.Un server è esposto solo se tutte le condizioni sono soddisfatte: una versione vulnerabile, una
ssl_session_cache shared:…, i ticket attivi senza file di chiave, e certificati
che determinano l'accesso.
| Data | Evento |
|---|---|
| Giu 2026 | PhiNode Labs identifica la discrepanza di slot e la dimostra end to end |
| Ago 2026 | Segnalato a F5 SIRT; inoltrato a NGINX Product Engineering |
| Set 2026 | NGINX PE la classifica come vulnerabilità |
| 12 Ott 2026 | Assegnato CVE-2026-97629 (F5 NPS-179) |
| 14 Ott 2026 | F5 pubblica K000162606; le correzioni arrivano in nginx 1.31.7 / 1.30.6 |
Questa proof of concept è pubblicata dopo il rilascio della correzione e con il rilascio coordinato di F5, affinché i difensori possano verificare i propri server. Non usarla contro sistemi che non possiedi o non gestisci.
PhiNode Labs è un laboratorio di ricerca applicata sull'analisi dei programmi. Troviamo i difetti che gli scanner e i modelli linguistici ignorano — nessuna stringa iniettata, nessuna funzione palesemente errata, solo una dimensione che sarebbe dovuta essere tre ed era due — ragionando su ciò che la memoria di un programma contiene effettivamente a runtime. Nessuna affermazione senza una prova.
Parole chiave: 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.