Skip to content

Commit f409f8f

Browse files
committed
fix: prevent verify_general_json bypass empty signatures
1 parent 6426489 commit f409f8f

2 files changed

Lines changed: 10 additions & 0 deletions

File tree

‎src/joserfc/_rfc7515/json.py‎

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -115,6 +115,9 @@ def __signature_to_member(sig: JSONSignatureDict, registry: JWSRegistry) -> Head
115115

116116
def verify_general_json(obj: GeneralJSONSignature, registry: JWSRegistry, find_key: FindKey) -> bool:
117117
payload_segment = obj.segments["payload"]
118+
if not obj.signatures:
119+
return False
120+
118121
for index, signature in enumerate(obj.signatures):
119122
member = obj.members[index]
120123
if not verify_signature(member, signature, payload_segment, registry, find_key):

‎tests/jws/test_json.py‎

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -106,6 +106,13 @@ def test_bad_signature(self):
106106
value = serialize_json([member], b"hello", key1)
107107
self.assertRaises(BadSignatureError, deserialize_json, value, key2)
108108

109+
def test_general_json_with_empty_signatures(self):
110+
data: GeneralJSONSerialization = {
111+
"payload": "eyJ1c2VyIjoiYWRtaW4ifQ",
112+
"signatures": [],
113+
}
114+
self.assertRaises(BadSignatureError, deserialize_json, data, self.key)
115+
109116
def test_with_public_header(self):
110117
key: RSAKey = load_key("rsa-openssl-private.pem")
111118
member: HeaderDict = {"header": {"alg": "RS256", "kid": "abc"}}

0 commit comments

Comments
 (0)