GCP - Network Docker Escape
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)
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
).
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 a autoriza 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.
Embora o spoofing ARP 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.
Esta versão do rshijack permite inserir os números ACK e SEQ como argumentos de linha de comando, facilitando o spoofing 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. Este 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 o spoofing, os seguintes passos são necessários:
Monitorar pedidos ao servidor de Metadados usando tcpdump:
Procure uma linha semelhante a:
Envie os dados de metadados falsos com o ETAG correto para rshijack:
Este passo autoriza a chave pública, permitindo a conexão SSH com a chave privada correspondente.
Aprenda e pratique Hacking AWS:HackTricks Training AWS Red Team Expert (ARTE) Aprenda e pratique Hacking GCP: HackTricks Training GCP Red Team Expert (GRTE)