Redirecionamentos abertos: quando um link de confiança real leva ao atacante
Passamos o cursor sobre um link, vemos aparecer google.com ou o nome de um site que conhecemos bem, e clicamos sem desconfiar. No entanto, acabamos numa página de phishing. Não é um erro de exibição nem uma usurpação de endereço: o link realmente levava, no início, ao site verdadeiro. Esta é a mecânica de um redirecionamento aberto (open redirect).
O que é um redirecionamento aberto?
Muitos sites oferecem uma funcionalidade totalmente legítima: redirecionar um visitante para outro endereço após uma ação, por exemplo após um início de sessão, um clique num link patrocinado, ou um encurtador de links. O site recebe no seu URL o endereço de destino, e depois envia o navegador para esse endereço.
A falha surge quando o site aceita qualquer endereço de destino, sem verificar se faz parte de uma lista autorizada. Os programadores construíram um serviço de redirecionamento útil; simplesmente esqueceram-se de fechar a porta das traseiras. Qualquer pessoa pode então fabricar um link que começa pelo nome do site de confiança, mas que termina o seu percurso noutro lugar, junto do atacante.
Anatomia de um link armadilhado
Consideremos um exemplo de estrutura deliberadamente simplificado:
https://www.google.com/url?q=https://site-pirate.example
Este link abre-se de facto nos servidores da Google: o nome de domínio google.com é autêntico, e nada na barra de endereços mente a esse respeito. Mas o parâmetro ?q= transporta um segundo endereço, que se torna o destino real assim que o redirecionamento é ativado. Os mesmos mecanismos encontram-se com outros nomes de parâmetros igualmente comuns: ?dest=, ?redirect=, ?target=, ?next=, ou ainda ?url=. Detetar uma destas palavras-chave logo a seguir a um ponto de interrogação, seguida de um segundo endereço web, é o sinal mais simples a vigiar.
Porque é que os atacantes adoram esta técnica
Este método resolve dois problemas de uma vez para um atacante.
- Contornar os filtros antispam. As passarelas de segurança de mensagens (Secure Email Gateways) atribuem uma pontuação de confiança aos domínios presentes num e-mail. Um link que começa por um domínio extremamente reputado, como o de um motor de busca ou de uma grande rede social, obtém muitas vezes uma pontuação excelente, mesmo que o filtro nunca observe a parte oculta do link.
- Manipular a leitura humana. Uma pessoa precavida aprendeu a verificar o nome de domínio antes de clicar. Perante este tipo de link, essa verificação vira-se contra ela: vê claramente o nome da marca oficial logo no início do endereço, e para por aí, sem ler o resto.
O processo beneficia assim de uma confiança ao mesmo tempo técnica (a pontuação do filtro antispam) e humana (o reflexo de leitura), sem ter de imitar nem o domínio nem os servidores do site de confiança.
Por baixo do capô: códigos 301, 302, e redirecionamentos em cadeia
Tecnicamente, um redirecionamento resolve-se numa resposta muito curta do servidor ao navegador. O servidor responde com um código de estado HTTP, sem exibir qualquer página visível: 302 para um redirecionamento temporário, 301 para um permanente. O navegador obedece de imediato e carrega o endereço seguinte, sem que o utilizador veja o que quer que seja a passar-se.
Nada impede encadear vários redirecionamentos seguidos: um domínio A, muito reputado, para um domínio B, mais modesto e por sua vez vulnerável, para a página de phishing final. Cada elo adicional baralha um pouco mais a pista e complica o trabalho de quem quisesse remontar até à origem do link apenas ao olhar para ele.
Como detetar a armadilha e reagir
O método correto consiste em ler o endereço completo, da esquerda para a direita, sem parar no primeiro nome reconhecido. O sinal a procurar é simples: um segundo http:// ou https:// escondido mais à frente na mesma linha anuncia quase sempre um redirecionamento aberto, tal como a presença de um parâmetro do tipo ?q= ou ?url= mesmo antes. Esta vigilância junta-se à que é exigida para ler um nome de domínio enganador por outros meios, como letras parecidas: ver o guia Punycode e homógrafos.
Para verificar um destino sem correr qualquer risco, pode colar-se o endereço num resolvedor de links online, ou executar um comando curl -I a partir de um terminal: o servidor responde com o código de redirecionamento e o destino final, sem nunca carregar a página num navegador.
Duas notificações são úteis, e dizem respeito a dois intervenientes diferentes. Avisa-se primeiro a empresa cujo domínio serve de ponto de partida (por exemplo através do seu formulário de segurança ou do seu endereço dedicado a vulnerabilidades), para que corrija o parâmetro não verificado no seu código. Avisa-se depois o alojador da página de chegada, exatamente como para qualquer página de phishing (ver encontrar o endereço abuse@ certo junto de um alojador), uma vez que é ele quem pode fazê-la desaparecer.
Um e-mail que contenha este tipo de link continua a ser, por outro lado, um e-mail enviado por um servidor real, com o seu próprio rasto: ver o guia Analisar um phishing: da mensagem à infraestrutura. Ao colar o e-mail completo em Baitback, a ferramenta segue por si mesma toda a cadeia de redirecionamentos até à página final, sem ser necessário clicar ou abrir um terminal.
- Um redirecionamento aberto é uma funcionalidade legítima desviada: o site de partida é real, o destino não necessariamente.
- Os parâmetros a vigiar parecem-se com
?q=,?url=,?redirect=,?dest=,?target=ou?next=. - Esta técnica engana tanto os filtros antispam, graças à reputação do primeiro domínio, como a leitura humana, que muitas vezes para cedo demais.
- Os códigos 301 e 302 permitem encadear vários redirecionamentos invisíveis antes de se chegar à página armadilhada.
- É preciso ler o link na íntegra e notificar tanto o site de partida (para que corrija a falha) como o alojador da página final.