JWT
Aceptar firmas arbitrarias
Modificar el contenido del token. No se verifica la firma.
Aceptar tokens sin firma
Modificar el contenido del token, cambiar el alg a none y mantener la estructura del JWT correctamente acabando con ..
Fuerza bruta de claves secretas
Realizar fuerza bruta al JWT y una vez conseguida la clave, modificar el contenido del token y firmarlo con esa misma clave.
Inyección de JWT autofirmados a través del parámetro jwk
- Con la extensión de Burp
JWT Editorgeneramos una nueva clave RSA. - Modificamos el contenido del token.
- Realizamos un ataque de JWK embedded
Inyección de JWT autofirmados a través del parámetro jku
- Con la extensión de Burp
JWT Editorgeneramos una nueva clave RSA. - En el servidor de exploit, guardamos la clave JWK que se ha generado de la siguiente forma
1
2
3
4
5
6
7
8
9
10
11
{
"keys": [
{
"kty": "RSA",
"e": "AQAB",
"kid": "729cab22-c0e5-40fa-aefd-90a04575f309",
"n": "geBwWPJaZymjyUm1QCz7E8nHW8JE5LeofT1zRCfabzW5exvFk5sC-3N5UKpxFmfgVPyPYKieNU8NXg9FQoJ5fo7oI3xB6wgkHiWxS92ywjsfEEuYr5KY_kPvUI7jBIWs_2VCCIqPCp7VrosQgILBsH8OWwzXUhimInqaajG6wPGc6Li-WqT7QfMYEq9zCMFoZqfgI4oO8vI6K3n-sY_78f0uKpOCAQPSGa4ZV_fyqjjrNjLb6WyOLB0yfefXUVymb1lDz7yAfDVkVAL0-zQheywpD7jQPpbaI6QcTyUwXsJ_MrViuBQDhA6yHYjSzSOq7bVhe0ub0oItfRQon-dkiw"
}
]
}
- Modificamos el contenido del token.
- Cambiamos el
kidpor el mismo que hemos guardado en el servidor de exploit - Cambiamos el usuario
- Cambiamos el
- Firmamos el token sin modificar la cabecera con la clave RSA que hemos generdo
Inyección de JWT autofirmados a través del parámetro kid
- Modificar el parametro
kida../../../../../../../../dev/null - Seleccionar con la extensión de Burp
JWT Editorla opción de “firmar con clave vacia”
Confusión del algoritmo JWT
- Obtener la clave pública de
/jwks.json - Convertirla en formato PEM
- Encodear la clave pública formateada en Base64
- Crear una nueva clave simétrica y cambiar el valor generado
kpor el base64 - Modificar el token y firmalo con el algoritmo
HS256y la clave genérica creada
Confusión del algoritmo JWT derivando claves públicas a partir de tokens existentes
- Obtener dos JWT diferentes iniciando sesión dos veces
Ejecutar comando
1
docker run --rm -it portswigger/sig2n <token1> <token2>
- Copiar el resultado que nos devuelve en formato
Base64 encoded x509 key - Crear una nueva clave simétrica y cambiar el valor generado
kpor el base64 - Modificar el token y firmalo con el algoritmo
HS256y la clave genérica creada
Trending Tags
Contenido