Pular para o conteúdo
Todos os conceitos

Metadados de nuvem

Instâncias de nuvem perguntam sobre si mesmas num endereço link-local fixo que, sem autenticação, pode guardar credenciais.

Servidores em nuvem precisam descobrir coisas sobre si mesmos (seu id, sua região, suas credenciais temporárias) sem ter nada configurado de antemão. A solução comum é um serviço de metadados num endereço link-local fixo, 169.254.169.254, que só responde para código rodando DENTRO da instância. Por isso ele costuma responder sem senha: "só a própria instância alcança".

A árvore é só HTTP. O código de dentro faz, por exemplo, GET http://169.254.169.254/<caminho>/ e caminha pelos índices até o dado que quer. Entre esses dados costumam estar credenciais temporárias da função da instância, que valem para falar com a nuvem como a aplicação.

Junte isso com um SSRF: se o atacante faz o servidor buscar 169.254.169.254, o pedido parte de DENTRO da instância, e os metadados respondem, credenciais inclusive. Por isso a defesa bloqueia 169.254.0.0/16 por padrão e, nas nuvens reais, usa a versão do serviço que exige um token (como o IMDSv2).

atacante URL = o IP de metadados instância NimbusToy serviço de prévia 169.254.169.254 /meta/v1/identity/ credentials GET metadados credenciais O SSRF lê os metadados de dentro da instância e leva as credenciais ao atacante.
O código legítimo de dentro da instância lê os metadados em 169.254.169.254; um SSRF faz o servidor ler o mesmo endereço e devolver as credenciais.

Aparece nestes desafios