Skip to content
KitploitKITPLOIT
OutilsBlog
Log in
Soumettre
OutilsBlog
Soumettre

Outils de Hacking, PenTest et Cybersécurité pour votre Arsenal de Sécurité !

Kitploit est un répertoire d'outils de hacking, de cybersécurité et de pentesting. Découvrez les dernières mises à jour des projets pour trouver des vulnérabilités, analyser des systèmes, automatiser les tests et renforcer votre sécurité.

··Flux·Contact·Confidentialité·© 2026 Kitploit

Répertoire d'outils

Catégories

Voir toutes les catégories
Loading categories
FEP3370-advanced-ethical-hacking — Exploitation DHCP avec DynoRoot (CVE-2018-1111) | Kitploit
Outils/GitHubGitHub/baldassarrefe/fep3370-advanced-ethical-hacking
Analyse des VulnérabilitésExploitationSécurité RéseauTests d'IntrusionApprentissage et ÉducationLabs et Pratique
GitHubbaldassarrefe/fep3370-advanced-ethical-hacking

FEP3370-advanced-ethical-hacking

Exploitation DHCP avec DynoRoot (CVE-2018-1111)

Voir le dépôtSite web
8il y a 5 ansPas encore vérifié

Populaires

Voir tout →

Découvrez les outils les plus utilisés par notre communauté.

Explorer tous les outils

Parcourez notre collection d'outils

Voir tous les outils →
Partager

DynoRoot CVE-2018-1111

Projet final pour le cours Advanced Ethical Hacking à KTH, Stockholm

Ce projet démontre une vulnérabilité connue des machines Fedora et RedHat liée à une implémentation côté client non sûre du protocole de configuration dynamique des hôtes (DHCP). Un serveur DHCP malveillant peut concevoir des offres DHCP avec une charge utile malveillante qui est exécutée dans un shell root sur la machine victime.

La vulnérabilité est attribuée à Felix Wilhelm et est connue sous le nom de CVE-2018-1111 ou « DynoRoot ».

Table des matières :

  • Introduction
    • Contexte
    • Vulnérabilité
    • Sources
  • Installation
    • Prérequis
    • Machine passerelle
    • Attaquant
    • Victime Fedora
  • Exécution de l'attaque
    • Passerelle
    • Attaquant
    • Victime
    • Analyse
  • Travaux futurs
  • Crédits

Introduction

Contexte

Le protocole de configuration dynamique des hôtes (DHCP) est un composant souvent négligé dans les systèmes en réseau. Son rôle est de permettre la configuration dynamique des machines hôtes qui se connectent à un réseau existant. Le cas d'usage le plus courant est d'attribuer une adresse IP aux hôtes nouvellement connectés et de les informer des routes existantes pour accéder à d'autres réseaux. Des options supplémentaires peuvent être spécifiées, par exemple l'adresse d'un serveur DNS local et la zone qu'il dessert, ou l'emplacement d'un fichier d'amorçage.

Analysons le protocole en 4 étapes qui est suivi lorsqu'un nouvel hôte veut rejoindre un réseau après s'y être connecté physiquement au moyen d'une connexion ethernet ou sans fil.

  1. Le client, sans adresse IP, diffuse un message DISCOVER sur le réseau.
  2. Un serveur DHCP responsable de ce réseau répond avec une OFFER, contenant : l'adresse IP, le masque de sous-réseau, l'adresse du routeur, et d'autres options.
  3. Le client répond avec un REQUEST, demandant officiellement de louer l'adresse IP qui a été proposée.
  4. Le serveur conclut l'échange avec un ACK, indiquant que le client est autorisé à utiliser l'adresse IP pendant une durée spécifiée.

Après l'échange initial, le client peut renouveler le bail en envoyant simplement un autre message REQUEST. Le serveur vérifiera l'existence d'un bail avec l'adresse IP et l'adresse MAC du client et répondra avec un ACK.

Session DHCP (figure de Wikimedia Commons, sous licence CC BY-SA 4.0).

