codificación JWT usando HMAC con clave asimétrica como secreto

1

Actualmente estoy explotando la vulnerabilidad discutida aquí

enlace

Donde el tipo de algoritmo en JWT puede cambiarse de RSA a HMAC y firmar el token con una clave pública determinada.

Sin embargo, escribí el siguiente código de Python:

import jwt
import base64

# consider 'publickey' as the servers public key
code = 
jwt.encode({'login':'test'},'publickey',algorithm='HS256')

Esto produce un error:

InvalidKeyError: The specified key is an asymmetric key or x509 certificate and should not be used as an HMAC secret.

Estoy buscando una alternativa donde pueda firmarlo con éxito usando la clave asimétrica.

Gracias

    
pregunta Goron 07.06.2018 - 13:41
fuente

2 respuestas

1

Use una versión antigua de pyjwt (0.4.3) donde esta excepción aún no se implementó.

pip install pyjwt==0.4.3
    
respondido por el Sjoerd 07.06.2018 - 16:38
fuente
0

Al ejecutar su programa, informa de la línea que lanza la excepción:

  File "/some-path/site-packages/jwt/algorithms.py", line 151, in prepare_key
    'The specified key is an asymmetric key or x509 certificate and'
jwt.exceptions.InvalidKeyError: The specified key is an asymmetric key or x509 certificate and should not be used as an HMAC secret.

Entonces edite el archivo /some-path/site-packages/jwt/algorithms.py alrededor de la línea 151, para que ya no lance la excepción.

Por ejemplo, pon esto ahí:

invalid_strings = []
    
respondido por el Sjoerd 07.06.2018 - 16:04
fuente

Lea otras preguntas en las etiquetas