Início‎ > ‎

Não utilizar "open redirect"

Algumas aplicações utilizam URLs recebidas como parâmetros para redirecionar os usuários para outras páginas. Esta funcionalidade é muitas vezes usada como controle de fluxo em aplicações web ou para estabelecer uma contagem do número de usuários que o site enviou para seus parceiros (ou clientes, no caso de propagandas). Um exemplo seria:

http://somesite.tld/page.aspx?name=value&returnUrl=http://somesite.tld/referringpage.aspx

Esta URL inclui uma outra URL como parâmetro, que poderia ser usado como alvo de um redirecionamento. A aplicação poderia conter o trecho de código abaixo:

Response.Redirect(returnUrl);

O resultado final é que o usuário é redirecionado para a página indicada na requisição.

Este tipo de redirecionamento é chamado de open redirect se não há restrição quanto às URLs que podem ser utilizadas como parâmetro. Quando isto acontece, a aplicação fica vulnerável a ataques que visem enganar o usuário pelo redirecionamento a páginas falsas. Open redirects são muito utilizados para ataques de phishing, já que a URL falsa fica mascarada. Por exemplo, a URL abaixo poderia ser usada para enganar os usuários e redirecioná-los a um site malévolo (evil.tld):

http://somesite.tld/page.aspx?name=value&returnUrl=http://evil.tld/installMalware.bad

Neste caso a funcionalidade de redirecionamento é utilizada para mascarar um ataque, facilitando a vida de administradores de botnets, spammers e phishers.

A solução para este problema é uma variação do item Validar os dados de entrada: validar e filtrar as URLs a serem utilizadas em redirecionamentos. Esta validação poderia ser feita pela implementação dos seguintes passos:
  1. Verificar que o protocolo é válido. Em geral, o protocolo deve ser http:// ou https://, mas outros como ftp:// também poder ser necessários.
  2. verificar o domínio alvo do redirecionamento. Em geral, o alvo deve ser o próprio domínio da aplicação, mas pode ser necessário utilizar uma lista de domínios válidos.
Outra solução é utilização de APIs específicas, como a ESAPI do OWASP. Esta API inclui a função DefaultHTTPUtilities.safeSendForward(), que faz o redirect apenas para páginas internas da aplicação, evitando que a funcionalidade seja atacada de forma a redirecionar para páginas externas.

Fonte

WEBER, Chris. Open Redirects - What's the problem. Lookout blog, feb 2008: http://lookout.net/2008/02/27/open-redirects-why-are-they-a-bad-thing/
Comments