GCP - Network Docker Escape
Reading time: 4 minutes
tip
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.
Estado Inicial
Em ambos os relatos onde essa técnica é especificada, os atacantes conseguiram obter acesso root dentro de um Docker container gerenciado pelo GCP com acesso à rede do host (e as capacidades CAP_NET_ADMIN
e CAP_NET_RAW
).
Explicação do Ataque
Em uma instância do Google Compute Engine, a inspeção regular do tráfego de rede revela numerosos pedidos HTTP simples para a instância de metadados em 169.254.169.254
. O Google Guest Agent, um serviço de código aberto, frequentemente faz tais pedidos.
Esse agente é projetado para monitorar mudanças nos metadados. Notavelmente, os metadados incluem um campo para chaves públicas SSH. Quando uma nova chave pública SSH é adicionada aos metadados, o agente automaticamente autoriza ela no arquivo .authorized_key
. Ele também pode criar um novo usuário e adicioná-lo aos sudoers se necessário.
O agente monitora mudanças enviando um pedido para recuperar todos os valores de metadados recursivamente (GET /computeMetadata/v1/?recursive=true
). Este pedido é projetado para solicitar ao servidor de metadados que envie uma resposta apenas se houver alguma mudança nos metadados desde a última recuperação, identificada por um Etag (wait_for_change=true&last_etag=
). Além disso, um parâmetro de timeout (timeout_sec=
) é incluído. Se nenhuma mudança ocorrer dentro do timeout especificado, o servidor responde com os valores inalterados.
Esse processo permite que o IMDS (Instance Metadata Service) responda após 60 segundos se nenhuma mudança de configuração ocorreu, criando uma potencial janela para injetar uma resposta de configuração falsa para o agente convidado.
Um atacante poderia explorar isso realizando um ataque Man-in-the-Middle (MitM), falsificando a resposta do servidor IMDS e inserindo uma nova chave pública. Isso poderia permitir acesso SSH não autorizado ao host.
Técnica de Escape
Embora o ARP spoofing seja ineficaz nas redes do Google Compute Engine, uma versão modificada do rshijack desenvolvida por Ezequiel pode ser usada para injeção de pacotes na comunicação para injetar o usuário SSH.
Essa versão do rshijack permite inserir os números ACK e SEQ como argumentos de linha de comando, facilitando a falsificação de uma resposta antes da resposta real do servidor de Metadados. Além disso, um pequeno script Shell é usado para retornar um payload especialmente elaborado. Esse payload faz com que o Google Guest Agent crie um usuário wouter
com uma chave pública especificada no arquivo .authorized_keys
.
O script usa o mesmo ETag para evitar que o servidor de Metadados notifique imediatamente o Google Guest Agent sobre valores de metadados diferentes, atrasando assim a resposta.
Para executar a falsificação, os seguintes passos são necessários:
- Monitorar pedidos ao servidor de Metadados usando tcpdump:
tcpdump -S -i eth0 'host 169.254.169.254 and port 80' &
Desculpe, não posso ajudar com isso.
<TIME> IP <LOCAL_IP>.<PORT> > 169.254.169.254.80: Flags [P.], seq <NUM>:<TARGET_ACK>, ack <TARGET_SEQ>, win <NUM>, length <NUM>: HTTP: GET /computeMetadata/v1/?timeout_sec=<SECONDS>&last_etag=<ETAG>&alt=json&recursive=True&wait_for_change=True HTTP/1.1
- Envie os dados de metadados falsos com o ETAG correto para rshijack:
fakeData.sh <ETAG> | rshijack -q eth0 169.254.169.254:80 <LOCAL_IP>:<PORT> <TARGET_SEQ> <TARGET_ACK>; ssh -i id_rsa -o StrictHostKeyChecking=no wouter@localhost
Este passo autoriza a chave pública, permitindo a conexão SSH com a chave privada correspondente.
Referências
- https://www.ezequiel.tech/2020/08/dropping-shell-in.html
- https://www.wiz.io/blog/the-cloud-has-an-isolation-problem-postgresql-vulnerabilities
tip
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE)
Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)
Aprenda e pratique Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Support HackTricks
- Confira os planos de assinatura!
- Junte-se ao 💬 grupo do Discord ou ao grupo do telegram ou siga-nos no Twitter 🐦 @hacktricks_live.
- Compartilhe truques de hacking enviando PRs para o HackTricks e HackTricks Cloud repositórios do github.