Skip to content

PortSwigger · JWT Attacks ​

Qué es ​

Un JWT (JSON Web Token) es un token de sesión en tres partes separadas por puntos: cabecera, datos (payload) y firma, todo en Base64URL. La firma es lo que impide que lo modifique. Si el servidor no la comprueba bien, puedo cambiar los datos y hacerme pasar por otro usuario.

Labs completados ​

#LabTipo
1JWT authentication bypass via unverified signatureUnverified signature

Lo que me llevo ​

  1. Inicio sesión e intercepto la petición con Burp. La cookie de sesión es un JWT.
  2. Lo decodifico (con la extensión JWT Editor de Burp o en jwt.io): el campo sub contiene mi usuario.
  3. Cambio sub por administrator, no toco la firma y envío el token modificado a /admin.
  4. Responde 200 OK: el servidor decodifica pero no verifica la firma.

Cómo se arregla ​

  • Verificar siempre la firma con la librería (no usar funciones de solo decodificar).
  • Fijar el algoritmo esperado y rechazar alg: none.
  • Claves de firma largas y secretas.

Contenido propio con fines educativos. Sin flags ni material de exámenes.