
PoC basato su C per CVE-2019-5736
Questo repository contiene un exploit proof-of-concept basato su C per CVE-2019-5736.
Questa vulnerabilità consente a un container Docker malintenzionato di sovrascrivere il binario runc dell'host ed eseguire comandi arbitrari sull'host con privilegi di root – compromettendo completamente il sistema host.
Ispirato dal PoC originale basato su Go di Frichetten
Questo codice è solo a scopo educativo. Non eseguirlo su alcun sistema di cui non sei proprietario o per il quale non hai il permesso di testarlo. Un uso improprio può comportare conseguenze legali.
.
├── docker/
│ └── Dockerfile
├── lib/
│ └── exploit.h
├── scripts/
│ ├── build_docker.sh
│ ├── purge_docker_installation.sh
│ ├── setup_env.sh
│ ├── start_docker.sh
│ └── trigger_exploit.sh
├── src/
│ ├── exploit.c
│ └── main.c
├── LICENSE
├── Makefile
└── README.md
Questo exploit è stato testato su:
sudo ./scripts/install_dependencies.sh
Nota: Puoi tranquillamente saltare questo passaggio se hai già installato
wgetebuild-essential.
sudo ./scripts/setup_env.sh
Questo script installa Docker senza systemd o socket activation. È ideale per laboratori VM.
sudo dockerd
Nota: Avrai bisogno di un secondo terminale per eseguirlo in background.
sudo ./scripts/build_docker.sh
Questo script compila l'exploit e crea un'immagine Docker con il binario all'interno.
Nota: Puoi anche compilare manualmente il binario dell'exploit eseguendo
make.
Puoi rimuovere completamente Docker e riportare il sistema allo stato precedente all'installazione:
sudo ./scripts/purge_docker_installation.sh
Per prima cosa avviamo il nostro container con l'exploit. Puoi usare questo comando:
sudo docker run -it --name exp --rm runc_exploit
oppure lo script shell incluso:
sudo ./scripts/start_docker.sh
All'interno del container possiamo ora avviare il nostro binario dell'exploit:
./exploit -c "$COMAND"
Il binario accetta tre argomenti:
-hstampa il messaggio di utilizzo e-cdefinisce il payload di comando che vogliamo eseguire sull'host. L'ultimo argomento-dattiva la stampa di debug durante l'esecuzione. (es. parsing delle informazioni di/proc)
Nota: Se l'argomento
-cnon viene fornito, l'exploit eseguiràcp /etc/shadow > /tmp/pwned && chmod 644 /tmp/pwned.
L'exploit ora attende un processo runc in arrivo sull'host. Esegui
sudo ./scripts/trigger_exploit.sh
Questo script aprirà un nuovo processo all'interno del container eseguendo bin/sh e quindi innescherà l'exploit.
Nota: Puoi anche attivare l'exploit eseguendo manualmente
docker execsull'host, ma il tempismo è fondamentale perché l'attuale versione del PoC funzioni. Quindi potrebbero essere necessari alcuni tentativi...
Se runc è stato sfruttato con successo, dovresti vedere un output simile:

Ora siamo in grado di aprire il nostro file shadow compromesso:
