
Preuve de concept d'exploit, analyse de la cause racine et correctif en une ligne pour CVE-2026-97629, une falsification de ticket de session TLS dans nginx qui contourne l'authentification par certificat client (mTLS).
Une ligne de C. Une session TLS falsifiée. Découverte, prouvée de bout en bout, et coordonnée jusqu'à un correctif par PhiNode Labs.
Un exploit de démonstration de concept, l'analyse de la cause racine, le correctif d'une ligne et les preuves de reproduction pour CVE-2026-97629, une falsification de ticket de session TLS dans nginx qui peut contourner l'authentification par certificat client (TLS mutuel). Divulguée à F5 dans le cadre d'une divulgation coordonnée et attribuée à PhiNode Labs.
Lire l'analyse complète : https://phinode.io/nginx-cve-2026-97629.html
« F5 remercie PhiNode Labs d'avoir porté ce problème à notre attention et d'avoir suivi les plus hauts standards de divulgation coordonnée. » — Avis de sécurité F5 K000162606
| CVE | CVE-2026-97629 |
| Avis | F5 K000162606 · GHSA-862p-pr69-37gq |
| Gravité | CVSS 3.1 6.5 / CVSS 4.0 8.3 (F5). Jusqu'à 10.0 sur les déploiements en TLS mutuel |
| Faiblesse | CWE-908 — utilisation d'une ressource non initialisée |
| Composant | ngx_http_ssl_module — ngx_ssl_rotate_ticket_keys() |
| Affecté | nginx 1.23.2 – 1.31.6, NGINX Plus jusqu'à R37 (37.0.5), et les produits F5 basés sur nginx |
| Corrigé | nginx 1.31.7 et 1.30.6, NGINX Plus 37.0.5.1 / 37.1.0.1 |
| Crédit | PhiNode Labs — [email protected] |
Pour reprendre rapidement les connexions TLS, nginx scelle un ticket de session avec une
clé en rotation et conserve trois de ces clés par worker : courante, précédente, suivante.
Lors de la rotation, ngx_ssl_rotate_ticket_keys() ne copiait que deux des trois
emplacements dans chaque worker ; le troisième n'était jamais écrit après le démarrage. Sur une compilation Linux par défaut, cette mémoire est entièrement à zéro — la même valeur prévisible sur chaque
worker dans chaque déploiement par défaut.
Le callback de déchiffrement parcourt les trois emplacements. Un client peut soumettre un ticket falsifié dont le nom de clé de 16 octets est entièrement à zéro, correspondre au troisième emplacement intact, et faire en sorte que nginx le descelle avec des clés AES et HMAC entièrement à zéro que n'importe qui peut deviner. À partir de là, un attaquant falsifie une session valide avec les clés de son choix et reprend une connexion chiffrée sans effectuer de véritable handshake. Là où un serveur se fie à un certificat client pour décider qui est autorisé, cette vérification est contournée.
Le correctif tient en un seul caractère :
ngx_memcpy(keys->elts, cache->ticket_keys,
- 2 * sizeof(ngx_ssl_ticket_key_t));
+ 3 * sizeof(ngx_ssl_ticket_key_t));
Voir patch/ pour le diff prêt à appliquer.
nginx sert environ un tiers de tous les sites web. L'impact crédité par F5 — contourner la vérification du certificat client — frappe le plus durement le mTLS : open banking (PSD2 / FAPI), échange de données de santé, fonctions du cœur de réseau 5G, ingress Kubernetes, zero-trust et parcs d'appareils, où un certificat constitue l'unique décision d'accès. Sur ces déploiements, la falsification est un contournement complet de l'authentification client, la lecture de sévérité maximale.
Tout est local, sur un listener loopback avec un certificat auto-signé jetable.
Voir poc/ pour l'exploit et evidence/
pour la sortie capturée : nginx acceptant la clé entièrement nulle, la poignée de main
abrégée, et une lecture/écriture complète sur la session falsifiée (HTTP 404 déchiffré).
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 explicites que vous faites tourner vous-même.Un serveur n'est exposé que si toutes les conditions suivantes sont réunies : une version vulnérable, un
ssl_session_cache shared:…, les tickets activés sans fichier de clé, et des certificats
qui décident de l'accès.
| Date | Événement |
|---|---|
| Juin 2026 | PhiNode Labs identifie le décalage d'emplacement et le prouve de bout en bout |
| Août 2026 | Signalé à F5 SIRT ; transmis à NGINX Product Engineering |
| Sept. 2026 | NGINX PE le classe comme vulnérabilité |
| 12 oct. 2026 | CVE-2026-97629 attribué (F5 NPS-179) |
| 14 oct. 2026 | F5 publie K000162606 ; les correctifs sont livrés dans nginx 1.31.7 / 1.30.6 |
Cette preuve de concept est publiée après la livraison du correctif et avec la publication coordonnée de F5, afin que les défenseurs puissent vérifier leurs propres serveurs. Ne l'utilisez pas contre des systèmes que vous ne possédez pas ou n'exploitez pas.
PhiNode Labs est un laboratoire de recherche appliquée en analyse de programmes. Nous trouvons les défauts que les scanners et les modèles de langage laissent passer — pas de chaîne injectée, pas de fonction manifestement défaillante, juste une taille qui aurait dû être trois et qui était deux — en raisonnant sur ce que la mémoire d'un programme contient réellement à l'exécution. Aucune affirmation sans preuve.
Mots-clés : CVE-2026-97629, nginx, ticket de session TLS, falsification de ticket de session, reprise de session, TLS mutuel, mTLS, contournement de certificat client, ngx_http_ssl_module, ngx_ssl_rotate_ticket_keys, F5, NGINX Plus, preuve de concept, PoC, exploit, CWE-908, PhiNode Labs, analyse de programmes.