En bref

  • CVE-2026-42945 « NGINX Rift » (CVSS 9.2) : débordement de tampon heap dans le module ngx_http_rewrite_module de NGINX, présent depuis 18 ans, permettant un déni de service sans authentification et potentiellement une RCE sur les systèmes sans ASLR
  • Systèmes affectés : NGINX Open Source 0.6.27 à 1.30.0, NGINX Plus R32 à R36, et tous les produits F5 dérivés (Ingress Controller, App Protect WAF, Gateway Fabric, Instance Manager)
  • Action urgente : mettre à jour vers NGINX 1.30.1 (stable) ou 1.31.0 (mainline) ; NGINX Plus vers R32 P6 ou R36 P4 ; ou remplacer les captures PCRE non nommées par des captures nommées dans les configurations de réécriture

Les faits

Le 13 mai 2026, F5/NGINX a publié l'avis de sécurité K000161019 concernant CVE-2026-42945, baptisée « NGINX Rift » par ses découvreurs de DepthFirst AI. Cette vulnérabilité de type débordement de tampon heap (heap-based buffer overflow, CWE-122) affecte le module ngx_http_rewrite_module de NGINX dans toutes ses versions depuis 0.6.27, soit une faille dormante depuis environ 18 ans dans le codebase. Avec un score CVSS v4.0 de 9.2 (vecteur : CVSS:4.0/AV:N/AC:H/AT:N/PR:N/UI:N/VC:H/VI:H/VA:H/SC:N/SI:N/SA:N), la vulnérabilité est critique. La version CVSS v3.1 est évaluée à 8.1 High, avec une complexité d'attaque élevée reflétant les conditions de configuration requises, mais sans aucune authentification préalable.

La découverte de NGINX Rift est remarquable à plusieurs titres. Elle a été réalisée le 18 avril 2026 non pas par un chercheur humain traditionnel, mais par un scanner de vulnérabilités autonome basé sur un grand modèle de langage (LLM), développé par DepthFirst AI. Ce scanner a identifié une divergence de comportement subtile dans le module de réécriture d'URI qui avait échappé à toutes les revues de code humaines depuis 2008. La divulgation responsable a été effectuée auprès de F5 le 21 avril 2026, et les patches ont été publiés le 13 mai 2026 — soit 22 jours plus tard. Un proof-of-concept a été simultanément publié par DepthFirst AI au moment de la divulgation, démontrant un déni de service fiable et une chaîne d'exploitation RCE théorique.

Techniquement, la faille réside dans le mécanisme de traitement des directives rewrite par ngx_http_rewrite_module. Ce module opère en deux passes : une première passe calcule la taille du buffer de destination nécessaire à la réécriture d'URI, et une seconde passe copie les données dans ce buffer. Le bug est un défaut de gestion d'état entre ces deux passes. Quand une directive rewrite utilise une capture PCRE non nommée (les variables $1, $2, etc.) avec une chaîne de remplacement contenant un caractère ? (séparateur de query string), un flag interne nommé is_args reste incorrectement positionné après le traitement de cette directive. Si cette directive est suivie dans le même bloc location {} par une autre directive rewrite, if, ou set, une divergence apparaît entre les deux passes : la première passe calcule la taille du buffer en utilisant un algorithme d'échappement de caractères, mais la seconde passe écrit les données en utilisant un algorithme différent. Les caractères comme +, % et & s'expandent lors du ré-échappement en seconde passe, causant une écriture au-delà des limites du buffer heap alloué.

Trois conditions doivent être simultanément réunies pour déclencher la vulnérabilité : premièrement, la directive rewrite doit utiliser une capture PCRE non nommée ($1, $2, ...) dans la chaîne de remplacement ; deuxièmement, cette chaîne de remplacement doit contenir un caractère ? littéral ; troisièmement, cette directive doit être suivie dans le même bloc location {} par une autre directive rewrite, if, ou set. Ces conditions, bien que spécifiques, correspondent à des patterns de configuration courants dans les configurations NGINX de production, notamment pour les URL rewrites complexes, la gestion de query strings, et les redirections conditionnelles. Selon les analyses publiées par Picus Security et Axonius les 13-14 mai 2026, de nombreuses configurations de production typiques réunissent naturellement ces conditions sans que les administrateurs en soient conscients.

