release_agent exploit - Relative Paths to PIDs
Per ulteriori dettagli controlla l'articolo del blog da https://ajxchapman.github.io/containers/2020/11/19/privileged-container-escape.html. Questo è solo un riassunto:
La tecnica illustra un metodo per eseguire codice host da un container, superando le sfide poste dalle configurazioni del driver di archiviazione che oscurano il percorso del filesystem del container sull'host, come Kata Containers o specifiche impostazioni di devicemapper
.
Passaggi chiave:
Individuazione degli ID dei processi (PID): Utilizzando il link simbolico
/proc/<pid>/root
nel pseudo-filesystem di Linux, è possibile accedere a qualsiasi file all'interno del container in relazione al filesystem dell'host. Ciò evita la necessità di conoscere il percorso del filesystem del container sull'host.PID Bashing: Viene utilizzato un approccio di forza bruta per cercare tra i PID sull'host. Ciò viene fatto controllando sequenzialmente la presenza di un file specifico in
/proc/<pid>/root/<file>
. Quando il file viene trovato, indica che il PID corrispondente appartiene a un processo in esecuzione all'interno del container di destinazione.Trigger dell'esecuzione: Il percorso PID indovinato viene scritto nel file
release_agent
deicgroups
. Questa azione attiva l'esecuzione delrelease_agent
. Il successo di questo passaggio viene confermato controllando la creazione di un file di output.
Processo di sfruttamento
Il processo di sfruttamento prevede un insieme più dettagliato di azioni, mirate ad eseguire un payload sull'host indovinando il PID corretto di un processo in esecuzione all'interno del container. Ecco come si svolge:
Inizializza l'ambiente: Uno script di payload (
payload.sh
) viene preparato sull'host e viene creata una directory univoca per la manipolazione dei cgroup.Prepara il payload: Lo script di payload, che contiene i comandi da eseguire sull'host, viene scritto e reso eseguibile.
Configura il Cgroup: Il cgroup viene montato e configurato. Il flag
notify_on_release
viene impostato per garantire che il payload venga eseguito quando il cgroup viene rilasciato.Forza bruta PID: Un ciclo itera attraverso i PID potenziali, scrivendo ogni PID indovinato nel file
release_agent
. Ciò imposta efficacemente lo script di payload comerelease_agent
.Attiva e controlla l'esecuzione: Per ogni PID, viene scritto il
cgroup.procs
del cgroup, attivando l'esecuzione delrelease_agent
se il PID è corretto. Il ciclo continua finché non viene trovato l'output dello script di payload, indicando un'esecuzione riuscita.
PoC dall'articolo del blog:
Last updated