Every CVE Search/ Get API key

CVE-2026-102274

PyJWT: Malformed RSA JWK aborts parsing of an entire JWK Set

5.9 MediumFix available

PyJWT is a Python implementation of JSON Web Token standards. From 2.9.0 until 2.14.0, PyJWKSet does not catch the plain ValueError raised for malformed RSA JWK components by RSAAlgorithm.from_jwk in jwt/api_jwk.py. This occurs when a JWK Set contains a malformed RSA key alongside otherwise usable keys. As a result, one malformed member aborts construction of the entire PyJWKSet. Consequently, applications can experience authentication failures or request-level denial of service. This issue is fixed in version 2.14.0.

Attack profile

How easy it is to exploit

Attack vector
Network
Complexity
High
Privileges needed
None
User interaction
None

What an attacker can affect

Confidentiality
None
Integrity
None
Availability
High

Exploit likelihood

0.55%Up 0.2 points since Sep 29, 2026
90%50%10%1%

What each source reports

CVE List Score used 5.9

PyJWT: Malformed RSA JWK aborts parsing of an entire JWK Set

PyJWT is a Python implementation of JSON Web Token standards. From 2.9.0 until 2.14.0, PyJWKSet does not catch the plain ValueError raised for malformed RSA JWK components by RSAAlgorithm.from_jwk in jwt/api_jwk.py. This occurs when a JWK Set contains a malformed RSA key alongside otherwise usable keys. As a result, one malformed member aborts construction of the entire PyJWKSet. Consequently, applications can experience authentication failures or request-level denial of service. This issue is fixed in version 2.14.0.

Record
CVE-2026-102274
CVSS 3.1
5.9 MediumCVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H
Weakness
CWE-755
Updated
2026-11-02
EUVDEUVD-2026-88542 5.9

PyJWT is a Python implementation of JSON Web Token standards. From 2.9.0 until 2.14.0, PyJWKSet does not catch the plain ValueError raised for malformed RSA JWK components by RSAAlgorithm.from_jwk in jwt/api_jwk.py. This occurs when a JWK Set contains a malformed RSA key alongside otherwise usable keys. As a result, one malformed member aborts construction of the entire PyJWKSet. Consequently, applications can experience authentication failures or request-level denial of service. This issue is fixed in version 2.14.0.

Record
EUVD-2026-88542
CVSS 3.1
5.9 MediumCVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H
Updated
2026-11-02
GitHub AdvisoriesGHSA-w6j9-cwv2-h6wq 5.9

PyJWT: Malformed RSA JWK aborts parsing of an entire JWK Set

Summary

A malformed RSA JWK inside a JWK Set aborts parsing of the entire set instead of being skipped, because RSAAlgorithm.from_jwk can raise a plain ValueError that isn't caught by PyJWKSet's per-key error-skipping logic.

Affected component / version

  • Package: PyJWT (PyPI, ecosystem pip)
  • Files: jwt/api_jwk.py (PyJWK.__init__, PyJWKSet.__init__), jwt/algorithms.py (RSAAlgorithm.from_jwk)
  • Confirmed present in the master branch as of 2026-09-05 (commit 7144e4534c34810f4525dc4578a32addd8212cff, tag 2.13.0). Directly verified identical in tags 2.9.0, 2.10.0, 2.11.0, 2.12.0, 2.12.1, 2.13.0 -- the vulnerable call and the except PyJWTError guard are unchanged across all six releases. Not verified against any release prior to 2.9.0.

Details

PyJWKSet.__init__ (jwt/api_jwk.py:145-152) iterates each key in a JWK Set:

for key in keys:
    try:
        self.keys.append(PyJWK(key))
    except PyJWTError as error:
        if isinstance(error, MissingCryptographyError):
            raise error
        # skip unusable keys
        continue

PyJWK.__init__ (api_jwk.py:82) calls self.Algorithm.from_jwk(self._jwk_data) with no try/except of its own. For an RSA JWK, this dispatches to RSAAlgorithm.from_jwk (jwt/algorithms.py:539-586). When the JWK supplies d, e, n without the CRT parameters (p, q, dp, dq, qi), from_jwk calls cryptography's rsa_recover_prime_factors(public_numbers.n, d, public_numbers.e) (algorithms.py:572-574) to derive the key. If d is not the correct private exponent for that n/e pair, rsa_recover_prime_factors raises a plain ValueError.

