
Exploits RCE NGINX
Preuve de concept d'exécution de code à distance (RCE) pour CVE-2026-42945, un débordement critique de tampon de tas dans le ngx_http_rewrite_module de NGINX introduit en 2008. Ce bug permet l'exécution de code à distance sans authentification sur les serveurs utilisant les directives rewrite et set.
Cette vulnérabilité — ainsi que trois autres problèmes de corruption mémoire (CVE-2026-42946, CVE-2026-40701, CVE-2026-42934) — a été découverte de manière autonome par le système d'analyse de sécurité de depthfirst après un simple clic d'intégration du code source de NGINX.
Vous voulez trouver ce type de problèmes dans votre propre code ? Essayez le même système sur https://depthfirst.com/open-defense.
Le moteur de script de NGINX utilise un processus en deux passes : il calcule d'abord la taille de tampon requise, puis copie les données. Le drapeau is_args est défini sur le moteur principal lorsqu'un remplacement de rewrite contient ?, mais la passe de calcul de longueur s'exécute sur un sous-moteur fraîchement mis à zéro. Donc :
is_args = 0 → renvoie la longueur brute de la capture.is_args = 1 → appelle ngx_escape_uri avec NGX_ESCAPE_ARGS, en étendant chaque octet échappable à 3 octets.La copie fait déborder le tampon de tas sous-dimensionné avec des données d'URI contrôlées par l'attaquant. L'exploitation utilise un heap feng shui inter-requêtes pour corrompre le pointeur cleanup d'un ngx_pool_t adjacent (en pulvérisant de faux ngx_pool_cleanup_s via les corps de requêtes POST, car les octets d'URI ne peuvent pas contenir d'octets nuls), le redirigeant vers un faux ngx_pool_cleanup_s qui invoque system() lors de la destruction du pool.
En savoir plus sur ce bug dans notre analyse technique.
| Produit | Versions affectées | Corrigé dans |
|---|---|---|
| NGINX Open Source | 0.6.27 – 1.30.0 | 1.31.0, 1.30.1 |
| NGINX Plus | R32 – R36 | R36 P4, R35 P2, R32 P6 |
Avis de sécurité complet du fournisseur : https://my.f5.com/manage/s/article/K000160932
K000161616 : Vulnérabilité de ngx_http_v3_module de NGINX — HTTP/3 QPACK alloue le insert_buffer de la session depuis le pool d'un flux d'encodeur unidirectionnel. La fermeture de ce flux libère le pool alors que la session conserve un pointeur pendant, de sorte qu'un flux d'encodeur ultérieur déclenche un use-after-free sur le tas dans le worker NGINX.
K000162097 : Vulnérabilité de la directive map et de la correspondance regex de NGINX — la correspondance regex de la directive map avec des variables de capture peut provoquer un débordement de tampon de tas dans le processus worker NGINX.
Le bug se situe dans l'évaluation des valeurs complexes en deux passes du moteur de script stream. Dans une configuration stream vulnérable utilisant ssl_preread, le SNI TLS contrôlé par l'attaquant est injecté dans des variables basées sur des regex. NGINX calcule d'abord la longueur du tampon de sortie, puis copie la sortie. Une regex map peut mettre à jour l'état global des captures entre ces deux passes : la passe de longueur prévoit une petite valeur, tandis que la passe de copie lit une capture regex plus grande telle que $1, provoquant une écriture hors limites sur le tas dans le worker.
Le PoC compagnon CVE-2026-42533/ est un exploit en chaîne complète. Il utilise la primitive de fuite stream pour récupérer les bases du tas et de la libc afin de contourner l'ASLR, pulvérise de faux enregistrements ngx_pool_cleanup_s via les corps de requêtes HTTP, puis utilise le débordement pour corrompre un pointeur de cleanup de pool NGINX adjacent. Lorsque le pool corrompu est détruit, l'aiguillage du cleanup est redirigé vers system() de la libc, exécutant la commande fournie.