Le 13 mai 2026, F5 et la firme de recherche en sécurité depthfirst ont divulgué une vulnérabilité critique dans NGINX, baptisée NGINX Rift et enregistrée sous l’identifiant CVE-2026-42945. Avec un score CVSS v4.0 de 9.2/10, cette faille affecte l’intégralité des versions de NGINX Open Source depuis la 0.6.27, publiée en 2008. Dix-huit ans de présence silencieuse dans le code avant d’être découverte : le bogue réside dans le module ngx_http_rewrite_module et peut mener à un crash du processus worker, voire à une exécution de code à distance (RCE).
Ce qui rend NGINX Rift particulièrement préoccupant est sa capacité à être déclenché sans aucune authentification, à partir d’une simple requête HTTP forgée. Dès le 16 mai 2026, soit trois jours après la publication du correctif et du proof-of-concept, des tentatives d’exploitation actives ont été détectées dans la nature par VulnCheck. Les administrateurs utilisant NGINX sur Debian ou Ubuntu doivent traiter ce correctif en urgence.
Cet article détaille le mécanisme de la faille, les versions concernées, et vous guide pas à pas pour vérifier votre exposition, appliquer le correctif via apt et mettre en place une mitigation immédiate si la mise à jour n’est pas encore possible.
Comprendre la vulnérabilité NGINX Rift
Historique et découverte
La faille a été introduite dans la version 0.6.27 de NGINX en 2008 et est restée indétectée dans toutes les versions successives jusqu’à la 1.30.0 incluse. Elle a été identifiée de manière autonome par la plateforme d’analyse depthfirst, puis coordonnée avec F5 (l’éditeur de NGINX) avant la divulgation publique du 13 mai 2026.
Le bug se situe dans le fichier source src/http/ngx_http_script.c. Le problème central est un désalignement entre le calcul de la taille du tampon de destination et le contenu réellement écrit lors du traitement d’une directive rewrite. En termes techniques : « NGINX computes the destination buffer using one set of escaping assumptions and then writes to it using another. »
Mécanisme d’exploitation
La vulnérabilité est déclenchée par la combinaison de trois éléments simultanés dans la configuration NGINX :
- Une capture regex sans nom dans le motif (
$1,$2…) - Un point d’interrogation dans la chaîne de remplacement
- Une directive
rewrite,ifousetsubséquente
Lorsqu’un attaquant envoie une URI spécialement forgée correspondant à ce motif, il provoque un heap-based buffer overflow dans le processus worker NGINX. Cela permet soit de planter le worker (déni de service), soit, si ASLR est désactivé sur le système, d’exécuter du code arbitraire au sein du processus.
Exemple de configuration vulnérable :
# CONFIGURATION VULNÉRABLE - À ne pas utiliser
server {
location /users/ {
rewrite ^/users/([0-9]+)/profile/(.*)$ /profile.php?id=$1&tab=$2 last;
rewrite ^/users/([0-9]+)/$ /user.php?id=$1 last;
}
}
Produits et versions affectés
La faille touche un large spectre de produits basés sur le moteur NGINX :
- NGINX Open Source : versions 0.6.27 à 1.30.0 (incluses)
- NGINX Plus : R32 à R36
- NGINX Instance Manager : 2.16.0 à 2.21.1
- F5 WAF for NGINX : 5.9.0 à 5.12.1
- NGINX App Protect WAF/DoS, NGINX Gateway Fabric, NGINX Ingress Controller
Vérifier si votre serveur est exposé
Étape 1 — Identifier la version installée
Commencez par vérifier la version de NGINX présente sur votre système Debian ou Ubuntu :
# Vérifier la version NGINX installée
nginx -v
# ou pour plus de détails :
nginx -V 2>&1 | head -1
# Vérifier la version disponible dans apt
apt-cache policy nginx
Toute version comprise entre 0.6.27 et 1.30.0 est vulnérable. Les versions 1.30.1 et 1.31.0+ intègrent le correctif.
Étape 2 — Détecter les configurations à risque
Recherchez dans vos fichiers de configuration NGINX les motifs déclencheurs :
# Rechercher les directives rewrite avec captures sans nom et point d'interrogation
grep -rn "rewrite.*(.*|[^?]*)" /etc/nginx/ | grep '$[0-9]' | grep '?'
# Audit plus large : toutes les directives rewrite avec captures positionnelles
grep -rn 'rewrite.*$[0-9]' /etc/nginx/
# Tester la validité de la configuration actuelle
nginx -t
Si la commande grep retourne des résultats contenant à la fois une capture numérotée ($1, $2) et un ? dans la chaîne de remplacement, votre configuration est potentiellement exploitable.
Correction : mise à jour sur Debian et Ubuntu
Appliquer le correctif via apt
Les équipes Debian et Ubuntu ont publié des paquets corrigés. Voici la procédure de mise à jour :
# Mettre à jour les dépôts
sudo apt update
# Mettre à jour uniquement le paquet nginx
sudo apt install --only-upgrade nginx
# Vérifier la version après mise à jour
nginx -v
# Recharger/redémarrer nginx pour prendre en compte le nouveau binaire
sudo systemctl restart nginx
Versions corrigées disponibles dans les dépôts officiels Ubuntu :
- Ubuntu 26.04 LTS : nginx 1.28.3-2ubuntu1.1
- Ubuntu 25.10 : nginx 1.28.0-6ubuntu1.3
- Ubuntu 24.04 LTS : nginx 1.24.0-2ubuntu7.8
- Ubuntu 22.04 LTS : nginx 1.18.0-6ubuntu14.11
Important : NGINX conserve l’ancien binaire en mémoire jusqu’au redémarrage complet du processus maître. Un simple reload (systemctl reload nginx) ne suffit pas — il faut un restart pour charger le nouveau binaire corrigé.
Mitigation immédiate si la mise à jour n’est pas encore possible
Si vous ne pouvez pas appliquer le correctif immédiatement, remplacez toutes les captures sans nom par des captures nommées dans vos blocs rewrite :
# AVANT (vulnérable)
rewrite ^/users/([0-9]+)/profile/(.*)$ /profile.php?id=$1&tab=$2 last;
# APRÈS (sécurisé avec captures nommées)
rewrite ^/users/(?[0-9]+)/profile/(?.*)$ /profile.php?id=$user_id&tab=$section last;
Cette modification neutralise le vecteur d’attaque sans nécessiter de mise à jour du binaire. Appliquez-la à l’ensemble des blocs location, server ou http contenant des directives rewrite, if ou set utilisant des captures positionnelles.
# Après modification des fichiers de configuration, valider et recharger
nginx -t && sudo systemctl reload nginx
Vérification post-correctif
Une fois le correctif appliqué, confirmez que le service fonctionne correctement et que la nouvelle version est bien en cours d’exécution :
# Vérifier la version active du binaire en cours d'exécution
cat /proc/$(cat /var/run/nginx.pid)/cmdline | tr '' ' '
# Vérifier le statut du service
sudo systemctl status nginx
# Contrôler les logs pour détecter d'éventuelles tentatives d'exploitation
sudo tail -100 /var/log/nginx/error.log | grep -i "rewrite|overflow|segfault"
# Tester la configuration de sécurité des en-têtes HTTP
curl -I https://votre-domaine.com
Pour les déploiements critiques, envisagez d’activer ASLR si ce n’est pas déjà le cas sur vos serveurs — cela empêche la partie RCE de l’exploitation même si la faille est présente :
# Vérifier l'état d'ASLR (2 = activé, valeur recommandée)
cat /proc/sys/kernel/randomize_va_space
# Activer ASLR de façon permanente
echo "kernel.randomize_va_space = 2" | sudo tee -a /etc/sysctl.d/99-aslr.conf
sudo sysctl -p /etc/sysctl.d/99-aslr.conf
À lire également
- CVE-2026-23918 — Vulnérabilité Apache 2.4.66 : analyse et correctifs sur Debian/Ubuntu
- CVE-2026-31431 (Copy Fail) — Analyse et remédiation sur Debian/Ubuntu
- Sécurisation avancée PHP-FPM — Multi-VirtualHosts Apache/Nginx
- nftables en pratique — Remplacer iptables sur Debian/Ubuntu