GCP - Network Docker Escape

Aprenda e pratique Hacking AWS:Treinamento HackTricks AWS Red Team Expert (ARTE) Aprenda e pratique Hacking GCP: Treinamento HackTricks GCP Red Team Expert (GRTE)

Suporte ao HackTricks

Estado Inicial

Em ambos os relatórios em que essa técnica é especificada, os atacantes conseguiram obter acesso root dentro de um container Docker 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 numerosas solicitações HTTP simples para a instância de metadados em 169.254.169.254. O Google Guest Agent, um serviço de código aberto, faz essas solicitações com frequência.

Este agente é projetado para monitorar alterações 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 a autoriza automaticamente no arquivo .authorized_key. Ele também pode criar um novo usuário e adicioná-lo aos sudoers se necessário.

O agente monitora as alterações enviando uma solicitação para recuperar todos os valores de metadados recursivamente (GET /computeMetadata/v1/?recursive=true). Esta solicitação é projetada para fazer o servidor de metadados enviar uma resposta somente se houver alguma alteração nos metadados desde a última recuperação, identificada por um Etag (wait_for_change=true&last_etag=). Além disso, um parâmetro de tempo limite (timeout_sec=) é incluído. Se nenhuma alteração ocorrer dentro do tempo limite especificado, o servidor responde com os valores inalterados.

Esse processo permite que o IMDS (Serviço de Metadados da Instância) responda após 60 segundos se nenhuma alteração de configuração ocorrer, criando uma janela potencial para injetar uma resposta de configuração falsa para o agente convidado.

Um atacante poderia explorar isso realizando um ataque de 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 Fuga

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 uma carga útil especialmente elaborada. Essa carga útil aciona o Google Guest Agent para criar 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:

  1. Monitore as solicitações para o servidor de Metadados usando tcpdump:

tcpdump -S -i eth0 'host 169.254.169.254 and port 80' &

Procure por uma linha semelhante a:

<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
  1. Enviar 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

Aprenda e pratique Hacking AWS:Treinamento HackTricks AWS Red Team Expert (ARTE) Aprenda e pratique Hacking GCP: Treinamento HackTricks GCP Red Team Expert (GRTE)

Suporte ao HackTricks

Last updated