Skip to content
KitploitKITPLOIT
StrumentiExploitsBlog
Log in
Invia
StrumentiExploitsBlog
Invia

Strumenti di Hacking, PenTest e Cybersecurity per il tuo Arsenale di Sicurezza!

Kitploit è una directory di strumenti di hacking, cybersecurity e pentesting. Scopri gli ultimi aggiornamenti dei progetti per trovare vulnerabilità, analizzare sistemi, automatizzare i test e rafforzare la tua sicurezza.

FeedContattoPrivacy© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
FEP3370-advanced-ethical-hacking — Sfruttamento DHCP con DynoRoot (CVE-2018-1111) | Kitploit
Strumenti/GitHubGitHub/baldassarrefe/fep3370-advanced-ethical-hacking
Analisi delle VulnerabilitàExploitSicurezza di RetePenetration TestingApprendimento e FormazioneLab e Pratica
GitHubbaldassarrefe/fep3370-advanced-ethical-hacking

FEP3370-advanced-ethical-hacking

Sfruttamento DHCP con DynoRoot (CVE-2018-1111)

Vedi RepositorySito web
105 anni faNon ancora revisionato

Più Popolari

Vedi tutti →

Scopri gli strumenti più utilizzati dalla nostra community.

Esplora tutti gli strumenti

Sfoglia la nostra collezione di strumenti

Vedi tutti gli strumenti →
Condividi

DynoRoot CVE-2018-1111

Progetto finale per il corso Advanced Ethical Hacking presso il KTH, Stoccolma

Questo progetto dimostra una vulnerabilità nota delle macchine Fedora e RedHat legata a un'implementazione lato client non sicura del Dynamic Host Configuration Protocol (DHCP). Un server DHCP malevolo può creare offerte DHCP con un payload malevolo che viene eseguito in una shell root sulla macchina vittima.

La vulnerabilità è attribuita a Felix Wilhelm ed è nota come CVE-2018-1111 o "DynoRoot".

Indice dei contenuti:

  • Introduzione
    • Contesto
    • Vulnerabilità
    • Fonti
  • Configurazione
    • Prerequisiti
    • Macchina gateway
    • Attaccante
    • Vittima Fedora
  • Esecuzione dell'attacco
    • Gateway
    • Attaccante
    • Vittima
    • Analisi
  • Lavoro futuro
  • Crediti

Introduzione

Contesto

Il Dynamic Host Configuration Protocol (DHCP) è un componente spesso trascurato nei sistemi in rete. Il suo ruolo è consentire la configurazione dinamica dei computer host che si collegano a una rete esistente. Il caso d'uso più comune è assegnare un indirizzo IP agli host appena connessi e informarli delle rotte esistenti per accedere ad altre reti. È possibile specificare opzioni aggiuntive, ad esempio l'indirizzo di un server DNS locale e la zona che serve, o la posizione di un file di avvio.

Analizziamo il protocollo a quattro fasi che viene seguito quando un nuovo host vuole unirsi a una rete dopo essersi connesso fisicamente tramite una connessione ethernet o wireless.

  1. Il client, privo di un indirizzo IP, invia in broadcast un messaggio DISCOVER sulla rete.
  2. Un server DHCP responsabile di quella rete risponde con un OFFER, contenente: indirizzo IP, subnet mask della rete, indirizzo del router e altre opzioni.
  3. Il client risponde con un REQUEST, richiedendo ufficialmente di prendere in affitto l'indirizzo IP offerto.
  4. Il server conclude lo scambio con un ACK, indicando che al client è permesso utilizzare l'indirizzo IP per un determinato periodo di tempo.

Dopo lo scambio iniziale, il client può rinnovare il lease semplicemente inviando un altro messaggio REQUEST. Il server verificherà l'esistenza di un lease con l'indirizzo IP e MAC del client e risponderà con un ACK.

Sessione DHCP (figura da Wikimedia Commons, sotto licenza CC BY-SA 4.0).

Alcune cose da notare:

  • Un client può anche saltare la fase DISCOVER e richiedere immediatamente un indirizzo con REQUEST. Ciò è comune in scenari in cui il client si è già connesso alla rete in passato e ricorda l'indirizzo precedente. In questo caso, il server verifica la disponibilità dell'indirizzo e invia un ACK alla richiesta, oppure, se il lease non è disponibile, invia un NACK.
  • Al momento della disconnessione, i client possono inviare un messaggio RELEASE per informare il server che l'indirizzo è ora disponibile. Tuttavia, ciò non è obbligatorio dal protocollo e il server raccoglierà periodicamente i lease scaduti.
  • Ogni server DHCP gestisce un pool limitato di indirizzi IP; una volta assegnati tutti, il server non sarà in grado di offrire lease ai nuovi client.
  • Possono esistere più server DHCP sulla stessa rete; se un client riceve più offerte, ne accetterà solo una; gli altri server osserveranno la richiesta REQUEST in broadcast e invalideranno l'offerta.

Vulnerabilità

La vulnerabilità si trova in /etc/NetworkManager/dispatcher.d/11-dhclient, che viene eseguito dal client per analizzare e impostare le opzioni ricevute tramite DHCP.

  • declare è un builtin di bash che, se usato senza argomenti, elenca tutte le variabili dichiarate.
  • grep filtra tutte le variabili relative a DHCP.
  • while read opt itera sulle variabili DHCP una per una, esegue un po' di parsing e stampa una riga come export new_optionname=value per ogni opzione.
  • le istruzioni export vengono poi valutate dalla shell tramite 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 -->
#### Funzionamento normale
In situazioni normali, il codice funzionerebbe perfettamente e analizzerebbe le nuove opzioni DHCP.
Ad esempio, il seguente codice:```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

Stampa queste due istruzioni export da valutare tramite eval:```bash export new_option_one=42 export new_option_two='bla bla'

<!-- omit in toc -->
#### Iniezione di codice
Tuttavia, a causa del `eval` non sicuro, è possibile iniettare comandi 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
)"

Risulterà nella valutazione di echo Hacked!:```text [1] 1541 Hacked!

### Fonti
- [Voce nel database Exploit](https://www.exploit-db.com/exploits/44890)
- [Annuncio RedHat](https://access.redhat.com/security/vulnerabilities/3442151)
- [Post sul blog di Tenable](https://www.tenable.com/blog/advisory-red-hat-dhcp-client-command-injection-trouble)
- [Repository GitHub](https://github.com/kkirsche/CVE-2018-1111)
- [Annuncio su Twitter](https://twitter.com/_fel1x/status/996388421273882626?lang=en)

## Configurazione
La configurazione minima per dimostrare l'exploit consiste in due sole macchine: la macchina `victim`
che esegue Fedora 28 e una macchina `attacker`. In questa configurazione, l'attaccante deve semplicemente fornire un
servizio DHCP e attendere la connessione della vittima.

<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>Configurazione minima per l'exploit.</figcaption>
</figure>

Una configurazione più realistica collocherebbe le macchine su una rete privata, dove una terza macchina, il
`gateway`, è configurata come server DHCP benigno e come gateway verso Internet esterno.
In questa configurazione, l'attaccante deve impedire alla vittima di connettersi al server DHCP legittimo
prima di sperare di eseguire l'attacco.
Scarica lo strumento