La chaîne d'exploitation RCE complète, nécessitant la désactivation de l'ASLR, comprend six étapes documentées dans le PoC de DepthFirst AI. Première étape : envoi d'une requête HTTP ciblant le bloc location vulnérable avec des caractères qui s'expandent lors du ré-échappement, déclenchant le débordement. Deuxième étape : corruption du pointeur de fonction cleanup dans une structure ngx_pool_t adjacente dans la heap — une cible de détournement de flux d'exécution. Troisième étape : utilisation de la technique du heap feng shui via deux connexions simultanées pour positionner les pools mémoire de façon adjacente et prévisible, évitant une corruption prématurée des métadonnées. Quatrième étape : injection de fausses structures ngx_pool_cleanup_t dans la heap via le corps de requêtes HTTP POST, permettant de placer des données contrôlées à une adresse connue. Cinquième étape : exploitation de l'architecture fork-based de NGINX, où tous les worker processes partagent le même layout mémoire virtuel après le fork(), pour brute-forcer les valeurs de pointeurs. Sixième étape : lors de la fermeture de la socket victime, ngx_destroy_pool() est appelée, déréférence le pointeur cleanup corrompu, et exécute la fonction contrôlée par l'attaquant.

Sur les systèmes avec ASLR activé — c'est-à-dire la quasi-totalité des systèmes Linux modernes — la chaîne RCE complète est difficile à réaliser de manière fiable. En revanche, le chemin d'exploitation DoS est immédiatement weaponisable et a été démontré de façon fiable par Orca Security le 15 mai 2026 sur Ubuntu avec NGINX 1.28.3 et toutes les mitigations modernes actives. Une seule requête GET contenant 349 octets de padding sûrs suivis de 2 000 caractères URI-encodables (+) déclenche un débordement heap de 4 000 octets, tuant instantanément le worker process NGINX ciblé. Trois requêtes consécutives de ce type ont suffi à éliminer tous les workers simultanément lors des tests d'Orca Security. NGINX relance automatiquement ses workers, mais une boucle de requêtes soutenue crash les processus plus vite qu'ils ne peuvent être relancés, constituant un déni de service persistant sans authentification.

L'impact potentiel de NGINX Rift est considérable compte tenu de l'omniprésence de NGINX dans l'infrastructure Internet mondiale. Selon les données Netcraft citées dans les analyses post-divulgation, NGINX gère environ 33 % de tous les sites web actifs globalement — faisant de cette vulnérabilité l'une des plus larges surfaces d'impact pour un serveur web depuis CVE-2019-0211 (Apache). La plage de versions affectées (0.6.27 à 1.30.0) couvre l'intégralité des releases NGINX sur 18 ans, ce qui signifie que pratiquement tout déploiement NGINX non mis à jour est potentiellement vulnérable si sa configuration réunit les trois conditions déclenchantes. Les distributions Linux majeures — AlmaLinux, RHEL, Debian, Ubuntu — ont déployé des mises à jour de paquets dès les 13-14 mai 2026 via leurs dépôts standard.

Le 17 mai 2026, VulnCheck a confirmé des tentatives d'exploitation actives détectées sur ses réseaux de honeypots, soit seulement quatre jours après la publication du patch et du PoC — un délai typiquement court entre divulgation et exploitation active pour une vulnérabilité de cette criticité. L'exploitation RCE sans ASLR reste réaliste dans plusieurs catégories d'environnements : systèmes embarqués, anciennes VMs de datacenter non migrées, et certains environnements conteneurisés avec configurations kernel réduites.

Impact et exposition

La vulnérabilité NGINX Rift touche toute organisation hébergeant un service NGINX (serveur web, reverse proxy, API gateway, équilibreur de charge) dont la configuration contient le pattern vulnérable dans un bloc location. L'impact DoS est immédiat et ne nécessite aucun prérequis : un attaquant externe peut crasher les worker processes NGINX de manière répétée avec une seule requête HTTP malformée, rendant le service indisponible. Pour les organisations hébergeant des services critiques — e-commerce, APIs bancaires, services de santé en ligne — cette indisponibilité est directement liée à l'intégrité opérationnelle et peut entraîner des pertes financières et réputationnelles significatives.

