Resumen
Tras iniciar sesión en lovable.dev, la aplicación lanza una petición a /auth/post-login con un parámetro redirect que indica adónde devolver al usuario. El valor normal es una ruta interna:
https://lovable.dev/auth/post-login?redirect=%2F%3Fshould-refresh-credentials%3D1&_rsc=1b5jt
La aplicación espera una ruta relativa, pero no lo garantiza. Si el valor empieza por una barra seguida de una barra invertida, la redirección termina fuera del sitio:
- https://lovable.dev/auth/post-login?redirect=%2F%3Fshould-refresh-credentials%3D1&_rsc=1b5jt
+ https://lovable.dev/auth/post-login?redirect=/\google.com
Con ese cambio, el usuario acaba en https://google.com, aunque el enlace que ha abierto pertenece a lovable.dev.
El investigador señala que el mismo fallo existe en una segunda ruta, /purchase-success, aquí con la barra invertida codificada como %5C:
https://lovable.dev/purchase-success?redirect=/%5Cgoogle.com
El programa marcó el reporte como resuelto. Se envió el 2 de marzo de 2026 y se divulgó el 5 de marzo de 2026.
Pasos de reproducción
- Inicia sesión con una cuenta.
- Visita esta dirección:
https://lovable.dev/auth/post-login?redirect=/\google.com
- El navegador te redirige a google.com.
Impacto
Un atacante puede fabricar enlaces en el dominio lovable.dev que redirigen al sitio externo que elija. Ese aspecto legítimo los hace útiles en campañas de phishing y otros ataques de ingeniería social.
Qué aprender de este caso
- Al probar un parámetro de redirección que solo admite rutas relativas, no te quedes en
https://o//: prueba también/\dominio.com, en crudo y codificado como/%5Cdominio.com. Aquí ese prefijo bastó para salir a un dominio externo. - Si encuentras un open redirect, revisa otras páginas que reciban el mismo parámetro. En este caso,
redirectaparecía tanto en/auth/post-logincomo en/purchase-success. - Para evitarlo, no compruebes solo que el valor empieza por
/. Interpreta la URL igual que lo haría el navegador, con la barra invertida incluida, y confirma que el origen resultante sigue siendo el propio sitio antes de redirigir. Si los destinos posibles son pocos, mejor aún una lista cerrada en lugar de aceptar una ruta libre.