El token web JSON, usualmente identificado por sus siglas JWT, brinda un recurso eficaz para autenticar y habilitar el acceso en los programas web. No obstante, un uso inadecuado de esta herramienta puede resultar en serios fallos de seguridad. En este escrito, discutiremos los desafíos frecuentes vinculados con JWT y cómo pueden ser explotados si no se abordan adecuadamente.
Una prevalente complicación con JWT es el riesgo relacionado con la firma. Los tokens JWT están sellados digitalmente para constatar su veracidad. No obstante, si la llave secreta usada para sellar el token es frágil o está vulnerada, un invasor podría falsificar tokens JWT.
Por ejemplo, si el intruso tiene acceso a la llave secreta, podría crear sus propios tokens JWT y ingresar al programa como cualquier usuario. Esto resultaría especialmente amenazante si el intruso puede crear un token con privilegios de gestión.
Además, JWT presenta otro dilema con el algoritmo "no usado". Este algoritmo, fiel a su nomenclatura, prescinde de cualquier firma. Teóricamente, este algoritmo solo se usa en circunstancias en las que se puede confiar plenamente en el generador del token. No obstante, si un programa permite tokens con el algoritmo "no usado", un invasor podría fabricar tokens JWT sin requerir una clave secreta.
Los tokens JWT albergan datos en su payload, que es bsicamente un texto codificado en base64. Aunque esta codificación puede aparentar seguridad, de hecho no brinda resguardo alguno. Si un token JWT alberga datos sensibles que se revelan, un invasor podría decodificar fácilmente el payload y acceder a estos datos.
JWT tiene otra complicación, carece de un método adecuado para revocar tokens. Una vez emitido, un JWT es válido hasta su fecha de vencimiento. Esto implica que si un token se revela, puede ser usado por un invasor hasta que vence. A diferencia de los sistemas de sesión basados en servidores, no hay manera simple de anular un JWT individual.
En resumen, aunque JWT proporciona un recurso eficaz para autenticación y permisos, su manejo inadecuado puede resultar en brechas de seguridad notables. En el siguiente escrito, investigaremos 340 claves vulnerables de JWT que debes examinar en tu código para prevenir estos fallos.
`
`
En nuestra investigación, decidimos profundizar en los secretos débiles de JWT (JSON Web Tokens) que se encuentran comúnmente en el código. Nuestro objetivo era identificar y catalogar 340 de estos secretos débiles para ayudar a los desarrolladores a evitar estos errores comunes.
Para llevar a cabo esta tarea, primero creamos un conjunto de herramientas de análisis de código. Estas herramientas se diseñaron para buscar patrones específicos que indicaran el uso de JWT y luego analizar el código circundante para identificar posibles secretos débiles.
Utilizamos una variedad de herramientas para realizar este análisis. Algunas de estas incluyen:
Scanners de código estático: Estas herramientas buscan patrones específicos en el código que pueden indicar problemas de seguridad. En nuestro caso, buscábamos el uso de JWT.
Analizadores de código dinámico: Estas herramientas ejecutan el código en un entorno controlado y observan su comportamiento. Esto nos permitió identificar secretos débiles que solo se revelan durante la ejecución.
Herramientas de análisis de tokens: Estas herramientas nos permitieron descomponer y analizar los tokens JWT en busca de secretos débiles.
Nuestro proceso de análisis consistió en varios pasos. Primero, utilizamos nuestros scanners de código estático para identificar todas las instancias de uso de JWT en el código. Luego, utilizamos nuestras herramientas de análisis de tokens para descomponer y analizar estos tokens. Finalmente, utilizamos nuestros analizadores de código dinámico para ejecutar el código y observar su comportamiento.
Como resultado de nuestro análisis, pudimos identificar 340 secretos débiles de JWT comúnmente utilizados en el código. Estos secretos débiles varían en gravedad, desde secretos que son simplemente demasiado cortos, hasta secretos que son comunes o fácilmente adivinables.
A continuación se muestra una tabla con algunos ejemplos de los secretos débiles que identificamos:
Secreto débil | Problema |
---|---|
123456 |
Demasiado corto |
password |
Común y fácilmente adivinable |
admin |
Común y fácilmente adivinable |
Nuestra investigación demuestra que el uso de secretos débiles de JWT es un problema común en el desarrollo de software. Al proporcionar esta lista de 340 secretos débiles, esperamos ayudar a los desarrolladores a evitar estos errores y mejorar la seguridad de sus aplicaciones.