Pular para o conteúdo
Todos os conceitos

Serviços internos e localhost

Muitos serviços confiam em quem está na rede interna ou no localhost; o SSRF põe o servidor lá por você.

Numa rede típica, um serviço "só para dentro" costuma ficar sem senha, "porque só quem está na rede alcança". Exemplos: uma página de status em http://127.0.0.1:9000/, um banco de dados em 10.0.0.5, um painel de administração em 192.168.1.10. A fronteira é a própria rede: de fora, você nem chega a bater na porta.

O localhost (127.0.0.1) é o caso mais confundido. Ele não é um lugar fixo: é "esta mesma máquina". Quando o servidor busca http://127.0.0.1:9000/ para você, o 127.0.0.1 é o localhost DELE, não o seu. O mesmo vale para as faixas privadas, que só existem dentro da rede: 10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, e a link-local 169.254.0.0/16.

Por isso o SSRF é grave: ele transforma "só quem está dentro alcança" em "qualquer um que mande uma URL alcança". O conserto, no código que busca a URL, é resolver o host e rejeitar qualquer IP dessas faixas internas.

atacante rede interna URL (recurso público) sem rota direta de fora servidor que busca 127.0.0.1:9000 10.0.0.5 192.168.1.10 o servidor alcança
De fora, o atacante não alcança os serviços internos; com SSRF, o servidor (que está dentro) busca 127.0.0.1 e as faixas privadas por ele.

Aparece nestes desafios