
Preuve de concept d'exploit pour CVE-2026-42945, un heap buffer overflow dans le module de réécriture de NGINX permettant l'exécution de code à distance non authentifiée via un cross-request heap feng shui.
Preuve de concept d'exécution de code à distance (RCE) pour CVE-2026-42945, un débordement de mémoire tampon du tas critique dans le module ngx_http_rewrite_module de NGINX introduit en 2008. Ce bogue permet une exécution de code à distance non authentifiée 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 des problèmes similaires dans votre propre code ? Essayez le même système à l'adresse https://depthfirst.com/open-defense.
Le moteur de scripts de NGINX utilise un processus en deux passes : d'abord calculer la taille de mémoire tampon nécessaire, puis copier les données. Le drapeau is_args est défini sur le moteur principal lorsqu'un remplacement rewrite contient , mais la passe de calcul de longueur s'exécute sur un sous-moteur fraîchement remis à zéro. Ainsi :
?is_args = 0 → renvoie la longueur brute de capture.is_args = 1 → appelle ngx_escape_uri avec NGX_ESCAPE_ARGS, développant chaque octet échappable en 3 octets.La copie fait déborder le tampon du 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 (disséminé via les corps POST, car les octets d'URI ne peuvent pas contenir d'octets nuls), le redirigeant vers un faux ngx_pool_cleanup_s invoquant system() lors de la destruction du pool.
En savoir plus sur ce bogue dans notre article technique.
| Produit | Affectées | Corrigée 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 complet du fournisseur : https://my.f5.com/manage/s/article/K000160932
Testé sur Ubuntu 24.04.3 LTS.
./setup.sh — construire le conteneur.docker compose -f env/docker-compose.yml up — démarrer le serveur NGINX vulnérable.python3 poc.py --shell — obtenir un shell.