Retour aux mises à jour
UpdatedJul 31, 2026

CVE-2026-27654-PoC — Mis à jour !

Preuve de concept et analyse technique pour CVE-2026-27654, une vulnérabilité de débordement de tampon sur le tas (heap-based buffer overflow) dans le module HTTP WebDAV de NGINX, incluant l'analyse de la cause racine, la reproduction et les mesures d'atténuation.

Partager

CVE-2026-27654 – PoC de gestion des chemins DAV et alias du module ngx_http_dav_module de nginx

Ce dépôt fournit un exploit proof-of-concept pour CVE-2026-27654, une vulnérabilité de débordement de tas (heap overflow) dans le ngx_http_dav_module de nginx. Le bug provient d'un underflow de size_t lors du traitement des requêtes MOVE/COPY avec des en-têtes Destination spécialement conçus et des emplacements basés sur alias.

⚠️ Avertissement : Cet outil est destiné uniquement à la recherche et aux tests de sécurité autorisés. Utilisez-le uniquement contre des systèmes que vous possédez ou pour lesquels vous disposez d'une autorisation explicite de test. Les auteurs déclinent toute responsabilité en cas d'utilisation abusive.

CVE-2026-27654 Logo

🔥 Présentation de la vulnérabilité

CVE-2026-27654 est un débordement de tampon basé sur le tas (heap-based buffer overflow) déclenchable à distance dans le module HTTP WebDAV de NGINX, causé par un underflow entier (integer underflow) dans ngx_http_dav_copy_move_handler() (src/http/modules/ngx_http_dav_module.c). La vulnérabilité survient lorsque la longueur de l'URI de destination est dérivée en soustrayant le préfixe d'emplacement configuré du chemin de l'en-tête Destination. Comme les deux opérandes sont de type size_t, un chemin de destination plus court fait que la soustraction s'emballe jusqu'à une valeur non signée proche du maximum.

La longueur résultant de cet emballement est ensuite utilisée comme argument de taille pour memcpy(), ce qui entraîne une écriture hors limites dans le tas qui corrompt la mémoire et fait immédiatement planter le processus worker de NGINX. Un attaquant distant non authentifié peut déclencher cette condition de manière fiable à l'aide d'une seule requête MOVE ou COPY spécialement conçue, ciblant un emplacement WebDAV mappé via alias. Bien que le processus master de NGINX relance automatiquement les workers en échec, des requêtes répétées peuvent maintenir le service dans une boucle continue de crash des workers, ce qui entraîne un déni de service (DoS) persistant.

AddressSanitizer (ASan) valide la vulnérabilité avec une erreur negative-size-param dans memcpy(), en retraçant le chemin d'exécution de ngx_http_dav_copy_move_handler() à ngx_http_core_module.c. La vulnérabilité affecte NGINX 0.5.13–1.28.2 (stable) et 1.29.0–1.29.6 (mainline) compilés avec --with-http_dav_module et configurés avec la directive alias. Le problème a été corrigé dans NGINX 1.28.3 et 1.29.7 (commit ab4b5b8, PR #1210) grâce à une validation appropriée de la longueur du chemin de destination calculé avant les opérations mémoire.

✨ Fonctionnalités

  • Sélection interactive du mode – choisissez parmi quatre modes de fonctionnement à l'exécution (crash, write-file, cron-shell, cron-cmd) avec un menu numéroté clair.
  • Déclenchement du crash – envoie la requête MOVE/COPY canonique qui déclenche l'underflow de size_t et fait planter le worker vulnérable.
  • Mode write-file – téléverse un contenu arbitraire vers n'importe quel emplacement du système de fichiers (nécessite un environnement de laboratoire avec un alias inscriptible).
  • Livraison cron-shell – déploie une tâche cron de reverse shell dans /etc/cron.d/, avec des invites interactives pour LHOST/LPORT et un rappel pour démarrer le listener.
  • Livraison cron-cmd – exécute une commande personnalisée via cron ; accepte soit une saisie interactive, soit l'option --cron-command.
  • Vérification de vulnérabilité (--check) – mode non interactif qui exécute le test de crash et affiche un verdict clair [VULNERABLE] / [NOT VULNERABLE], avec un code de sortie 0 ou 1.
  • Prise en charge du proxy HTTP (--proxy) – achemine toutes les requêtes via un proxy HTTP/HTTPS (par ex. Burp Suite, mitmproxy) pour le débogage ou l'inspection du trafic.
  • Gestion intelligente des fichiers – vérifie si le fichier de déclenchement existe déjà (via HEAD/GET) et ignore le PUT s'il est présent, évitant ainsi des téléversements inutiles.
  • Options de payload flexibles – fournissez les payloads via --payload-file (binaire), --payload-text (texte littéral), ou utilisez le contenu de test par défaut.
  • Arguments de ligne de commande complets – affinez chaque aspect de l'exploit : --destination-path, --alias-len, --escape-depth, --method, --location-prefix, et plus encore.
  • Repli robuste – si la bibliothèque requests n'est pas installée, le script se replie sur le module standard http.client de Python (la prise en charge du proxy est désactivée en mode de repli).

📦 Installation

git clone https://github.com/Debajyoti0-0/CVE-2026-27654-PoC.git
cd CVE-2026-27654-PoC
pip install -r requirements.txt

🚀 Utilisation

Mode interactif (menu)

python exploit.py --target 192.168.1.100:8080

Un menu numéroté s'affichera et vous serez invité à sélectionner un mode.

Vérification de vulnérabilité (non interactive)

python exploit.py --target 192.168.1.100:8080 --check

Cela force le mode crash, exécute l'exploit et affiche [VULNERABLE] ou [NOT VULNERABLE] avant de se terminer avec le code 0 ou 1.

Avec un proxy HTTP

python exploit.py --target 192.168.1.100:8080 --proxy http://127.0.0.1:8080

Toutes les requêtes HTTP seront envoyées via le proxy spécifié (utile pour le débogage avec Burp).

⚙️ Référence des options

Catégories