Quelques points à noter :

  • Un client peut également sauter la phase DISCOVER et REQUEST immédiatement une adresse. C'est courant dans les scénarios où le client s'est déjà connecté au réseau par le passé et se souvient de l'adresse précédente. Dans ce cas, le serveur vérifie la disponibilité de l'adresse et ACK la demande, ou, si le bail n'est pas disponible, envoie un NACK.
  • À la déconnexion, les clients peuvent envoyer un message RELEASE pour informer le serveur que l'adresse est désormais disponible. Cependant, cela n'est pas exigé par le protocole et le serveur récupérera périodiquement les bails expirés.
  • Chaque serveur DHCP gère un pool limité d'adresses IP ; une fois qu'elles sont toutes attribuées, le serveur ne pourra plus OFFER de bails à de nouveaux clients.
  • Plusieurs serveurs DHCP peuvent exister sur le même réseau ; si un client reçoit plusieurs OFFERs, il n'en acceptera qu'une seule, les autres serveurs observeront le REQUEST diffusé et invalideront l'offre.

Vulnérabilité

La vulnérabilité se situe dans /etc/NetworkManager/dispatcher.d/11-dhclient, qui est exécuté par le client pour analyser et définir les options reçues via DHCP.

  • declare est une commande intégrée de bash qui, utilisée sans arguments, liste toutes les variables déclarées.
  • grep filtre toutes les variables liées au DHCP.
  • while read opt itère sur les variables DHCP une par une, effectue une analyse et imprime une ligne comme export new_optionname=value pour chaque option.
  • les instructions export sont ensuite évaluées par le shell via eval.```bash eval "$( declare | LC_ALL=C grep '^DHCP4_[A-Z_]=' | while read opt; do optname=${opt%%=} optname=${optname,,} optname=new_${optname#dhcp4_} optvalue=${opt#*=} echo "export $optname=$optvalue" done )"
<!-- omit in toc -->
#### Fonctionnement normal
Dans des situations normales, le code fonctionnerait parfaitement et analyserait les nouvelles options DHCP.
Par exemple, le code suivant :```bash
DHCP4_OPTION_ONE=42
DHCP4_OPTION_TWO="bla bla"

declare | LC_ALL=C grep '^DHCP4_[A-Z_]*=' | while read opt; do
  optname=${opt%%=*}
  optname=${optname,,}
  optname=new_${optname#dhcp4_}
  optvalue=${opt#*=}
  echo "export $optname=$optvalue"
done

Affichera ces deux instructions export à évaluer avec eval :```bash export new_option_one=42 export new_option_two='bla bla'

<!-- omit in toc -->
#### Injection de code
Cependant, en raison du `eval` non sécurisé, il est possible d'injecter des commandes bash :```bash
DHCP4_OPTION_ONE="x'& echo Hacked! #"
DHCP4_OPTION_TWO='bla bla'

eval "$(                             
  declare | LC_ALL=C grep '^DHCP4_[A-Z_]*=' | while read opt; do
    optname=${opt%%=*}
    optname=${optname,,}
    optname=new_${optname#dhcp4_}
    optvalue=${opt#*=}
    echo "export $optname=$optvalue"
  done
)"

Cela entraînera l'évaluation de echo Hacked!:```text [1] 1541 Hacked!

### Sources
- [Entrée de la base d'exploits](https://www.exploit-db.com/exploits/44890)
- [Annonce de RedHat](https://access.redhat.com/security/vulnerabilities/3442151)
- [Article de blog Tenable](https://www.tenable.com/blog/advisory-red-hat-dhcp-client-command-injection-trouble)
- [Dépôt GitHub](https://github.com/kkirsche/CVE-2018-1111)
- [Annonce sur Twitter](https://twitter.com/_fel1x/status/996388421273882626?lang=en)

## Configuration
La configuration minimale pour démontrer l'exploit se compose de seulement deux machines : la machine `victim`
exécutant Fedora 28, et une machine `attacker`. Dans cette configuration, l'attaquant doit simplement fournir un
service DHCP et attendre la connexion de la victime.

<figure style="text-align:center">
  <img src="https://raw.githubusercontent.com/baldassarrefe/fep3370-advanced-ethical-hacking/HEAD/media/network_simple.svg" style="max-width:400px;" width="90%"/>
  <figcaption>Configuration minimale de l'exploit.</figcaption>
</figure>

Une configuration plus réaliste placerait les machines sur un réseau privé, où une troisième machine, la
`gateway`, est configurée comme serveur DHCP bénin et comme passerelle vers Internet.
Dans cette configuration, l'attaquant doit empêcher la victime de se connecter au serveur DHCP légitime
avant de pouvoir espérer mener l'attaque.
Télécharger l’outil