Glosario

Qué es la redirección abierta (open redirect): un fallo que reenvía a los usuarios desde tu URL de confianza a otro sitio

Una redirección abierta permite que una URL de tu sitio reenvíe a cualquier sitio externo, útil para el phishing. Cómo funciona y cómo evitarla.

Publicado 2026-06-10 Actualizado 2026-10-06 9 min de lectura
En esta página

Una redirección abierta es cuando una URL que empieza con tu dominio real envía a los visitantes a un sitio completamente distinto. Aquí tienes cómo funciona y cómo prevenirla de forma fiable (sin pasos de ataque).

Por qué es peligrosa

El daño central es la confianza prestada de tu dominio.

Cómo se abusaQué ocurre
Phishing a través de tu dominioEl enlace empieza con el dominio real → los usuarios y los filtros confían → fuera, a un sitio falso
Secuestro del flujo de autenticaciónManipular el destino de redirección en flujos tipo OAuth para capturar un token o código
Amplificación de otros fallosCombinada con SSRF o XSS para ampliar el impacto

Por qué funciona

Aparece en funciones como «devolver al usuario a donde estaba tras iniciar sesión», donde la URL de retorno es de confianza y se reenvía tal cual. El «comienzo» de la URL que ve el usuario es el dominio real, por lo que cuesta dudar hasta el final.

dominioreal/login?next= (el comienzo es de confianza)
se planta una URL externa en next=
↓ el sitio reenvía sin validar el destino
el usuario aterriza en un sitio falso creyendo que hizo clic en el real = phishing
El comienzo es el dominio real, por eso se confía. Reenvía una URL externa sin comprobar desde el parámetro y los atacantes pueden usarla para phishing.

Defensa: no aceptes URLs externas

1

Permite solo rutas relativas (lo más importante)

