Pular para o conteúdo
Todos os conceitos

SSRF cego (fora de banda)

Quando a resposta não volta para você, o sinal é a chamada chegar num host seu, ou uma diferença de tempo.

Às vezes o recurso busca a URL mas não te devolve o conteúdo: ele responde sempre a mesma coisa, como {"status":"queued"}. Você não vê corpo, status nem erro. Isso é SSRF cego. A falha existe (o servidor fez o pedido), mas o canal de resposta está fechado.

Sem resposta para ler, você precisa de um sinal fora de banda: algo que acontece em outro lugar e que você consegue observar. O jeito mais comum é fazer o servidor chamar um host que você controla (uma "canário"): se a chamada chega lá, você confirmou o SSRF e ainda vê o que o servidor manda nos pedidos de saída (às vezes um cabeçalho interno vaza junto). Outra pista é o tempo: se buscar uma porta aberta demora diferente de uma porta fechada, essa diferença revela o que existe na rede interna.

A defesa é a mesma das outras partes (validar o destino, bloquear faixas internas), com um cuidado extra: não vaze segredos nos pedidos de saída e não autentique serviços internos por cabeçalhos de pedido, que seguem para onde a URL mandar.

atacante validador URL = sua canário queued (sempre igual) busca + cabeçalho interno 192.0.2.50 sua canário sua canário registrou: X-Internal-Token = o segredo que vaza
O validador responde sempre queued, então o atacante o faz chamar sua canário 192.0.2.50; a chamada que chega lá é o sinal, e revela o cabeçalho interno.

Aparece nestes desafios