Une Faille de Sécurité dans NGINX : Comment La Vulnérabilité CVE-2026-42945 Peut Mettre à Mal vos Serveurs
En tant qu'ingénieure DevSecOps, je surveille en permanence les vulnérabilités qui peuvent toucher nos infrastructures. Cette semaine, une faille critique a été divulguée dans NGINX , un serveur web qui fait tourner une bonne partie d'internet. Voici ce que vous devez savoir.
Introduction
CVE-2026-42945, surnommée NGINX Rift, est un heap buffer overflow dans le module ngx_http_rewrite_module de NGINX. Découverte par les chercheurs de depthfirst lors d'un audit de code en avril 2026, cette vulnérabilité est présente dans le code depuis 2008 , soit 18 ans sans être détectée.
Score CVSS v4.0 : 9.2 (CRITICAL)
Un attaquant non authentifié peut envoyer une requête HTTP spécialement forgée pour crasher les workers NGINX, voire exécuter du code arbitraire sur le serveur.
Détails Techniques
La faille réside dans la logique de traitement des directives rewrite dans src/http/ngx_http_script.c.
Le moteur de scripts de NGINX utilise un processus en deux passes pour gérer les réécritures d'URL :
- Première passe : calcul de la taille du buffer nécessaire
- Deuxième passe : copie des données dans le buffer alloué
Le problème vient d'un décalage d'état entre ces deux passes. Quand une directive rewrite contient un ? dans la chaîne de remplacement, le flag is_args est positionné sur le moteur principal. Mais la passe de calcul de longueur tourne sur un sous-moteur fraîchement initialisé à zéro, où ce flag n'est pas défini.
Résultat : la passe de copie écrit plus de données que prévu dans le buffer, provoquant une corruption mémoire déterministe.
Configuration Vulnérable
La faille se déclenche uniquement quand ces trois conditions sont réunies :
- Une directive
rewriteutilise une capture PCRE non nommée ($1,$2) - La chaîne de remplacement contient un point d'interrogation (
?) - Elle est suivie d'une autre directive
rewrite,ifousetdans le même scope
Exemple vulnérable :
rewrite ^/users/([0-9]+)/profile/(.*)$ /profile.php?id=$1&tab=$2 last;
Exemple sécurisé (captures nommées) :
rewrite ^/users/(?<user_id>[0-9]+)/profile/(?<section>.*)$ /profile.php?id=$user_id&tab=$section last;
Impact
- DoS : crash déterministe des workers NGINX avec une seule requête HTTP
- RCE : exécution de code possible, notamment sur les systèmes où l'ASLR est désactivé (systèmes embarqués, legacy, certains appliances)
Produits Affectés
| Produit | Versions vulnérables | Version corrigée |
|---|---|---|
| NGINX Open Source | 0.6.27 → 1.30.0 | 1.30.1 ou 1.31.0 |
| NGINX Plus | R32 → R36 | R32 P6 ou R36 P4 |
| NGINX Instance Manager | 2.16.0 → 2.21.1 | Patch F5 en attente |
| NGINX App Protect WAF | 4.9.0 → 4.16.0 et 5.1.0 → 5.8.0 | Patch F5 en attente |
| NGINX Gateway Fabric | 1.3.0 → 1.6.2 et 2.0.0 → 2.5.1 | Patch F5 en attente |
| NGINX Ingress Controller | 3.5.0 → 3.7.2, 4.0.0 → 4.0.1, 5.0.0 → 5.4.1 | Patch F5 en attente |
Non affectés : F5 Distributed Cloud, BIG-IP, BIG-IQ, F5OS, NGINX One Console.
Comment Vérifier si Vous Êtes Exposé
1. Vérifier la version de NGINX
nginx -v
Si votre version est inférieure à 1.30.1 (stable) ou 1.31.0 (mainline), vous êtes potentiellement vulnérable.
2. Détecter les configurations vulnérables
Cherchez les directives rewrite avec des captures non nommées et un ? :
grep -rn "rewrite.*\$[0-9].*?" /etc/nginx/
Si cette commande retourne des résultats, inspectez chaque ligne pour vérifier si elle est suivie d'une directive rewrite, if ou set.
3. Vérifier l'état de l'ASLR
cat /proc/sys/kernel/randomize_va_space
2→ ASLR activé (exploitation RCE plus difficile, DoS reste possible)0→ ASLR désactivé (risque RCE élevé, à corriger immédiatement)
Mitigation et Patch
Solution recommandée : mettre à jour NGINX
# Debian/Ubuntu
sudo apt update && sudo apt upgrade nginx
# RHEL/CentOS
sudo dnf update nginx
# Vérifier après mise à jour
nginx -v
Redémarrez NGINX après la mise à jour :
sudo systemctl restart nginx
Solution temporaire : remplacer les captures non nommées
Si vous ne pouvez pas patcher immédiatement, remplacez toutes les captures $1, $2 par des captures nommées dans vos configurations NGINX.
Activer l'ASLR si ce n'est pas déjà fait
# Temporaire
echo 2 > /proc/sys/kernel/randomize_va_space
# Permanent
echo "kernel.randomize_va_space = 2" >> /etc/sysctl.conf
sysctl -p
Conclusion
NGINX Rift est une vulnérabilité critique : 18 ans dans le code, un score CVSS de 9.2, et un PoC public disponible sur GitHub. Cela dit, toutes les installations NGINX ne sont pas automatiquement exposées. La faille ne se déclenche que lorsqu'une configuration spécifique est présente : une directive rewrite combinant des captures PCRE non nommées ($1, $2) et un point d'interrogation dans la chaîne de remplacement. Auditez vos configurations, appliquez le patch, et restez informés.
Actions immédiates :
- Mettre à jour NGINX vers 1.30.1 ou 1.31.0
- Auditer vos configs avec la commande grep ci-dessus
- Vérifier que l'ASLR est activé
- Surveiller les logs pour des patterns de requêtes suspects