🔍 Contexte
Publié le 13 mai 2026 par Zhenpeng (Leo) Lin, chercheur chez DepthFirst AI, cet article présente les résultats d’une analyse autonome du code source de NGINX ayant conduit à la découverte de 4 vulnérabilités de corruption mémoire, dont une critique permettant une RCE non authentifiée.
🐛 Vulnérabilité principale : CVE-2026-42945
- Type : Heap buffer overflow dans
ngx_http_rewrite_module - CVSS : 9.2 (Critique)
- Introduite en : 2008 (NGINX 0.6.27)
- Versions affectées : NGINX Open Source 0.6.27 à 1.30.0, NGINX Plus R32-R36, NGINX Instance Manager, F5 WAF, NGINX App Protect WAF, NGINX Gateway Fabric, NGINX Ingress Controller
- Condition de déclenchement : Utilisation conjointe des directives
rewrite(avec?) etsetdans la configuration NGINX
⚙️ Cause racine
Le moteur de script NGINX utilise un processus en deux passes (calcul de longueur puis copie). Le flag e->is_args est positionné à 1 lors du traitement d’une directive rewrite contenant un ?, mais n’est jamais réinitialisé. Lors de la passe de calcul de longueur pour une directive set suivante, un sous-moteur le initialisé à zéro ignore l’échappement URI. Lors de la passe de copie, le moteur principal avec is_args=1 applique ngx_escape_uri, expandant chaque caractère spécial de 1 à 3 octets, dépassant le buffer alloué.
💥 Exploitation
L’exploitation repose sur plusieurs techniques :
- Heap feng shui cross-requêtes : contrôle de l’ordre des connexions pour placer un pool victime adjacent au pool source du débordement
- Spray de faux
ngx_pool_cleanup_svia des corps POST (données binaires arbitraires incluant des null bytes) - Écrasement du pointeur
cleanupdu pool victime avec une adresse URI-safe pointant vers la fausse structure - Fermeture du socket victime déclenchant
ngx_destroy_pool→ exécution du handlersystem()avec commande injectée
Un PoC fonctionnel démontrant une RCE (avec ASLR désactivé) a été développé et partagé avec NGINX.
📋 Autres CVE confirmées
- CVE-2026-42946 (CVSS 8.3) : Allocation mémoire excessive dans
ngx_http_scgi_module/ngx_http_uwsgi_module→ crash worker - CVE-2026-40701 (CVSS 6.3) : Use-after-free dans
ngx_http_ssl_modulevia résolution DNS OCSP asynchrone - CVE-2026-42934 (CVSS 6.3) : Out-of-bounds read dans
ngx_http_charset_modulevia séquences UTF-8 incomplètes
📅 Timeline
- 18/04/2026 : Analyse autonome → 5 issues détectées
- 21/04/2026 : Signalement à NGINX via GitHub Security Advisory
- 24/04/2026 : 4 issues confirmées
- 28/04/2026 : PoC RCE développé, NGINX informé
- 05/05/2026 : PoC partagé avec NGINX
- 13/05/2026 : Advisory F5 publié + publication du blog
📌 Type d’article
Publication de recherche technique détaillant la découverte, l’analyse de cause racine et l’exploitation d’une vulnérabilité critique dans NGINX, avec divulgation coordonnée.
🧠 TTPs et IOCs détectés
TTP
- T1190 — Exploit Public-Facing Application (Initial Access)
- T1203 — Exploitation for Client Execution (Execution)
- T1059 — Command and Scripting Interpreter (Execution)
IOC
- CVEs :
CVE-2026-42945— NVD · CIRCL - CVEs :
CVE-2026-42946— NVD · CIRCL - CVEs :
CVE-2026-40701— NVD · CIRCL - CVEs :
CVE-2026-42934— NVD · CIRCL - Chemins :
src/http/ngx_http_script.c
🟡 Indice de vérification factuelle : 50/100 (moyenne)
- ⬜ depthfirst.com — source non référencée (0pts)
- ✅ 17466 chars — texte complet (fulltext extrait) (15pts)
- ✅ 5 IOCs (IPs/domaines/CVEs) (10pts)
- ⬜ pas d’IOC vérifié (0pts)
- ✅ 3 TTPs MITRE identifiées (15pts)
- ✅ date extraite du HTML source (10pts)
- ⬜ aucun acteur de menace nommé (0pts)
- ⬜ 0/4 CVE(s) confirmée(s) (0pts)
🔗 Source originale : https://depthfirst.com/research/nginx-rift-achieving-nginx-rce-via-an-18-year-old-vulnerability