CVE-2026-42945 (NGINX Rift) : analyse et remédiation sur Debian/Ubuntu

21 mai 2026 — par admin_libra

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, if ou set subsé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

Références

Index complet

Tous les articles (35)

Date Article Tags
27/05/2026 LXD 6.x : orchestration de conteneurs Linux avec profils et clustering administration clustering conteneurs 27/05/2026 Keepalived — VIP flottante et load balancing sans matériel dédié debian failover haute-disponibilité 27/05/2026 Btrfs sur Linux — snapshots, sous-volumes et compression en pratique administration btrfs compression 21/05/2026 CVE-2026-42945 (NGINX Rift) : analyse et remédiation sur Debian/Ubuntu cve debian heap-overflow 21/05/2026 Tuning kernel Linux — paramètres sysctl essentiels pour la production debian kernel mémoire 21/05/2026 DRBD : réplication de blocs entre deux serveurs en temps réel cluster debian drbd 15/05/2026 CVE-2026-23918 — vulnérabilité Apache 2.4.66 : analyse et correctifs sur Debian/Ubuntu (hors Debian 11) apache cve debian 15/05/2026 CVE-2026-31431 (Copy Fail) — Analyse et remédiation sur Debian/Ubuntu algif_aead copy-fail cve 12/05/2026 Pacemaker et Corosync — cluster haute disponibilité Linux cluster corosync debian 12/05/2026 WireGuard : monter un VPN mesh entre plusieurs serveurs Linux chiffrement linux mesh 12/05/2026 Netdata — monitoring temps réel sans configuration complexe alertes dashboard linux 12/05/2026 nftables en pratique — remplacer iptables sur Debian/Ubuntu debian firewall iptables 12/05/2026 Podman : alternative rootless à Docker — installation et migration conteneurs docker kubernetes 02/05/2026 Prometheus et Grafana sur Debian — installation, configuration et dashboards pratiques alertmanager dashboard debian 02/05/2026 Ansible : automatiser la gestion de serveurs Linux avec des playbooks administration ansible automation 28/04/2026 ZFS sur Linux : snapshots, clones et RAID-Z en pratique administration compression filesystem 28/04/2026 eBPF sur Linux : observabilité et traçage kernel avec bpftrace et BCC bcc bpftrace diagnostic 23/04/2026 Analyse de la mémoire sur Linux — vmstat, free, smem diagnostic mémoire monitoring 23/04/2026 Sécurité Linux — Firewall iptables et nftables firewall iptables nftables 23/04/2026 ZFS sur Linux — Installation et gestion avancée administration filesystem stockage 23/04/2026 Gestion des services avec systemd sur Debian et Ubuntu administration debian services 23/04/2026 Gestion des ressources cgroups v1/v2 avec LXC cgroups conteneurs lxc 23/04/2026 Centralisation logs avec ELK Stack — Elasticsearch, Kibana, Filebeat elasticsearch elk filebeat 23/04/2026 Supervision avec Zabbix 7.0 LTS sur Debian/Ubuntu debian monitoring supervision 23/04/2026 Plusieurs versions PHP-FPM sur Apache Debian/Ubuntu apache debian php-fpm 23/04/2026 Sécurisation avancée PHP-FPM — Multi-VirtualHosts Apache/Nginx apache nginx php-fpm 23/04/2026 Optimisation PHP-FPM — Guide de tuning d'un pool optimisation performance php-fpm 29/07/2025 Docker sur Debian/Ubuntu : Installation, Configuration et Utilisation conteneurs debian docker 03/07/2025 Serveur VPN WireGuard sous linux réseau sécurité vpn 03/07/2025 Authentification par clé publique sur un serveur SSH authentification cryptographie sécurité 27/06/2025 Surveillance et diagnostic d’un serveur Linux avec vmstat, iotop et htop diagnostic htop monitoring 27/06/2025 Mémoire : Utilisation des Huge Pages et implémentation hugepages mémoire noyau 27/06/2025 Mémoire Swap et paramétrage swappiness mémoire noyau performance 18/06/2025 Installation et Configuration des Conteneurs LXC sur Linux administration conteneurs lxc 18/06/2025 Gestion des journaux avec syslog et journalctl administration journalctl logs