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)
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:
Monitore as solicitações para o servidor de Metadados usando tcpdump:
Procure por uma linha semelhante a:
Enviar 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.
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)
Last updated