release_agent exploit - Relative Paths to PIDs
Per ulteriori dettagli controlla il blog post da https://ajxchapman.github.io/containers/2020/11/19/privileged-container-escape.html. Questo è solo un riassunto:
La tecnica delinea un metodo per eseguire codice host da all'interno di 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 impostazioni specifiche di devicemapper
.
Passaggi chiave:
Localizzazione degli ID di processo (PID): Utilizzando il collegamento simbolico
/proc/<pid>/root
nel pseudo-filesystem Linux, qualsiasi file all'interno del container può essere accessibile rispetto al filesystem dell'host. Questo bypassa la necessità di conoscere il percorso del filesystem del container sull'host.PID Bashing: Viene impiegato un approccio di forza bruta per cercare tra i PID sull'host. Questo 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 target.Attivazione dell'esecuzione: Il percorso PID indovinato viene scritto nel file
cgroups release_agent
. Questa azione attiva l'esecuzione delrelease_agent
. Il successo di questo passaggio è confermato controllando la creazione di un file di output.
Processo di sfruttamento
Il processo di sfruttamento coinvolge un insieme di azioni più dettagliato, mirato a eseguire un payload sull'host indovinando il corretto PID di un processo in esecuzione all'interno del container. Ecco come si svolge:
Inizializzare l'ambiente: Uno script payload (
payload.sh
) viene preparato sull'host e viene creata una directory unica per la manipolazione del cgroup.Preparare il payload: Lo script payload, che contiene i comandi da eseguire sull'host, viene scritto e reso eseguibile.
Impostare il cgroup: Il cgroup viene montato e configurato. Il flag
notify_on_release
è impostato per garantire che il payload venga eseguito quando il cgroup viene rilasciato.Forza bruta PID: Un ciclo itera attraverso i potenziali PID, scrivendo ogni PID indovinato nel file
release_agent
. Questo imposta effettivamente lo script payload comerelease_agent
.Attivare e controllare l'esecuzione: Per ogni PID, il
cgroup.procs
del cgroup viene scritto, attivando l'esecuzione delrelease_agent
se il PID è corretto. Il ciclo continua fino a quando non viene trovato l'output dello script payload, indicando un'esecuzione riuscita.
PoC dal blog post:
Last updated