-
-
Notifications
You must be signed in to change notification settings - Fork 521
Closed
Copy link
Labels
Description
Describe the bug
Deserialize JWS JSON will overwrite protected headers (protected) with values from header
To Reproduce
from authlib.jose import JsonWebSignature
jws = JsonWebSignature()
header_obj = {
'protected': {
'alg': 'HS256',
'crit': ['jti', 'exp'],
'kid': 'key',
'jti': '1',
'exp': '11111111111',
},
'header': {},
}
secret = b'secret'
payload = b'payload'
jws_json = jws.serialize_json(header_obj, payload, secret)
# assume that attacker got access to jws
jws_json['header'] = {
'kid': 'another_key',
'jti': '9',
'exp': '99999999999',
}
decoded = jws.deserialize_json(jws_json, secret)
assert decoded['header']['kid'] == 'key'
assert decoded['header']['jti'] == '1'
assert decoded['header']['exp'] == '11111111111'Expected behavior
deserialize_json must not overwrite protected headers with unprotected headers.
{
'header': {
'alg': 'HS256',
'crit': ['jti', 'exp'],
'kid': 'key',
'jti': '1',
'exp': '11111111111'
},
'payload': b'payload',
}
Environment:
- OS: ox X 11.2.3
- Python Version: 3.9.1
- Authlib Version: 0.15.3
Reactions are currently unavailable