BBLABSBBLABS
LaboratoriosAprender desde 0FuncionesPreciosTestimoniosDetrás de BBLABS
  1. Home
  2. Labs
  3. Open Redirect Playground
Easy15 min

Open Redirect Playground

By @gorka

Un SaaS ficticio (Lumen Workspace) cuyo endpoint de cierre de sesión acepta un destino arbitrario en `redirect_url`. El servidor hace `res.redirect(302, …)` con el valor tal cual, sin validar same-origin, esquema ni host.

This hack was reported with no reward

1.2K views56 completedUpdated Nov 2026
Log in to start

Learn to find this bug

A real YesWeHack hack, reproduced for you to practice.

Create your account and practice real bugs that got paid. Download the environment, find it and learn the exact technique — your path to your first bounty.

650

hunters training

50

labs from real hacks

380

completions

$12,000

paid out for these bugs

40 flags captured this week
Create account
I already have an account

Access to all labs · no commitment · cancel anytime

Hackers who solved it· 8

JM1
@overtone11 days ago
moidlahoz022
@moidlahoz0218 days ago
lydiel3
@lydiel23 days ago
espejoramirezhugo
@espejoramirezhugo26 days ago
g0nxz
@g0nxzOct 2026
IS
@isaacrojas19841Oct 2026
gh0stn4m3sec
@gh0stn4m3secSep 2026
sharat chandra
@sharat chandraSep 2026

Objectives

1
Entender la primitiva: leer el código de `server/src/routes/auth.ts:90-100` y ver cómo `req.query.redirect_url` viaja sin validación a `res.redirect(302, …)
2
Probar al menos 3 payloads del playground (`/playground`)
3
Identificar variantes** que normalmente saltan validadores naive

Information

Platform
YesWeHack
Difficulty
Easy
Duration
15 min
Bounty
Sin recompensa
Completed
56
Creator
gorka@gorka
Updated
Nov 2026

Download the environment

Reproduce it and find the bug yourself

Create account

Tools

Navegador

Prerequisites

  • Navegador

Tags

Open Redirect

Achievement you'll earn

Solve this lab to unlock this shareable achievement

Solve this lab to unlock this shareable achievement

Community writeups

Free · no account

The checklist I run on every new target

47 checks ordered by cost: first what can get you in trouble, then the cheap stuff, and finally the expensive stuff — which is where the big bounties are. I'll send it to your inbox right now.

Unsubscribe in one click, from any email.

Descripción del lab

Lumen Workspace es un producto inventado: un canvas de notas y workspaces compartidos al estilo Linear/Notion. El landing tiene hero animado, feature cards con stagger, y un menú de cuenta en la esquina superior derecha con un input "After sign out, send me to" deliberadamente expuesto.

La feature "redirect after logout" existe porque (según la narrativa) el equipo de growth quería que los usuarios pudieran ser devueltos a una landing de campaña al cerrar sesión desde un email. Para soportar esa UX, el endpoint acepta tanto rutas relativas como URLs absolutas y, de forma "intencionadamente flexible", no impone allowlist.

El bug vive en server/src/routes/auth.ts:

router.get('/logout', (req, res) => {
  res.clearCookie('lumen_token');
  const next = (req.query.redirect_url as string) || '/';
  return res.redirect(302, next);
});

No hay decoys complejos — esto es un lab básico. Las páginas de Dashboard / Profile / Activity / Workspaces existen para que el lab se sienta como una app real, no como una página estática con un solo botón.


Cómo verificar (sustituye al flag)

# 1) Levantar el lab
./autodeploy.sh deploy
# (o:  docker compose up --build -d)

# 2) PoC automatizado — confirma el 302 a host externo
python3 exploit.py

# 3) Suite de tests — 6 checks end-to-end
pip install -r tests/requirements.txt
python3 tests/verify.py

Los criterios de éxito están definidos en tests/verify.py:

# Check Cómo
1 Smoke: el lab responde en localhost:1402 GET / → 200
2 Registro de usuario funciona POST /api/auth/register → 200 + token
3 Login funciona POST /api/auth/login → 200 + token
4 VULN PRESENTE: redirect arbitrario externo GET /api/auth/logout?redirect_url=https://example.com/x → 302 + Location: https://example.com/x
5 Endpoint legítimo requiere auth GET /api/auth/me sin token → 401
6 Variantes peligrosas también funcionan GET /api/auth/logout?redirect_url=//example.com → 302 con Location protocol-relative

Diferencias con otros labs de Open Redirect del repo

Lab Categoría Foco
Basic_OR (este) Easy · Playground Vuln trivial + UI súper pulida + páginas explicativas
Nexora Hard · Gold Backslash bypass + bot Puppeteer arrastrando X-ULTRA-SECRET-TOKEN
Legacy "Open Redirect Logout function" Easy Comentarios // VULNERABLE: visibles — pendiente de refactor

Si vienes "del cole" y quieres verlo paso a paso, empieza aquí. Si ya entiendes el patrón y quieres encadenar con OAuth/cookie smuggling, salta a Nexora.

The community

This isn't a platform with users.It's people breaking the same things you are.

Inside people ask, share what they found and solve together what would block anyone on their own. It's free to join: no account, no plan, no email required.

Join the BBLABS community on Discord
Join the Discord

Free and open. You don't need a BBLABS account to join.

BBLABS LogoBBLABS

Laboratorios de hacking basados en hackeos reales. Aprende practicando sobre entornos vulnerables, con la resolución explicada paso a paso.

Producto

  • Funcionalidades
  • Precios
  • Labs
  • Aprender desde 0
  • Blog
  • Detrás de BBLABS

Legal

  • Términos
  • Privacidad
  • Cookies
  • Entrar
  • Crear cuenta

Para cualquier duda, bug, soporte o sugerencia puedes escribir a team@bblabs.es

© 2026 BBLABS. Todos los derechos reservados.