CVE-2024-53861: Issuer field partial matches allowed in pyjwt
Summary The wrong string if check is run for iss checking, resulting in "acb" being accepted for "abc".
Details This is a bug introduced in version 2.10.0: checking the "iss" claim changed from isinstance(issuer, list) to isinstance(issuer, Sequence).
diff - if isinstance(issuer, list): + if isinstance(issuer, Sequence): if payload["iss"] not in issuer: raise InvalidIssuerError("Invalid issuer") else:
Since str is a Sequnce, but not a list, in is also used for string comparison. This results in if "abc" not in "abcd": being checked instead of if "abc" != "abc":. PoC Check out the unit tests added here: https://github.com/jpadilla/pyjwt-ghsa-75c5-xw7c-p5pm python issuer = "urn:expected"
payload = {"iss": "urn:"}
token = jwt.encode(payload, "secret")
# decode() succeeds, even though "urn:" != "urn:expected". No exception is raised. with pytest.raises(InvalidIssuerError): jwt.decode(token, "secret", issuer=issuer, algorithms=["HS256"])
Impact
I would say the real world impact is not that high, seeing as the signature still has to match. We should still fix it.
Other sources
pyjwt is a JSON Web Token implementation in Python. An incorrect string comparison is run for iss checking, resulting in "acb" being accepted for "abc". This is a bug introduced in version 2.10.0: checking the "iss" claim changed from isinstance(issuer, list) to isinstance(issuer, Sequence). Since str is a Sequnce, but not a list, in is also used for string comparison. This results in if "abc" not in "abcd": being checked instead of if "abc" != "abc":. Signature checks are still present so real world impact is likely limited to denial of service scenarios. This issue has been patched in version 2.10.1. All users are advised to upgrade. There are no known workarounds for this vulnerability.
— NVD
Affected Software
Remediation
Event History
Frequently Asked Questions
What is the severity of CVE-2024-53861?
CVE-2024-53861 is classified as a moderate severity vulnerability due to the potential for misinterpretation of JWT claims.
How do I fix CVE-2024-53861?
To fix CVE-2024-53861, upgrade PyJWT to version 2.10.1 or later.
What versions are affected by CVE-2024-53861?
CVE-2024-53861 affects PyJWT version 2.10.0.
What kind of issue is CVE-2024-53861 related to?
CVE-2024-53861 is related to a bug in the string equality check for the 'iss' claim in JWT validations.
What is the potential impact of exploiting CVE-2024-53861?
Exploiting CVE-2024-53861 could lead to unauthorized access or acceptance of invalid JWTs.