Docker release_agent cgroups escape
Last updated
Last updated
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Para mais detalhes, consulte o post original do blog. Este é apenas um resumo:
Original PoC:
A prova de conceito (PoC) demonstra um método para explorar cgroups criando um arquivo release_agent
e acionando sua invocação para executar comandos arbitrários no host do contêiner. Aqui está uma divisão dos passos envolvidos:
Preparar o Ambiente:
Um diretório /tmp/cgrp
é criado para servir como um ponto de montagem para o cgroup.
O controlador de cgroup RDMA é montado neste diretório. Em caso de ausência do controlador RDMA, sugere-se usar o controlador de cgroup memory
como alternativa.
Configurar o Cgroup Filho:
Um cgroup filho chamado "x" é criado dentro do diretório cgroup montado.
As notificações são ativadas para o cgroup "x" escrevendo 1 em seu arquivo notify_on_release.
Configurar o Release Agent:
O caminho do contêiner no host é obtido a partir do arquivo /etc/mtab.
O arquivo release_agent do cgroup é então configurado para executar um script chamado /cmd localizado no caminho do host adquirido.
Criar e Configurar o Script /cmd:
O script /cmd é criado dentro do contêiner e é configurado para executar ps aux, redirecionando a saída para um arquivo chamado /output no contêiner. O caminho completo de /output no host é especificado.
Acionar o Ataque:
Um processo é iniciado dentro do cgroup filho "x" e é imediatamente terminado.
Isso aciona o release_agent
(o script /cmd), que executa ps aux no host e grava a saída em /output dentro do contêiner.
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)