ValueError is a built-in Python exception and is not a subclass of jwt.exceptions.PyJWTError (PyJWTError(Exception) is the root of PyJWT's own exception hierarchy). It is therefore not caught by PyJWKSet.__init__'s except PyJWTError, and propagates out of the constructor, aborting the for key in keys: loop before any subsequent key in the list is processed.

PyJWKSet.from_dict/from_json and PyJWK.from_dict/from_json are exported public API (jwt/__init__.py). PyJWKClient.get_jwk_set (jwt/jwks_client.py:158) feeds a fetched JWKS HTTP response directly into PyJWKSet.from_dict with no per-key pre-validation, so this is reachable through the documented PyJWKClient flow whenever the fetched JWKS contains a malformed key alongside valid ones.

Proof of concept

import jwt

good_jwk = {
    "kty": "RSA",
    "n": "<a valid base64url-encoded RSA modulus, e.g. from a real 2048-bit public key>",
    "e": "AQAB",
}

bad_jwk = {
    "kty": "RSA",
    "n": good_jwk["n"],
    "e": "AQAB",
    "d": "AAAAAA",  # not the true private exponent for n/e, no CRT params present
}

jwks_doc = {"keys": [bad_jwk, good_jwk]}

jwt.PyJWKSet.from_dict(jwks_doc)
# raises: ValueError: Unable to compute factors p and q from exponent d.
# (uncaught -- PyJWKSet.__init__ never returns, `good_jwk` is never added)

Impact

PyJWKSet.__init__ raises before completing, so no key in the JWK Set is added to the resulting set, including keys unrelated to the malformed entry. This requires the malformed key to already be present in a JWK Set the application parses (e.g. one entry in an aggregated/federated key set, or a key affected by transit corruption before signature verification of the JWKS transport itself). Applications that vet each key individually before adding it to a trusted set are not affected. The failure is an uncaught ValueError, not one of PyJWT's documented jwt.exceptions.* types, so exception handling written against PyJWT's documented contract (except jwt.exceptions.PyJWTError) will not catch it either.

Suggested remediation

Wrap the key-construction call in PyJWK.__init__ (api_jwk.py:82) so a ValueError is converted into InvalidKeyError (a PyJWTError subclass):

try:
    self.key =…
Record
GHSA-w6j9-cwv2-h6wq
CVSS 3.1
5.9 MediumCVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H
Weakness
CWE-755
Updated
2026-11-02
NVD 5.9

PyJWT is a Python implementation of JSON Web Token standards. From 2.9.0 until 2.14.0, PyJWKSet does not catch the plain ValueError raised for malformed RSA JWK components by RSAAlgorithm.from_jwk in jwt/api_jwk.py. This occurs when a JWK Set contains a malformed RSA key alongside otherwise usable keys. As a result, one malformed member aborts construction of the entire PyJWKSet. Consequently, applications can experience authentication failures or request-level denial of service. This issue is fixed in version 2.14.0.

Record
CVE-2026-102274
CVSS 3.1
5.9 MediumCVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H
CVSS 3.1
7.5 HighCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Weakness
CWE-755
Updated
2026-11-02
OSVBELL-CVE-2026-102274 7.5
Record
BELL-CVE-2026-102274
CVSS 3.1
7.5 HighCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Updated
2026-11-07
OSV 5.9

PyJWT: Malformed RSA JWK aborts parsing of an entire JWK Set

PyJWT is a Python implementation of JSON Web Token standards. From 2.9.0 until 2.14.0, PyJWKSet does not catch the plain ValueError raised for malformed RSA JWK components by RSAAlgorithm.from_jwk in jwt/api_jwk.py. This occurs when a JWK Set contains a malformed RSA key alongside otherwise usable keys. As a result, one malformed member aborts construction of the entire PyJWKSet. Consequently, applications can experience authentication failures or request-level denial of service. This issue is fixed in version 2.14.0.

Record
CVE-2026-102274
CVSS 3.1
5.9 MediumCVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H
Weakness
CWE-755
Updated
2026-11-02
Show 13 moreShow less
OSVDEBIAN-CVE-2026-102274 7.5

PyJWT is a Python implementation of JSON Web Token standards. From 2.9.0 until 2.14.0, PyJWKSet does not catch the plain ValueError raised for malformed RSA JWK components by RSAAlgorithm.from_jwk in jwt/api_jwk.py. This occurs when a JWK Set contains a malformed RSA key alongside otherwise usable keys. As a result, one malformed member aborts construction of the entire PyJWKSet. Consequently, applications can experience authentication failures or request-level denial of service. This issue is fixed in version 2.14.0.

Record
DEBIAN-CVE-2026-102274
CVSS 3.1
7.5 HighCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Updated
2026-11-02
OSVGHSA-w6j9-cwv2-h6wq 5.9

PyJWT: Malformed RSA JWK aborts parsing of an entire JWK Set

Summary

A malformed RSA JWK inside a JWK Set aborts parsing of the entire set instead of being skipped, because RSAAlgorithm.from_jwk can raise a plain ValueError that isn't caught by PyJWKSet's per-key error-skipping logic.

Affected component / version

  • Package: PyJWT (PyPI, ecosystem pip)
  • Files: jwt/api_jwk.py (PyJWK.__init__, PyJWKSet.__init__), jwt/algorithms.py (RSAAlgorithm.from_jwk)
  • Confirmed present in the master branch as of 2026-09-05 (commit 7144e4534c34810f4525dc4578a32addd8212cff, tag 2.13.0). Directly verified identical in tags 2.9.0, 2.10.0, 2.11.0, 2.12.0, 2.12.1, 2.13.0 -- the vulnerable call and the except PyJWTError guard are unchanged across all six releases. Not verified against any release prior to 2.9.0.

Details

PyJWKSet.__init__ (jwt/api_jwk.py:145-152) iterates each key in a JWK Set:

for key in keys:
    try:
        self.keys.append(PyJWK(key))
    except PyJWTError as error:
        if isinstance(error, MissingCryptographyError):
            raise error
        # skip unusable keys
        continue

PyJWK.__init__ (api_jwk.py:82) calls self.Algorithm.from_jwk(self._jwk_data) with no try/except of its own. For an RSA JWK, this dispatches to RSAAlgorithm.from_jwk (jwt/algorithms.py:539-586). When the JWK supplies d, e, n without the CRT parameters (p, q, dp, dq, qi), from_jwk calls cryptography's rsa_recover_prime_factors(public_numbers.n, d, public_numbers.e) (algorithms.py:572-574) to derive the key. If d is not the correct private exponent for that n/e pair, rsa_recover_prime_factors raises a plain ValueError.

ValueError is a built-in Python exception and is not a subclass of jwt.exceptions.PyJWTError (PyJWTError(Exception) is the root of PyJWT's own exception hierarchy). It is therefore not caught by PyJWKSet.__init__'s except PyJWTError, and propagates out of the constructor, aborting the for key in keys: loop before any subsequent key in the list is processed.

PyJWKSet.from_dict/from_json and PyJWK.from_dict/from_json are exported public API (jwt/__init__.py). PyJWKClient.get_jwk_set (jwt/jwks_client.py:158) feeds a fetched JWKS HTTP response directly into PyJWKSet.from_dict with no per-key pre-validation, so this is reachable through the documented PyJWKClient flow whenever the fetched JWKS contains a malformed key alongside valid ones.

Proof of concept

import jwt

good_jwk = {
    "kty": "RSA",
    "n": "<a valid base64url-encoded RSA modulus, e.g. from a real 2048-bit public key>",
    "e": "AQAB",
}

bad_jwk = {
    "kty": "RSA",
    "n": good_jwk["n"],
    "e": "AQAB",
    "d": "AAAAAA",  # not the true private exponent for n/e, no CRT params present
}

jwks_doc = {"keys": [bad_jwk, good_jwk]}

jwt.PyJWKSet.from_dict(jwks_doc)
# raises: ValueError: Unable to compute factors p and q from exponent d.
# (uncaught -- PyJWKSet.__init__ never returns, `good_jwk` is never added)

Impact

PyJWKSet.__init__ raises before completing, so no key in the JWK Set is added to the resulting set, including keys unrelated to the malformed entry. This requires the malformed key to already be present in a JWK Set the application parses (e.g. one entry in an aggregated/federated key set, or a key affected by transit corruption before signature verification of the JWKS transport itself). Applications that vet each key individually before adding it to a trusted set are not affected. The failure is an uncaught ValueError, not one of PyJWT's documented jwt.exceptions.* types, so exception handling written against PyJWT's documented contract (except jwt.exceptions.PyJWTError) will not catch it either.

Suggested remediation

Wrap the key-construction call in PyJWK.__init__ (api_jwk.py:82) so a ValueError is converted into InvalidKeyError (a PyJWTError subclass):

try:
    self.key =…
Record
GHSA-w6j9-cwv2-h6wq
CVSS 3.1
5.9 MediumCVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H
Weakness
CWE-755
Updated
2026-11-02
OSVPYSEC-2026-4152 5.9

PyJWT: Malformed RSA JWK aborts parsing of an entire JWK Set

Summary

A malformed RSA JWK inside a JWK Set aborts parsing of the entire set instead of being skipped, because RSAAlgorithm.from_jwk can raise a plain ValueError that isn't caught by PyJWKSet's per-key error-skipping logic.

Affected component / version

  • Package: PyJWT (PyPI, ecosystem pip)
  • Files: jwt/api_jwk.py (PyJWK.__init__, PyJWKSet.__init__), jwt/algorithms.py (RSAAlgorithm.from_jwk)
  • Confirmed present in the master branch as of 2026-09-05 (commit 7144e4534c34810f4525dc4578a32addd8212cff, tag 2.13.0). Directly verified identical in tags 2.9.0, 2.10.0, 2.11.0, 2.12.0, 2.12.1, 2.13.0 -- the vulnerable call and the except PyJWTError guard are unchanged across all six releases. Not verified against any release prior to 2.9.0.

Details

PyJWKSet.__init__ (jwt/api_jwk.py:145-152) iterates each key in a JWK Set:

for key in keys:
    try:
        self.keys.append(PyJWK(key))
    except PyJWTError as error:
        if isinstance(error, MissingCryptographyError):
            raise error
        # skip unusable keys
        continue

PyJWK.__init__ (api_jwk.py:82) calls self.Algorithm.from_jwk(self._jwk_data) with no try/except of its own. For an RSA JWK, this dispatches to RSAAlgorithm.from_jwk (jwt/algorithms.py:539-586). When the JWK supplies d, e, n without the CRT parameters (p, q, dp, dq, qi), from_jwk calls cryptography's rsa_recover_prime_factors(public_numbers.n, d, public_numbers.e) (algorithms.py:572-574) to derive the key. If d is not the correct private exponent for that n/e pair, rsa_recover_prime_factors raises a plain ValueError.

ValueError is a built-in Python exception and is not a subclass of jwt.exceptions.PyJWTError (PyJWTError(Exception) is the root of PyJWT's own exception hierarchy). It is therefore not caught by PyJWKSet.__init__'s except PyJWTError, and propagates out of the constructor, aborting the for key in keys: loop before any subsequent key in the list is processed.

PyJWKSet.from_dict/from_json and PyJWK.from_dict/from_json are exported public API (jwt/__init__.py). PyJWKClient.get_jwk_set (jwt/jwks_client.py:158) feeds a fetched JWKS HTTP response directly into PyJWKSet.from_dict with no per-key pre-validation, so this is reachable through the documented PyJWKClient flow whenever the fetched JWKS contains a malformed key alongside valid ones.

Proof of concept

import jwt

good_jwk = {
    "kty": "RSA",
    "n": "<a valid base64url-encoded RSA modulus, e.g. from a real 2048-bit public key>",
    "e": "AQAB",
}

bad_jwk = {
    "kty": "RSA",
    "n": good_jwk["n"],
    "e": "AQAB",
    "d": "AAAAAA",  # not the true private exponent for n/e, no CRT params present
}

jwks_doc = {"keys": [bad_jwk, good_jwk]}

jwt.PyJWKSet.from_dict(jwks_doc)
# raises: ValueError: Unable to compute factors p and q from exponent d.
# (uncaught -- PyJWKSet.__init__ never returns, `good_jwk` is never added)

Impact

PyJWKSet.__init__ raises before completing, so no key in the JWK Set is added to the resulting set, including keys unrelated to the malformed entry. This requires the malformed key to already be present in a JWK Set the application parses (e.g. one entry in an aggregated/federated key set, or a key affected by transit corruption before signature verification of the JWKS transport itself). Applications that vet each key individually before adding it to a trusted set are not affected. The failure is an uncaught ValueError, not one of PyJWT's documented jwt.exceptions.* types, so exception handling written against PyJWT's documented contract (except jwt.exceptions.PyJWTError) will not catch it either.

Suggested remediation

Wrap the key-construction call in PyJWK.__init__ (api_jwk.py:82) so a ValueError is converted into InvalidKeyError (a PyJWTError subclass):

try:
    self.key =…
Record
PYSEC-2026-4152
CVSS 3.1
5.9 MediumCVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H
Updated
2026-11-02
OSVUBUNTU-CVE-2026-102274 5.9

PyJWT is a Python implementation of JSON Web Token standards. From 2.9.0 until 2.14.0, PyJWKSet does not catch the plain ValueError raised for malformed RSA JWK components by RSAAlgorithm.from_jwk in jwt/api_jwk.py. This occurs when a JWK Set contains a malformed RSA key alongside otherwise usable keys. As a result, one malformed member aborts construction of the entire PyJWKSet. Consequently, applications can experience authentication failures or request-level denial of service. This issue is fixed in version 2.14.0.

Record
UBUNTU-CVE-2026-102274
CVSS 3.1
5.9 MediumCVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:H
CVSS 3.1
7.5 HighCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H
Updated
2026-11-02
OSVAZL-105236 No score

CVE-2026-102274 affecting package python-jwt for versions less than 2.15.1-1

PyJWT is a Python implementation of JSON Web Token standards. From 2.9.0 until 2.14.0, PyJWKSet does not catch the plain ValueError raised for malformed RSA JWK components by RSAAlgorithm.from_jwk in jwt/api_jwk.py. This occurs when a JWK Set contains a malformed RSA key alongside otherwise usable keys. As a result, one malformed member aborts construction of the entire PyJWKSet. Consequently, applications can experience authentication failures or request-level denial of service. This issue is fixed in version 2.14.0.

Record
AZL-105236
Updated
2026-11-02
OSVCLSA-2026-1790745888 No score

TuxCare security update for pyjwt (1 CVE)

TuxCare rebuilt pyjwt to address 1 CVE. Fixed in 2.10.1.post4+tuxcare.

Record
CLSA-2026-1790745888
Updated
2026-11-02
OSVCLSA-2026-1793698392 No score

TuxCare security update for pyjwt (4 CVEs)

TuxCare rebuilt pyjwt to address 4 CVEs. Fixed in 2.8.0.post6+tuxcare.

Record
CLSA-2026-1793698392
Updated
2026-11-03
OSVopenSUSE-SU-2026:22074-1 No score

Security update for python-PyJWT

This update for python-PyJWT fixes the following issues:

  • CVE-2026-101917: attacker traffic can amplify outbound requests to the configured JWKS endpoint (bsc#1283060).
  • CVE-2026-101918: unauthenticated request can raise an exception that may produce an HTTP 500 response (bsc#1283061).
  • CVE-2026-102267: forwarded credentials may be disclosed or verification keys may be substituted (bsc#1283064).
  • CVE-2026-102268: an attacker who knows the public key can forge authenticated HMAC tokens (bsc#1283065).
  • CVE-2026-102269: raw-token revocation checks can fail to recognize an equivalent modified token (bsc#1283066).
  • CVE-2026-102270: an attacker can cause intensive CPU consumption (bsc#1283067).
  • CVE-2026-102271: an attacker who knows the public key can forge authenticated HMAC tokens (bsc#1283068).
  • CVE-2026-102274: Malformed RSA JWK aborts parsing of an entire JWK Set (bsc#1283071).
  • CVE-2026-102275: an attacker may use a stolen sender-constrained token without the legitimate private key (bsc#1283072).
  • CVE-2026-103001: reused mutable options mapping can cause verification checks bypass on subsequent decode calls (bsc#1283829).
Record
openSUSE-SU-2026:22074-1
Updated
2026-11-02
OSVSUSE-SU-2026:24126-1 No score

Security update for python-PyJWT

This update for python-PyJWT fixes the following issues:

  • CVE-2026-101917: attacker traffic can amplify outbound requests to the configured JWKS endpoint (bsc#1283060).
  • CVE-2026-101918: unauthenticated request can raise an exception that may produce an HTTP 500 response (bsc#1283061).
  • CVE-2026-102267: forwarded credentials may be disclosed or verification keys may be substituted (bsc#1283064).
  • CVE-2026-102268: an attacker who knows the public key can forge authenticated HMAC tokens (bsc#1283065).
  • CVE-2026-102269: raw-token revocation checks can fail to recognize an equivalent modified token (bsc#1283066).
  • CVE-2026-102270: an attacker can cause intensive CPU consumption (bsc#1283067).
  • CVE-2026-102271: an attacker who knows the public key can forge authenticated HMAC tokens (bsc#1283068).
  • CVE-2026-102274: Malformed RSA JWK aborts parsing of an entire JWK Set (bsc#1283071).
  • CVE-2026-102275: an attacker may use a stolen sender-constrained token without the legitimate private key (bsc#1283072).
  • CVE-2026-103001: reused mutable options mapping can cause verification checks bypass on subsequent decode calls (bsc#1283829).
Record
SUSE-SU-2026:24126-1
Updated
2026-11-02
OSVSUSE-SU-2026:24134-1 No score

Security update for python-PyJWT

This update for python-PyJWT fixes the following issues:

  • CVE-2026-101917: attacker traffic can amplify outbound requests to the configured JWKS endpoint (bsc#1283060).
  • CVE-2026-101918: unauthenticated request can raise an exception that may produce an HTTP 500 response (bsc#1283061).
  • CVE-2026-102267: forwarded credentials may be disclosed or verification keys may be substituted (bsc#1283064).
  • CVE-2026-102268: an attacker who knows the public key can forge authenticated HMAC tokens (bsc#1283065).
  • CVE-2026-102269: raw-token revocation checks can fail to recognize an equivalent modified token (bsc#1283066).
  • CVE-2026-102270: an attacker can cause intensive CPU consumption (bsc#1283067).
  • CVE-2026-102271: an attacker who knows the public key can forge authenticated HMAC tokens (bsc#1283068).
  • CVE-2026-102274: Malformed RSA JWK aborts parsing of an entire JWK Set (bsc#1283071).
  • CVE-2026-102275: an attacker may use a stolen sender-constrained token without the legitimate private key (bsc#1283072).
Record
SUSE-SU-2026:24134-1
Updated
2026-11-02
OSVSUSE-SU-2026:24219-1 No score

Security update for python-PyJWT

This update for python-PyJWT fixes the following issues:

  • CVE-2026-101917: attacker traffic can amplify outbound requests to the configured JWKS endpoint (bsc#1283060).
  • CVE-2026-101918: unauthenticated request can raise an exception that may produce an HTTP 500 response (bsc#1283061).
  • CVE-2026-102267: forwarded credentials may be disclosed or verification keys may be substituted (bsc#1283064).
  • CVE-2026-102268: an attacker who knows the public key can forge authenticated HMAC tokens (bsc#1283065).
  • CVE-2026-102269: raw-token revocation checks can fail to recognize an equivalent modified token (bsc#1283066).
  • CVE-2026-102270: an attacker can cause intensive CPU consumption (bsc#1283067).
  • CVE-2026-102271: an attacker who knows the public key can forge authenticated HMAC tokens (bsc#1283068).
  • CVE-2026-102274: Malformed RSA JWK aborts parsing of an entire JWK Set (bsc#1283071).
  • CVE-2026-102275: an attacker may use a stolen sender-constrained token without the legitimate private key (bsc#1283072).
  • CVE-2026-103001: reused mutable options mapping can cause verification checks bypass on subsequent decode calls (bsc#1283829).
Record
SUSE-SU-2026:24219-1
Updated
2026-11-02
OSVSUSE-SU-2026:24377-1 No score

Security update for python-PyJWT

This update for python-PyJWT fixes the following issues:

  • CVE-2026-101917: attacker traffic can amplify outbound requests to the configured JWKS endpoint (bsc#1283060).
  • CVE-2026-101918: unauthenticated request can raise an exception that may produce an HTTP 500 response (bsc#1283061).
  • CVE-2026-102267: forwarded credentials may be disclosed or verification keys may be substituted (bsc#1283064).
  • CVE-2026-102268: an attacker who knows the public key can forge authenticated HMAC tokens (bsc#1283065).
  • CVE-2026-102269: raw-token revocation checks can fail to recognize an equivalent modified token (bsc#1283066).
  • CVE-2026-102270: an attacker can cause intensive CPU consumption (bsc#1283067).
  • CVE-2026-102271: an attacker who knows the public key can forge authenticated HMAC tokens (bsc#1283068).
  • CVE-2026-102274: Malformed RSA JWK aborts parsing of an entire JWK Set (bsc#1283071).
  • CVE-2026-102275: an attacker may use a stolen sender-constrained token without the legitimate private key (bsc#1283072).
  • CVE-2026-103001: reused mutable options mapping can cause verification checks bypass on subsequent decode calls (bsc#1283829).
Record
SUSE-SU-2026:24377-1
Updated
2026-11-02
OSVUSN-8934-1 No score

pyjwt vulnerabilities

Kingsley Olukanni discovered that PyJWT did not properly handle unknown key identifiers when retrieving signing keys. An attacker could possibly use this issue to amplify requests to the configured key endpoint, resulting in a denial of service. This issue only affected Ubuntu 22.04 LTS, Ubuntu 24.04 LTS, Ubuntu 26.04 LTS and Ubuntu 26.10. (CVE-2026-101917)

Ekalabya Ghosh discovered that PyJWT did not properly handle certain recursively nested JSON payloads. An attacker could possibly use this issue to cause an application to fail, resulting in a denial of service. (CVE-2026-101918)

Pedram Hayati discovered that PyJWT did not properly handle malformed RSA keys in a JSON Web Key Set. An attacker could possibly use this issue to cause authentication failures or a denial of service. This issue only affected Ubuntu 22.04 LTS, Ubuntu 24.04 LTS, Ubuntu 26.04 LTS and Ubuntu 26.10. (CVE-2026-102274)

It was discovered that PyJWT did not properly validate certain OKP private key components. An attacker could possibly use this issue to confuse the identity of public and private keys, and use a stolen sender-constrained token without the legitimate private key. This issue only affected Ubuntu 22.04 LTS, Ubuntu 24.04 LTS, Ubuntu 26.04 LTS and Ubuntu 26.10. (CVE-2026-102275)

Record
USN-8934-1
Updated
2026-11-02

Affected products

Affected packages

Affected packages
PackageAffectedFixed
pyjwt
PyPI
2.9.0 to 2.13.0
2.14.0
python-jwt
Azure Linux:3
before 2.15.1-1
2.15.1-1
py3-jwt
Alpaquita:25
2.10.1-r0 up to 2.15.1-r0
2.15.1-r0
py3-jwt
Alpaquita:stream
2.8.0-r1 up to 2.15.1-r0
2.15.1-r0
pyjwt
TuxCare:PyPI
2.10.1 up to 2.10.1.post4+tuxcare, plus listed versions
2.10.1.post1+tuxcare2.10.1.post2+tuxcare2.10.1.post3+tuxcare
2.10.1.post4+tuxcare
pyjwt
TuxCare:PyPI
From an advisory covering 4 CVEs
2.8.0 up to 2.8.0.post6+tuxcare, plus listed versions
2.8.0.post1+tuxcare2.8.0.post2+tuxcare2.8.0.post3+tuxcare2.8.0.post4+tuxcare2.8.0.post5+tuxcare
2.8.0.post6+tuxcare
pyjwt
Debian:12
All versions, plus listed versions
2.10.1-12.10.1-22.10.1-32.10.1-42.11.0-2
Show 8 moreShow less
2.12.1-12.13.0-12.14.0-12.15.0-12.15.1-12.6.0-12.6.0-1+deb12u12.7.0-1
None known
pyjwt
Debian:13
All versions, plus listed versions
2.10.1-22.10.1-2+deb13u12.10.1-32.10.1-42.11.0-2
Show 5 moreShow less
2.12.1-12.13.0-12.14.0-12.15.0-12.15.1-1
None known
pyjwt
Debian:14
before 2.14.0-1, plus listed versions
2.10.1-22.10.1-32.10.1-42.11.0-22.12.1-12.13.0-1
2.14.0-1
pyjwt
PyPI
2.9.0 up to 2.14.0, plus listed versions
2.10.02.10.12.11.02.12.02.12.12.13.0
2.14.0
Show 17 moreShow less
Affected packages
PackageAffectedFixed
python-PyJWT
SUSE:Linux Micro 6.2
From an advisory covering 10 CVEs
before 2.12.1-160000.3.1
2.12.1-160000.3.1
python-PyJWT
SUSE:Linux Micro 6.0
From an advisory covering 9 CVEs
before 2.9.0-159998.1.1
2.9.0-159998.1.1
python-PyJWT
SUSE:Linux Enterprise Server 16.0
From an advisory covering 10 CVEs
before 2.12.1-160000.3.1
2.12.1-160000.3.1
python-PyJWT
SUSE:Linux Enterprise Server for SAP applications 16.0
From an advisory covering 10 CVEs
before 2.12.1-160000.3.1
2.12.1-160000.3.1
python-PyJWT
SUSE:Linux Micro 6.1
From an advisory covering 10 CVEs
before 2.12.1-slfo.1.1_3.1
2.12.1-slfo.1.1_3.1
pyjwt
Ubuntu:22.04:LTS
before 2.3.0-1ubuntu0.6, plus listed versions
1.7.1-2ubuntu22.1.0-12.3.0-12.3.0-1ubuntu0.12.3.0-1ubuntu0.22.3.0-1ubuntu0.32.3.0-1ubuntu0.42.3.0-1ubuntu0.5
2.3.0-1ubuntu0.6
pyjwt
Ubuntu:24.04:LTS
before 2.7.0-1ubuntu0.4, plus listed versions
2.7.0-12.7.0-1ubuntu0.12.7.0-1ubuntu0.22.7.0-1ubuntu0.3
2.7.0-1ubuntu0.4
pyjwt
Ubuntu:26.10
before 2.13.0-1ubuntu1.1, plus listed versions
2.10.1-4ubuntu12.12.1-12.13.0-12.13.0-1ubuntu1
2.13.0-1ubuntu1.1
pyjwt
Ubuntu:26.04:LTS
before 2.10.1-4ubuntu1.3, plus listed versions
2.10.1-22.10.1-32.10.1-3build12.10.1-42.10.1-4ubuntu12.10.1-4ubuntu1.12.10.1-4ubuntu1.2
2.10.1-4ubuntu1.3
pyjwt
Ubuntu:Pro:16.04:LTS
From an advisory covering 4 CVEs
before 1.3.0-1ubuntu0.1+esm4, plus listed versions
1.0.0-0ubuntu11.3.0-11.3.0-1ubuntu0.11.3.0-1ubuntu0.1+esm11.3.0-1ubuntu0.1+esm21.3.0-1ubuntu0.1+esm3
1.3.0-1ubuntu0.1+esm4
pyjwt
Ubuntu:Pro:18.04:LTS
From an advisory covering 4 CVEs
before 1.5.3+ds1-1ubuntu0.1+esm4, plus listed versions
1.4.2-1.11.5.3+ds1-11.5.3+ds1-1ubuntu0.11.5.3+ds1-1ubuntu0.1+esm11.5.3+ds1-1ubuntu0.1+esm21.5.3+ds1-1ubuntu0.1+esm3
1.5.3+ds1-1ubuntu0.1+esm4
pyjwt
Ubuntu:Pro:20.04:LTS
From an advisory covering 4 CVEs
before 1.7.1-2ubuntu2.1+esm4, plus listed versions
1.7.0-21.7.1-11.7.1-2ubuntu11.7.1-2ubuntu21.7.1-2ubuntu2.11.7.1-2ubuntu2.1+esm11.7.1-2ubuntu2.1+esm21.7.1-2ubuntu2.1+esm3
1.7.1-2ubuntu2.1+esm4
pyjwt
Ubuntu:22.04:LTS
From an advisory covering 4 CVEs
before 2.3.0-1ubuntu0.6, plus listed versions
1.7.1-2ubuntu22.1.0-12.3.0-12.3.0-1ubuntu0.12.3.0-1ubuntu0.22.3.0-1ubuntu0.32.3.0-1ubuntu0.42.3.0-1ubuntu0.5
2.3.0-1ubuntu0.6
pyjwt
Ubuntu:24.04:LTS
From an advisory covering 4 CVEs
before 2.7.0-1ubuntu0.4, plus listed versions
2.7.0-12.7.0-1ubuntu0.12.7.0-1ubuntu0.22.7.0-1ubuntu0.3
2.7.0-1ubuntu0.4
pyjwt
Ubuntu:26.10
From an advisory covering 4 CVEs
before 2.13.0-1ubuntu1.1, plus listed versions
2.10.1-4ubuntu12.12.1-12.13.0-12.13.0-1ubuntu1
2.13.0-1ubuntu1.1
pyjwt
Ubuntu:26.04:LTS
From an advisory covering 4 CVEs
before 2.10.1-4ubuntu1.3, plus listed versions
2.10.1-22.10.1-32.10.1-3build12.10.1-42.10.1-4ubuntu12.10.1-4ubuntu1.12.10.1-4ubuntu1.2
2.10.1-4ubuntu1.3
python-PyJWT
openSUSE:Leap 16.0
From an advisory covering 10 CVEs
before 2.12.1-160000.3.1
2.12.1-160000.3.1

History

History
RecordedChangedSources
affected, aliases, referencesOSV
affected, facts
affected, aliasesOSV
first indexedCVE List, EUVD, GitHub Advisories, NVD, OSV

Dates are when Every CVE recorded each change. Upstream dates may differ.

In short

CVE-2026-102274 is a medium vulnerability (CVSS 5.9) in Jpadilla Pyjwt, published September 28, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.55%, the 46th percentile. Fixed in pyjwt 2.14.0.

References

Show 34 moreShow less
This page doesn't list everything

Left out here: the rest of 3 source descriptions. The JSON record has them.

MoveEnter Open