Acepta destinos de retorno como /dashboard —solo rutas relativas— y rechaza URLs completas (que empiecen por http:// o //). No dejes margen para que el usuario especifique un dominio de destino.

2

Compara con una lista de permitidos

Si necesitas destinos dinámicos, permite solo entradas de un conjunto fijo de destinos conocidos (un mapa). Cualquier otra cosa cae en una página predeterminada.

3

No dependas de comprobaciones de cadenas

//evil, las barras invertidas, @ y la multicodificación eluden los filtros ingenuos. Cambia lo que aceptas (relativas + lista de permitidos) en lugar de parchear filtros.

4

Si debes salir del sitio, hazlo explícito

Cuando las redirecciones externas sean intencionadas, muestra una página intermedia («Estás saliendo hacia un sitio externo»). No reenvíes en silencio.

La visión de este sitio: calificada como 'baja' por sí sola, pero grave combinada con phishing

Las redirecciones abiertas suelen calificarse como bajas por sí mismas, pero como los atacantes pueden aprovechar la confianza en tu dominio, se vuelven graves combinadas con phishing o secuestro de autenticación. Por eso una corrección a nivel de diseño (rutas relativas + lista de permitidos) elimina la causa de forma eficiente. Refleja el caso de SSRF (hacer que el servidor se conecte a cualquier sitio): ambos comparten el principio de defensa de no dejar nunca que el usuario decida el destino.

Redirección abierta frente a SSRF y phishing

Una redirección abierta es menos un ataque en sí que un fallo que hace más convincentes otros ataques. Ponerla junto a términos relacionados muestra dónde encaja.

TérminoQué ocurreQuién lo corrige
Redirección abiertaUna URL del sitio real reenvía el navegador del usuario a un sitio externoLos desarrolladores del sitio con la función de redirección
SSRFNo es el navegador sino el servidor quien envía una petición al destino indicadoLos desarrolladores del sitio con la función que obtiene URLs
PhishingUn sitio falso consigue que la gente introduzca usuarios, contraseñas o datos de tarjetaLos usuarios, los receptores de correo y la organización suplantada

Cuando un enlace de phishing puede usar un dominio real, tanto a los usuarios como a los filtros de correo les cuesta más detectarlo. Eliminar las redirecciones abiertas evita que tu dominio se use en estafas.

Ejemplo: donde más importa, las integraciones de inicio de sesión (OAuth)

Las redirecciones abiertas importan sobre todo en las integraciones de inicio de sesión (OAuth). Tras la autorización, el usuario vuelve a la URI de redirección registrada llevando un código de autorización o un token. Si el sitio al que vuelve tiene una redirección abierta, el código o el token puede acabar enviado a un sitio externo.

Por eso la OAuth 2.0 Security Best Current Practice (RFC 9700, enero de 2025) exige dos cosas.

  • El servidor de autorización compara las URI de redirección con las registradas de antemano mediante coincidencia exacta
  • Ni los clientes ni los servidores de autorización exponen páginas que reenvíen a una URL arbitraria tomada de un parámetro de consulta

Las redirecciones abiertas se clasifican como CWE-601. Por sí solas rara vez se califican de gravedad alta, pero junto a una integración de inicio de sesión se convierten en un problema serio.

Qué gravedad tiene

Por sí sola, una redirección abierta suele calificarse como media. Una calificación que se ve a menudo es CVSS 3.1 6.1.

  • El usuario tiene que abrir el enlace (UI:R)
  • El impacto es enviar a los usuarios a otro sitio; no permite a nadie leer directamente los datos del sitio
  • Como el impacto va más allá del sitio que redirige, se puntúa como cambio de alcance (S:C)

No lo aplaces por el número. Corrígela primero si está en la ruta de retorno de una integración de inicio de sesión, o si ya se está usando en phishing. Para puntuar tu propio caso, usa la calculadora CVSS.

Funciones seguras que tu framework ya tiene

Las funciones del framework tienen menos probabilidad de dejarse un caso que tus propias comprobaciones de cadenas. Dos ejemplos habituales:

FrameworkFunciónQué hace
Ruby on RailsComportamiento por defecto de redirect_to y url_fromPor defecto bloquea las redirecciones a otros hosts; enviar a los usuarios fuera del sitio requiere un allow_other_host: true explícito. url_from devuelve la URL solo si está en el mismo host; si no, nil
ASP.NET CoreLocalRedirect y Url.IsLocalUrlRedirige solo a URLs del mismo sitio, y lanza una excepción con una URL externa

La documentación de Rails advierte de que, incluso con allow_other_host: true, pasar directamente un parámetro proporcionado por el usuario no es seguro. Al añadir una función de redirección externa, evita esa combinación.

Cómo revisar tu propio sitio

1

Localiza los parámetros que reciben un destino

Busca en tu código y en tu lista de URLs parámetros con nombres como next, url, redirect, return_to, continue o callback, y comprueba si se pasan tal cual a una redirección.

2

Revisa cómo se validan los destinos

Mira si la validación se basa en comparar el prefijo de la cadena o en «¿empieza por http?». En su lugar, separa la URL en esquema, host y puerto con un analizador de URLs y compárala con una lista de permitidos, o usa las funciones seguras del framework (como LocalRedirect en ASP.NET Core).

3

Revisa los registros de tus integraciones de inicio de sesión

En la configuración de OAuth o SSO, comprueba que las URI de redirección registradas no tienen comodines ni URLs antiguas que ya no necesitas.

4

Plantéate elegir el destino por ID

Si tienes que redirigir fuera del sitio, acepta un ID corto en lugar de la propia URL y busca el destino en una tabla del lado del servidor. OWASP recomienda este enfoque.

5

Busca redirecciones externas en tus registros de acceso

Busca en tus registros de acceso peticiones en las que un parámetro de destino contenga un nombre de host distinto del tuyo. Si encuentras alguna, comprueba si esa redirección envía de verdad a la gente fuera del sitio, y tómalo como señal de que alguien puede estar difundiendo esos enlaces.

Fuentes (primarias)

  • OWASP, «Unvalidated Redirects and Forwards Cheat Sheet» — cheatsheetseries.owasp.org (en inglés; IDs asignados en el servidor, comprobación de URLs analizadas contra una lista de permitidos, páginas de aviso)
  • IETF RFC 9700, «Best Current Practice for OAuth 2.0 Security» (enero de 2025) — datatracker.ietf.org (en inglés; coincidencia exacta de URI de redirección, sin redirectores abiertos)
  • Ruby on Rails API, «ActionController::Redirecting» — api.rubyonrails.org (en inglés; protección por defecto contra redirecciones a otros hosts, allow_other_host, url_from)
  • Microsoft, «Prevent open redirect attacks in ASP.NET Core» — learn.microsoft.com (en inglés; LocalRedirect, IsLocalUrl, registro de URLs no locales)
  • MITRE, «CWE-601: URL Redirection to Untrusted Site ('Open Redirect')» — cwe.mitre.org (en inglés)

Sigue leyendo

Clasificación

CWE clasifica los tipos de debilidad que causan las vulnerabilidades; MITRE ATT&CK clasifica las técnicas de los atacantes. Ambos los mantiene MITRE y se usan ampliamente para etiquetar vulnerabilidades y reglas de detección.

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

Q¿Por qué es un problema una redirección abierta?
A

El primer dominio de la URL es el tuyo, el real y de confianza (por ejemplo, una página de inicio de sesión), por lo que los usuarios y los filtros de correo hacen clic con confianza. Pero el sitio los reenvía a cualquier sitio externo, así que tu dominio real puede usarse para que los enlaces de phishing parezcan legítimos y para robar tokens en los flujos de autenticación.

Q¿Cuál es la mejor defensa?
A

No aceptes URLs externas como destino de redirección. Para las rutas de retorno tras el inicio de sesión, permite solo rutas relativas (/dashboard) y compáralas con una lista de permitidos (un conjunto fijo de destinos conocidos). Si realmente debes enviar a los usuarios fuera del sitio, muestra una página intermedia que les avise de que están saliendo.

Q¿Basta con comprobar si hay http://?
A

No. Las formas sin esquema (//evil.example), las barras invertidas, la codificación y las URLs confusas basadas en @ eluden todas las comprobaciones ingenuas. En lugar de juzgar la cadena, diseña el sistema para no aceptar nunca una URL externa (rutas relativas + lista de permitidos).

Q¿Qué es una redirección abierta, explicado de forma sencilla?
A

Abres un enlace a un sitio y ese sitio te reenvía directamente a cualquier otro sitio que esté escrito en la URL. Ocurre porque la parte que decide el destino (como ?next=) se puede cambiar libremente desde fuera.

Q¿Cómo deben configurarse las URI de redirección en OAuth y en las integraciones de inicio de sesión?
A

Compara la URI de redirección (adonde vuelve el usuario tras la autorización) con los valores registrados de antemano mediante coincidencia exacta. La OAuth 2.0 Security Best Current Practice (RFC 9700, enero de 2025) exige la comparación exacta de cadenas y establece que ni los clientes ni los servidores de autorización deben exponer páginas que reenvíen el navegador a URLs arbitrarias (redirectores abiertos). Evita los registros con comodines o por prefijo.

QComo usuario, ¿cómo puedo detectarlo?
A

Mira la barra de direcciones después de que se abra la página, no el dominio con el que empieza el enlace. Cuando te pidan una contraseña o datos de tarjeta, comprueba que el dominio de la barra de direcciones es el real antes de escribir. Si tienes dudas, abre el sitio desde un marcador o la app oficial en lugar del enlace del correo.

Q¿Qué gravedad tiene una redirección abierta? ¿Qué puntuación CVSS recibe?
A

Por sí sola suele calificarse como media, porque el usuario tiene que abrir el enlace y el impacto se limita a enviarlo a otro sitio. Una calificación que se ve a menudo es CVSS 3.1 6.1 (AV:N/AC:L/PR:N/UI:R/S:C/C:L/I:L/A:N). Pero si está en la ruta de retorno de una integración de inicio de sesión (OAuth), puede filtrar códigos o tokens, y el impacto real es mucho mayor.

Q¿Qué diferencia hay entre una redirección (redirect) y un reenvío interno (forward)?
A

Una redirección es cuando el servidor le dice al navegador que vaya a otra URL y el navegador la abre por su cuenta. Un forward es cuando el servidor pasa la petición internamente a otro manejador, y la URL del navegador no cambia. OWASP trata ambos: con las redirecciones el problema es enviar a los usuarios a sitios externos; con los forwards es saltarse las comprobaciones de control de acceso y llegar a funciones de administración que no deberían ser accesibles.

QUna evaluación de seguridad ha detectado una redirección abierta. ¿Qué hago primero?
A

No bloquees solo el parámetro señalado. Haz la lista de todos los sitios que reciben un destino de la misma forma. Después escribe una función común que acepte solo rutas relativas y haz pasar todas las redirecciones por ella. Usa una lista de permitidos o una página de confirmación solo donde de verdad haga falta una redirección externa.