release_agent exploit - Relative Paths to PIDs
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Para mais detalhes verifique o blog em https://ajxchapman.github.io/containers/2020/11/19/privileged-container-escape.html. Isso é apenas um resumo:
A técnica descreve um método para executar código do host a partir de um contêiner, superando desafios impostos por configurações de driver de armazenamento que obscurecem o caminho do sistema de arquivos do contêiner no host, como Kata Containers ou configurações específicas de devicemapper
.
Passos principais:
Localizando IDs de Processo (PIDs): Usando o link simbólico /proc/<pid>/root
no pseudo-sistema de arquivos Linux, qualquer arquivo dentro do contêiner pode ser acessado em relação ao sistema de arquivos do host. Isso contorna a necessidade de conhecer o caminho do sistema de arquivos do contêiner no host.
Bash de PID: Uma abordagem de força bruta é empregada para pesquisar PIDs no host. Isso é feito verificando sequencialmente a presença de um arquivo específico em /proc/<pid>/root/<file>
. Quando o arquivo é encontrado, isso indica que o PID correspondente pertence a um processo em execução dentro do contêiner alvo.
Acionando Execução: O caminho do PID adivinhado é escrito no arquivo cgroups release_agent
. Essa ação aciona a execução do release_agent
. O sucesso desta etapa é confirmado verificando a criação de um arquivo de saída.
O processo de exploração envolve um conjunto mais detalhado de ações, visando executar um payload no host adivinhando o PID correto de um processo em execução dentro do contêiner. Veja como se desenrola:
Inicializar Ambiente: Um script de payload (payload.sh
) é preparado no host, e um diretório único é criado para manipulação de cgroup.
Preparar Payload: O script de payload, que contém os comandos a serem executados no host, é escrito e tornado executável.
Configurar Cgroup: O cgroup é montado e configurado. A flag notify_on_release
é definida para garantir que o payload execute quando o cgroup for liberado.
Força Bruta de PID: Um loop itera através de PIDs potenciais, escrevendo cada PID adivinhado no arquivo release_agent
. Isso efetivamente define o script de payload como o release_agent
.
Acionar e Verificar Execução: Para cada PID, o cgroup.procs
do cgroup é escrito, acionando a execução do release_agent
se o PID estiver correto. O loop continua até que a saída do script de payload seja encontrada, indicando execução bem-sucedida.
PoC do post do blog:
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)