O que são ataques de redirecionamento arbitrário de URL?
O redirecionamento ou encaminhamento é uma funcionalidade da aplicação em que o aplicativo de origem redireciona o acesso do usuário para outro localidade ou para alguma função dentro da própria aplicação. Um caso típico de utilização é o processo de autenticação: uma vez que o usuário tente acessar uma área restrita do aplicativo, ele automaticamente redireciona o cliente para o formulário de autenticação.
Em casos específicos, esta funcionalidade pode ser utilizada por um atacante para redirecionar um cliente legítimo para uma localidade arbitrária, transferindo, por exemplo, a confiança estabelecida pelo usuário do aplicativo legítimo para um sítio que contenha material malicioso.
O redirecionamento não representa uma vulnerabilidade de segurança direta, entretanto, ela pode ser explorada em ataques de phishing (engenharia social) fazendo o usuário acreditar que está em uma área de conteúdo legítimo e fornecendo credenciais ou dados sensíveis de maneira arbitrária. O ataque também pode ser utilizado de maneira extensiva para inflacionar sistemas de publicidade e remuneração por click.
Exemplo:
Um site vulnerável está encaminhando o usuário para uma localidade confiável (área de login):
http://www.vulneravel.com?redirect=http://www.vulneravel.com/login
Por não filtrar corretamente o tipo de parâmetro utilizado na variável redirect, o aplicativo permite que um atacante construa um link para redirecionar o cliente legítimo para um sítio não confiável:
http://www.vulneravel.com?redirect=http://hacker.com/login
De posse deste link, o atacante só precisa convencer o usuário legítimo a carregá-lo em seu navegador ou, até mesmo, empregar técnicas de otimização para motores de busca (SEO) para que este link fique disponível caso um usuário faça uma busca pelo o sítio legítimo.
A partir desta chamada, o atacante pode empregar o mesmo estilo em um formulário falso para capturar as credenciais de acesso do usuário vítima e, então, redirecioná-lo novamente para o aplicativo legítimo.
Meu aplicativo está vulnerável ao ataque de URL Redirect/Forward ?
Por meio do exemplo acima, inferimos que a melhor forma de se descobrir se o seu aplicativo está vulnerável a este problema é testar todos os redirecionamentos existentes na interação com o usuário.
Navegue por toda a aplicação para verificar quais são as páginas que retornam códigos de redirecionamento (geralmente código de retorno 301 e 302) e teste a possibilidade de substituir parâmetros válidos por localizações externas e não relacionados ao seu aplicativo.
Para corrigir este problema, é sugerido que o seu aplicativo mantenha, se possível, uma lista das localidades permitidas e faça referência a elas por meio de códigos, evitando expor de maneira explícita a URL. Uma outra forma de tratar o problema é empregar criptografia ou hashing nos parâmetros de redirecionamento enviados, assegurando que o destino só poderia ser construído por meio de uma transação legítima dentro do sistema.
Qual o impacto e as principais consequências do ataque?
Os redirecionamentos arbitrários podem explorar essa vulnerabilidade para convencer o usuário a instalar malware ou programas que capturem senhas e outras informações confidenciais. Em situações específicas, podem ser utilizados também para pular controles de acesso.
Cenários:
- A aplicação possue uma página chamada ‘redir.jsp’ que tem um parâmetro chamado ‘url’. O atacante usa uma URL maliciosa que redireciona os usuários para um site malicioso (utilizando phishing) e que pode instalar um malware (instala.exe).
http://www.exemplo.com/redir.jsp?url=atacante.com/instala.exe
- Nesse outro exemplo, a aplicação usa um parâmetro para indicar para onde o usuário deve ser direcionado se uma transação for bem sucedida. O atacante pode modificar o tipo de localização para obter acessos a áreas restritas. Ex:
De: http://www.exemplo.com/correct.jsp?fwd=success.jsp
Para: http://www.exemplo.com/correct.jsp?fwd=admin.jsp
- Os atacantes também pode melhorar o ataque de engenharia social ofuscando a URL redirecionada através de várias técnicas. Por exemplo, o URL abaixo mostra a mesma URL redirecionada, mas o ‘evil.com’ domínio foi convertido em seu equivalente hexadecimal.
http://www.exemplo.com/redir.jsp?url=http://%76%69%6c%2e%63%6f%6d/evil_page.html
Correção de códigos vulneráveis
Evitar as falhas de redirecionamento arbitrário é um ponto chave na gestão de vulnerabilidades e riscos de quaisquer aplicativos web, afinal, eles são um dos alvos prediletos dos fraudadores para ataques de engenharia social. As principais recomendações para mitigar os riscos são:
- Tente evitar o uso de redirecionamentos e, se não for possivel, fazer por meio de variáveis de sessão sem a utilização de parâmetros HTTP;
- Não informe a URL real no parâmetro, opte por um valor de referência que será traduzido do lado do servidor para a URL alvo;
- Caso não seja possível utilizar as medidas anteriores, opte por utilizar criptografia ou hashing para os parâmetros de transporte do valor da URL.
OWASP Top 10 (A10)
O ataque de redirecionamento arbitrário de URL (Unvalidated Redirects and Forwards) é parte integrante da lista das 10 principais vulnerabilidades que afetam aplicativos web do OWASP. Para saber mais, veja a referência abaixo:
Como a Rede Segura pode te ajudar?
A RedeSegura possui uma solução completa para gestão de vulnerabilidades em aplicativos web, seja qual for o seu tipo de indústria e tamanho do seu aplicativo. Saiba mais detalhes sobre nossa metodologia:
Contate-nos ainda hoje para obter mais detalhes da nossa solução e como podemos ajudá-lo na missão de manter seus aplicativos web seguros.