Glossário

O que é open redirect: uma falha que encaminha usuários da sua URL confiável para outro site

Open redirect faz uma URL do seu site levar a um site externo e ajuda golpes de phishing. Como funciona e a defesa: caminhos relativos e allowlist.

Publicado 2026-06-10 Atualizado 2026-10-06 8 min de leitura
Nesta página

Um open redirect é quando uma URL que começa com o seu domínio real leva os visitantes a um site completamente diferente. Veja como funciona e como evitá-lo de forma confiável (sem passos de ataque).

Por que é perigoso

O dano central é a confiança emprestada do seu domínio.

Como é abusadoO que acontece
Phishing pelo seu domínioO link começa com o domínio real → usuários e filtros confiam → vão para um site falso
Sequestro de fluxo de autenticaçãoAdulteração do destino de redirecionamento em fluxos do tipo OAuth para capturar um token/código
Amplificação de outras falhasCombinado com SSRF ou XSS para ampliar o impacto

Por que funciona

Aparece em recursos como "levar o usuário de volta para onde estava após o login", onde a URL de retorno é confiada e encaminhada como está. O "início" da URL que o usuário vê é o domínio real, então é difícil desconfiar dela do começo ao fim.

dominioreal/login?next= (o início é confiável)
uma URL externa é plantada em next=
↓ o site encaminha sem validar o destino
o usuário cai em um site falso achando que clicou no real = phishing
O início é o domínio real, então há confiança. Encaminhe uma URL externa não verificada vinda do parâmetro e atacantes podem usá-la para phishing.

Defesa: não aceite URLs externas

1

Permita apenas caminhos relativos (o mais importante)

