BBLABSBBLABS
LaboratoriosAprender desde 0FuncionesPreciosTestimoniosDetrás de BBLABS
  1. Inicio
  2. Labs
  3. Escalada de miembro a administrador en un clon de Trello por filtración de la clave de firma JWT
Media30 min

Escalada de miembro a administrador en un clon de Trello por filtración de la clave de firma JWT

Por @gorka

Un endpoint de configuración pública filtra la clave con la que se firman los JWT; con ella un miembro forja un token role=admin válido y lee la clave maestra de la organización.

Este hackeo se reportó sin recompensa

53 visitas1 completadosActualizado nov 2026
Iniciar sesión para empezar

Aprende a encontrar este bug

Un hackeo real de HackerOne, reproducido para que lo practiques.

Crea tu cuenta y practica bugs reales que se pagaron. Descarga el entorno, encuéntralo y aprende la técnica exacta — tu camino a tu primer bounty.

650

hunters entrenando

50

labs de hackeos reales

380

completaciones

$12.000

pagados por estos bugs

40 flags capturadas esta semana
Crear cuenta
Ya tengo cuenta

Acceso a todos los labs · sin permanencia · cancela cuando quieras

Hackers que lo han resuelto· 1

benjaminnocervigni1
@benjaminnocervigniHace 3 días

Objetivos

1
Observar las peticiones que lanza el cliente al arrancar (incluida la de configuración).
2
Comprobar que el panel de organización responde 403 a un miembro (control por rol correcto).
3
Decodificar tu propio JWT de sesión y localizar el campo role.
4
Descubrir que /api/config expone auth.signingKey (la clave de firma del servidor).
5
Forjar un JWT con role=admin firmado (HS256) con la clave filtrada.
6
Usar el token forjado para acceder al panel de organización solo-admin.
7
Capturar la flag: la clave maestra de la organización.
8
Distinguir el fallo real (fuga del secreto) del control honesto (la firma sí se valida).

Información

Plataforma
HackerOne
Dificultad
Media
Duración
30 min
Bounty
Sin recompensa
Completados
1
Creador
gorka@gorka
Actualizado
nov 2026

Descarga el entorno

Reprodúcelo y encuentra el bug tú mismo

Crear cuenta

Herramientas

curlBurp Suitejwt.ioPython

Prerequisitos

  • HTTP y APIs REST
  • Estructura de un JWT (HS256)
  • Control de acceso por rol

Tags

Information DisclosureAuth BypassPrivescBAC

Logro que recibirás

Cuando resuelvas este lab desbloqueas este logro compartible

Cuando resuelvas este lab desbloqueas este logro compartible

Writeups de la comunidad

Gratis · sin cuenta

La checklist que repaso en cada objetivo nuevo

47 comprobaciones ordenadas por coste: primero lo que te puede meter en un lío, luego lo barato, y al final lo caro — que es donde están los bounties grandes. Te la mando al correo ahora mismo.

Te das de baja en un clic, desde cualquier correo.

Contenido del lab

Escenario

Kanbia es un clon de Trello: organizas el trabajo del equipo en tableros con listas y tarjetas. La organización Nébula Studio tiene una clave maestra (rota API keys, SCIM y exports) que solo debería ver un administrador, en Ajustes de la organización › Seguridad. Esa clave es la flag.

Tú eres un miembro normal: attacker@kanbia.local / password123. Tu objetivo es leer esa clave maestra sin ser administrador.

Qué tienes

  • Tu cuenta de miembro, con acceso a los tableros del equipo (punto de partida, no es el fallo).
  • El panel de organización con tres pestañas: General, Miembros y Seguridad (bloqueada para ti).

Guía paso a paso

  1. Recon. Entra en Ajustes › Seguridad: te dice "Solo administradores". El servidor decide tu rol; no basta con tocar el cliente. Mira ahora en el proxy/Network las peticiones que lanza la app al arrancar: entre ellas hay una a GET /api/config.

  2. Tu sesión es un JWT. Coge tu token (cookie kb_token o localStorage.kb_token) y decodifícalo (jwt.io). El payload trae role: "member". Si solo cambias member→admin y reenvías, el servidor responde 401: la firma ya no cuadra. La firma sí se valida; te falta la clave para firmar tú.

  3. La fuga. Abre la respuesta de GET /api/config. Junto a datos inocuos (nombre de app, flags de features) viaja auth.signingKey: la clave con la que el servidor firma los JWT. No debería salir nunca del servidor.

  4. Forja el token. Reconstruye tu JWT con role: "admin" y fírmalo con HS256 usando esa signingKey (en jwt.io pega la clave en "your-256-bit-secret", o con un script). Obtienes un token admin con firma válida.

  5. Captura la flag. Envía GET /api/org/settings con Authorization: Bearer <token_admin> (o guarda el token en kb_token y abre Seguridad): ahora responde 200 y muestra la clave maestra de la organización: FLAG{…}.

Canales de feedback (no vuelas a ciegas)

  • El panel bloqueado nombra explícitamente el requisito ("Solo administradores") → el rol es lo que importa.
  • Cambiar el role sin re-firmar da 401 → la firma se valida de verdad; necesitas el secreto.
  • /api/config devuelve la signingKey en claro → confirmas la fuga al instante.
  • Con el token admin, /api/org/settings pasa de 403 a 200 con masterKey → sabes que escalaste.

Decoys (descártalos por razonamiento)

  • El control de rol no está roto: requireAdmin valida bien y un token mal firmado se rechaza. El fallo es que el secreto se filtra, no la verificación.
  • La pestaña Miembros (/api/org/members) lista a todo el equipo, pero no contiene la clave maestra: no es la vía.
  • El resto de /api/config (features, límites de subida) es ruido verosímil: el único campo peligroso es auth.signingKey.

La falla del laboratorio

Clases: uso de credencial/secreto expuesto (CWE-798), verificación de firma inefectiva por secreto comprometido (CWE-347) y escalada por control de acceso roto (CWE-285), con divulgación de información sensible (CWE-200). OWASP A01:2021 (Broken Access Control) + A02:2021 (Cryptographic Failures) + A05:2021 (Security Misconfiguration).

La raíz es una sola: un secreto de servidor viaja al cliente. El endpoint de configuración mezcla datos públicos con la clave de firma de los JWT; a partir de ahí toda la criptografía de sesión es papel mojado, porque cualquiera puede emitir tokens válidos con el rol que quiera. La verificación de firma —correcta en sí misma— deja de proteger. La defensa: los secretos de firma viven solo en el servidor (secret manager), se rotan, y un endpoint que consume el cliente jamás debe incluirlos; como defensa en profundidad, no derivar autorización sensible únicamente del role del token sin revalidar contra la base de datos.

Laboratorio basado en la reproducción anonimizada (empresa ficticia Kanbia) de una técnica real de bug bounty: escalada de privilegios por filtración de la clave de firma de sesión.

La comunidad

Esto no es una plataforma con usuarios.Es gente rompiendo lo mismo que tú.

Dentro se pregunta, se enseña lo que se ha encontrado y se resuelve en grupo lo que atascaría a cualquiera solo. Se entra gratis: sin cuenta, sin plan y sin dejar el correo.

Entrar a la comunidad de BBLABS en Discord
Entrar al Discord

Es gratis y abierto. No hace falta tener cuenta en BBLABS para entrar.

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.