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

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

By @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.

This hack was reported with no reward

54 views1 completedUpdated Nov 2026
Log in to start

Learn to find this bug

A real HackerOne 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· 1

benjaminnocervigni1
@benjaminnocervigni3 days ago

Objectives

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).

Information

Platform
HackerOne
Difficulty
Medium
Duration
30 min
Bounty
Sin recompensa
Completed
1
Creator
gorka@gorka
Updated
Nov 2026

Download the environment

Reproduce it and find the bug yourself

Create account

Tools

curlBurp Suitejwt.ioPython

Prerequisites

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

Tags

Information DisclosureAuth BypassPrivescBAC

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.

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.

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.