L'impact RCE, bien que conditionné à l'absence d'ASLR, représente un risque réel pour les systèmes legacy. Une compromission RCE d'un reverse proxy NGINX donne à l'attaquant accès à l'ensemble du trafic HTTP/HTTPS transitant par le proxy, aux certificats TLS stockés sur le système, aux backends applicatifs accessibles depuis le proxy, et aux credentials d'authentification potentiellement mis en cache. Dans les architectures microservices où NGINX fait office de point d'entrée unique, la compromission du reverse proxy revient à compromettre l'ensemble de la surface applicative.

La publication simultanée du patch et du PoC par DepthFirst AI a créé une course entre les équipes d'administration et les attaquants. Les organisations utilisant NGINX via leur gestionnaire de paquets système (apt, yum, dnf) peuvent mettre à jour rapidement via les dépôts de distribution. En revanche, les organisations qui compilent NGINX depuis les sources ou qui utilisent des images Docker officielles non mises à jour sont particulièrement exposées.

Les produits F5 dérivés de NGINX sont également concernés avec leurs propres calendriers de correctifs. NGINX Plus R32 P6 et R36 P4 sont les versions corrigées pour les souscriptions commerciales. NGINX Ingress Controller, App Protect WAF, Gateway Fabric et Instance Manager ont chacun leurs propres versions corrigées, toutes détaillées dans l'advisory F5 K000161019.

Recommandations immédiates

  • Mettre à jour NGINX Open Source vers la version 1.30.1 (branche stable) ou 1.31.0 (branche mainline) — advisory : F5 Security Advisory K000161019
  • Mettre à jour NGINX Plus vers R32 P6 ou R36 P4 selon votre branche de souscription — advisory : F5 Security Advisory K000161019
  • Mitigation sans mise à jour immédiate : remplacer toutes les captures PCRE non nommées ($1, $2) par des captures nommées ((?P<name>...)) dans toutes les directives rewrite affectées de vos configurations NGINX
  • Auditer vos fichiers de configuration NGINX pour identifier les blocs location contenant une directive rewrite avec capture non nommée, caractère ?, et directive suivante dans le même bloc
  • Mettre à jour les images Docker NGINX officielles vers nginx:1.30.1 ou nginx:1.31.0 et redéployer tous les conteneurs concernés
  • Mettre à jour NGINX Ingress Controller, App Protect WAF, Gateway Fabric et Instance Manager selon les versions corrigées listées dans l'advisory F5 K000161019

⚠️ Urgence

CVE-2026-42945 affecte potentiellement 33 % des serveurs web mondiaux avec un déni de service sans authentification exploitable immédiatement. Un proof-of-concept public est disponible depuis le 13 mai 2026 et des tentatives d'exploitation actives ont été confirmées par VulnCheck dès le 17 mai 2026. Toute organisation exposant un service NGINX sur Internet doit vérifier sa configuration et appliquer le patch ou la mitigation en urgence.

Comment savoir si je suis vulnérable ?

Deux vérifications sont nécessaires. Premièrement, vérifiez votre version NGINX en exécutant nginx -v en ligne de commande. Si la version est inférieure à 1.30.1 (stable) ou 1.31.0 (mainline), la version est vulnérable. Deuxièmement, vérifiez votre configuration : recherchez dans vos fichiers nginx.conf et les fichiers inclus les directives rewrite contenant simultanément une capture PCRE non nommée ($1, $2, ...), un ? dans la chaîne de remplacement, ET une directive rewrite, if ou set dans le même bloc location. La commande grep -rn rewrite /etc/nginx/ permet de localiser rapidement les directives à auditer. Si les deux conditions sont réunies, votre instance est exploitable pour un DoS sans authentification.

Votre infrastructure est-elle exposée ?

Ayi NEDJIMI réalise des audits ciblés pour identifier et corriger vos vulnérabilités.

Demander un audit