
Demo del ataque de confusión de algoritmos en varias librerías JWT
Demostración del ataque de confusión de algoritmo en librerías de Json Web Token (JWT). Los JWT
se usan a menudo en cookies para certificar una sesión de usuario, por lo que este ataque es crítico. El
módulo de Node [email protected] se utilizó para demostrar la vulnerabilidad.
Este proyecto también fue una agradable actividad de vibe coding, ya que el front end se hizo casi por completo con LLMs, fuera de las llamadas a la api.
El formato de un JWT es el siguiente:
b64(header).b64(payload).b64(signature)
With in our case:
header = (algorithm, type)
payload = (username, role)
En su momento, las distintas librerías de JWT podían firmar con un algoritmo, pero no imponían un algoritmo y en cambio se basaban en el contenido de la cabecera del JWT, permitiendo así que el usuario decidiera su propio cifrado. Esto permite muchos exploits, pero el utilizado en este caso es el siguiente:
Autentícate como cualquier usuario en la página de inicio de sesión. Primero deberás registrarte.
Una vez en la página principal, habrá un botón que solo se puede pulsar si tienes una sesión de administrador válida. A continuación, tendrás que ejecutar el exploit para forjar este JWT.
Por último, sustituye el JWT original por el JWT forjado en el almacenamiento local y, tras una actualización, el botón debería ser pulsable y ¡la flag es tuya!