Vulnerabilidad JWT

www.onlinetis.com
 

Una vulnerabilidad en JWT (JSON Web Token) ocurre cuando una aplicación web implementa de forma incorrecta el uso de estos tokens, permitiendo a un atacante manipular el token para eludir la autenticación, escalar privilegios o acceder a información sensible.

A diferencia de las vulnerabilidades en otros componentes, los fallos en JWT no están en el estándar en sí, sino en la forma en que los desarrolladores los implementan. La seguridad de un JWT depende de la correcta validación y manejo de sus tres partes: el encabezado, la carga útil (payload) y la firma.


Tipos de vulnerabilidades comunes

Un atacante puede explotar un JWT de varias maneras, pero los ataques más comunes se centran en la firma y el algoritmo utilizado:

  • Manipulación del algoritmo (Algorithm Confusion): Esta es una de las vulnerabilidades más críticas. Los JWT pueden usar algoritmos asimétricos (como RSA) o simétricos (como HMAC). Si una aplicación no valida explícitamente el algoritmo, un atacante puede cambiar el algoritmo de un token de RSA a HMAC en el encabezado. Luego, firma el token con la clave pública de la aplicación (que suele ser accesible). El servidor, al recibir el token, lo valida usando la clave pública como si fuera una clave secreta, lo que permite que el token malicioso sea aceptado como válido.

  • Algoritmo "None": Algunos implementadores olvidan deshabilitar el algoritmo "None", que permite crear tokens sin firma. Un atacante puede simplemente cambiar el valor del algoritmo a "None" en el encabezado y eliminar la firma del token. Si el servidor no está configurado para rechazar este algoritmo, aceptará el token como si fuera válido.

  • Clave secreta débil (Weak Secrets): En los tokens que usan algoritmos simétricos (como HS256), la seguridad depende de la fortaleza de la clave secreta. Si la clave es predecible, corta o un valor por defecto ("secret", "123456"), un atacante puede realizar un ataque de fuerza bruta para adivinar la clave. Una vez que la tienen, pueden firmar sus propios tokens para suplantar a otros usuarios.


Prevención y mejores prácticas

Para evitar estas vulnerabilidades, es crucial seguir las siguientes recomendaciones:

  • Validar siempre la firma: Nunca uses solo una función de decodificación (decode()). Debes utilizar una función que verifique la firma (verify()) para asegurarte de que el token no ha sido alterado.

  • Forzar el uso de un algoritmo específico: El servidor debe validar el token usando el algoritmo que espera, y no el que viene especificado en el encabezado del token. Se debe rechazar cualquier token que use un algoritmo diferente.

  • Generar y gestionar claves fuertes: Usa claves secretas largas, complejas y difíciles de adivinar. Es fundamental evitar valores por defecto o claves codificadas en el código fuente.

  • Invalidación del token: JWT son por naturaleza "sin estado" (stateless), lo que significa que el servidor no guarda información sobre ellos. Esto dificulta invalidar un token antes de su vencimiento. Para mitigar esto, se pueden implementar listas negras de tokens en el lado del servidor para revocar un token si un usuario cierra la sesión o es comprometido.

  • Configurar un tiempo de expiración corto: Limita la vida útil de los tokens. Si un token es robado, el atacante solo tendrá un tiempo limitado para usarlo antes de que expire.

Entradas populares de este blog

Ciberseguridad y hacking con Whatweb

Como robar contraseñas haciendo un phishing web

Arsenal software hacking NFC