Aceite destinos de retorno como /dashboard — apenas caminhos relativos — e rejeite URLs completas (que começam com http:// ou //). Não dê espaço para o usuário especificar um domínio de destino.

2

Compare com uma allowlist

Se você precisar de destinos dinâmicos, permita apenas entradas de um conjunto fixo de destinos conhecidos (um mapa). Qualquer outra coisa recai em uma página padrão.

3

Não confie em verificações de string

//evil, barras invertidas, @ e codificação múltipla contornam filtros ingênuos. Mude o que você aceita (relativo + allowlist) em vez de remendar filtros.

4

Se precisar sair do site, deixe explícito

Quando redirecionamentos externos forem intencionais, exiba uma página intermediária ("Você está saindo para um site externo"). Não encaminhe silenciosamente.

A visão deste site: classificado como 'baixo' sozinho, mas grave quando combinado com phishing

Open redirects costumam ser classificados como baixo risco por si só, mas como atacantes podem tomar emprestada a confiança do seu domínio, tornam-se graves combinados com phishing ou sequestro de autenticação. Por isso uma correção em nível de projeto (caminhos relativos + allowlist) remove a causa com eficiência. Espelha o SSRF (fazer o servidor se conectar a qualquer lugar): ambos compartilham o princípio de defesa de nunca deixar o usuário decidir o destino.

Open redirect vs. SSRF vs. phishing

Um open redirect é menos um ataque em si e mais uma falha que torna outros ataques mais convincentes. Colocá-lo ao lado de termos relacionados mostra onde ele se encaixa.

TermoO que aconteceQuem corrige
Open redirectUma URL do site verdadeiro encaminha o navegador do usuário para um site externoDesenvolvedores do site com o recurso de redirecionamento
SSRFNão o navegador, mas o servidor envia uma requisição ao destino que recebeuDesenvolvedores do site com o recurso de buscar URLs
PhishingUm site falso leva pessoas a digitar IDs, senhas ou dados de cartãoUsuários, quem recebe os e-mails e a organização imitada

Quando um link de phishing pode usar um domínio verdadeiro, tanto usuários quanto filtros de e-mail têm mais dificuldade de perceber. Remover open redirects impede que o seu domínio seja usado em golpes.

Exemplo: onde mais importa, as integrações de login (OAuth)

Open redirects importam mais em integrações de login (OAuth). Após a autorização, o usuário é enviado de volta à URI de redirecionamento registrada levando um código de autorização ou token. Se o site para onde ele volta tiver um open redirect, o código ou token pode ser repassado a um site externo.

Por isso as boas práticas de segurança do OAuth 2.0 (RFC 9700, janeiro de 2025) exigem duas coisas.

  • O servidor de autorização compara as URIs de redirecionamento com as pré-registradas por correspondência exata
  • Nem clientes nem servidores de autorização expõem páginas que encaminhem para uma URL arbitrária vinda de um parâmetro da query

Open redirects são classificados como CWE-601. Sozinhos raramente recebem gravidade alta, mas ao lado de uma integração de login tornam-se um problema sério.

Qual a gravidade

Sozinho, um open redirect costuma ser classificado como médio. Uma classificação comum é CVSS 3.1 6.1.

  • O usuário precisa abrir o link (UI:R)
  • O impacto é mandar usuários para outro site; não permite ler diretamente os dados do site
  • Como o impacto vai além do site que redireciona, ele é pontuado como mudança de escopo (S:C)

Não adie por causa do número. Corrija primeiro se ele estiver no caminho de retorno de uma integração de login ou se já estiver sendo usado em phishing. Para pontuar o seu próprio caso, use a calculadora de CVSS.

Helpers seguros que o seu framework já tem

Os recursos do framework deixam passar menos casos do que as suas próprias verificações de string. Dois exemplos comuns:

FrameworkHelperO que faz
Ruby on RailsComportamento padrão do redirect_to e url_fromPor padrão bloqueia redirecionamentos para outros hosts; mandar usuários para fora do site exige um allow_other_host: true explícito. url_from devolve a URL só se ela estiver no mesmo host; caso contrário, nil
ASP.NET CoreLocalRedirect e Url.IsLocalUrlRedireciona apenas para URLs dentro do mesmo site e lança uma exceção para uma URL externa

A documentação do Rails alerta que, mesmo com allow_other_host: true, repassar direto um parâmetro fornecido pelo usuário não é seguro. Ao criar um recurso de redirecionamento para fora do site, evite essa combinação.

Como verificar o seu próprio site

1

Encontre parâmetros que recebem um destino

Procure no seu código e na sua lista de URLs parâmetros com nomes como next, url, redirect, return_to, continue ou callback, e verifique se eles são passados direto para um redirecionamento.

2

Verifique como os destinos são validados

Veja se a validação depende de comparação de prefixo da string ou de "começa com http". Em vez disso, separe a URL em esquema, host e porta com um parser de URL e compare com uma allowlist, ou use os helpers seguros do framework (como o LocalRedirect do ASP.NET Core).

3

Revise os registros da sua integração de login

Nas configurações de OAuth ou SSO, confira se as URIs de redirecionamento registradas não têm curingas nem URLs antigas de que você não precisa mais.

4

Considere escolher destinos por ID

Se precisar redirecionar para fora, aceite um ID curto em vez da própria URL e procure o destino numa tabela no servidor. A OWASP recomenda essa abordagem.

5

Procure redirecionamentos para fora nos logs de acesso

Pesquise nos logs de acesso requisições em que um parâmetro de destino contém um nome de host diferente do seu. Se encontrar, verifique se esse redirecionamento realmente manda pessoas para fora do site e trate isso como sinal de que alguém pode estar circulando esses links.

Fontes (primárias)

  • OWASP, "Unvalidated Redirects and Forwards Cheat Sheet" — cheatsheetseries.owasp.org (em inglês; IDs mapeados no servidor, allowlist sobre URLs já analisadas, páginas de aviso)
  • IETF RFC 9700, "Best Current Practice for OAuth 2.0 Security" (janeiro de 2025) — datatracker.ietf.org (em inglês; correspondência exata de URIs de redirecionamento, sem open redirectors)
  • Ruby on Rails API, "ActionController::Redirecting" — api.rubyonrails.org (em inglês; proteção padrão contra redirecionamentos para outros hosts, allow_other_host, url_from)
  • Microsoft, "Prevent open redirect attacks in ASP.NET Core" — learn.microsoft.com (em inglês; LocalRedirect, IsLocalUrl, registro de URLs não locais)
  • MITRE, "CWE-601: URL Redirection to Untrusted Site ('Open Redirect')" — cwe.mitre.org (em inglês)

Leia a seguir

Classificação

O CWE classifica os tipos de fraqueza por trás das vulnerabilidades; o MITRE ATT&CK classifica as técnicas dos atacantes. Ambos são mantidos pela MITRE e amplamente usados para rotular vulnerabilidades e regras de detecção.

CWE™: Copyright © 2006–2026, The MITRE Corporation. CWE is a trademark of The MITRE Corporation. The MITRE Corporation hereby grants you a non-exclusive, royalty-free license to use CWE for research, development, and commercial purposes. Any copy you make for such purposes is authorized on the condition that you reproduce MITRE’s copyright designation and this license in any such copy. CWE Terms of Use

FAQ

QPor que um open redirect é um problema?
A

O primeiro domínio da URL é o seu domínio real e confiável (por exemplo, uma página de login), então usuários e filtros de e-mail clicam nele com confiança. Mas o site os encaminha para qualquer site externo, então seu domínio real pode ser usado para fazer links de phishing parecerem legítimos e para roubar tokens em fluxos de autenticação.

QQual é a principal defesa?
A

Não aceite URLs externas como destino de redirecionamento. Para caminhos de retorno após o login, permita apenas caminhos relativos (/dashboard) e compare com uma allowlist (um conjunto fixo de destinos conhecidos). Se você realmente precisar enviar usuários para fora do site, exiba uma página intermediária avisando que estão saindo.

QVerificar por http:// é suficiente?
A

Não. Formas sem esquema (//evil.example), barras invertidas, codificação e URLs confusas com @ contornam verificações ingênuas. Em vez de julgar a string, projete o sistema para nunca aceitar uma URL externa (caminhos relativos + allowlist).

QO que é um open redirect, em termos simples?
A

Você abre um link de um site, e esse site te encaminha direto para qualquer outro site escrito na URL. Acontece porque a parte que decide o destino (como ?next=) pode ser alterada livremente de fora.

QComo configurar as URIs de redirecionamento em integrações OAuth e de login?
A

Compare a URI de redirecionamento (para onde o usuário volta após a autorização) com valores pré-registrados por correspondência exata. As boas práticas de segurança do OAuth 2.0 (RFC 9700, janeiro de 2025) exigem comparação exata de strings e dizem que clientes e servidores de autorização não devem expor páginas que encaminhem o navegador para URLs arbitrárias (open redirectors). Evite registros com curingas ou por prefixo.

QComo usuário, como posso perceber?
A

Olhe a barra de endereços depois que a página abrir, e não o domínio no início do link. Quando pedirem senha ou dados de cartão, confira se o domínio na barra de endereços é o verdadeiro antes de digitar. Na dúvida, abra o site por um favorito ou pelo app oficial em vez do link do e-mail.

QQual a gravidade de um open redirect? Que nota CVSS ele recebe?
A

Sozinho, costuma ser classificado como médio, porque o usuário precisa abrir o link e o impacto se limita a mandá-lo para outro site. Uma classificação comum é CVSS 3.1 6.1 (AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N). Mas, se estiver no caminho de retorno de uma integração de login (OAuth), pode vazar códigos ou tokens, e o impacto real é bem maior.

QQual a diferença entre redirect e forward?
A

Um redirect é quando o servidor manda o navegador ir para outra URL e o próprio navegador a abre. Um forward é quando o servidor repassa a requisição internamente para outro handler, e a URL do navegador não muda. A OWASP cobre os dois: nos redirects o problema é mandar usuários para sites externos; nos forwards é passar pelas verificações de controle de acesso e chegar a funções administrativas que não deveriam ser alcançáveis.

QUma avaliação de segurança apontou um open redirect. O que faço primeiro?
A

Não bloqueie só o parâmetro que foi apontado. Liste todos os lugares que recebem um destino da mesma forma. Depois escreva uma função compartilhada que aceite apenas caminhos relativos e faça todo redirecionamento passar por ela. Use uma allowlist ou uma página de confirmação só onde um redirecionamento externo for realmente necessário.