Every CVE Search/ Get API key

CVE-2026-102268

PyJWT: Asymmetric-PEM detection bypass: whitespace/line-ending-mutated public keys skip the HS/asymmetric confusion guard

9.1 CriticalPublic exploitFix available

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.

Attack profile

How easy it is to exploit

Attack vector
Network
Complexity
Low
Privileges needed
None
User interaction
None

What an attacker can affect

Confidentiality
High
Integrity
High
Availability
None

Exploit likelihood

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

What each source reports

CVE List Score used 9.1

PyJWT: Asymmetric-PEM detection bypass: whitespace/line-ending-mutated public keys skip the HS/asymmetric confusion guard

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.

Record
CVE-2026-102268
CVSS 3.1
9.1 CriticalCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N
Weakness
CWE-347
Updated
2026-11-02
EUVDEUVD-2026-88535 9.1

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.

Record
EUVD-2026-88535
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
GitHub AdvisoriesGHSA-ffc3-869f-jxw9 9.1

PyJWT: Asymmetric-PEM detection bypass: whitespace/line-ending-mutated public keys skip the HS/asymmetric confusion guard

Prerequisites (both conditions must hold; both are deployment properties, not attacker-controlled at request time):

  • The jwt.decode allow-list mixes an HMAC algorithm with an asymmetric one, e.g. algorithms=["ES256", "HS256"] (the RFC 8725 footgun the guard exists to backstop).
  • The verification key is passed as raw PEM text/bytes on the non-PyJWK path, in a byte-form that cryptography's loader accepts but PyJWT's is_pem_format regex does not recognize (marker-adjacent whitespace/indentation, CR-only line terminators, or the PEM folded to a single line). Such forms arise naturally from an indented YAML/JSON block, a single-line environment variable or JSON string, or a CR/LF round-trip through config tooling.

The attacker additionally needs the public verification key, which is public by definition, and cryptography must be installed.

The fix for CVE-2022-29217 rejects an asymmetric key handed to an HMAC algorithm, but only when is_pem_format() recognizes the key as PEM. That recognizer accepts strictly fewer byte-forms than the loader that later parses the key, so a PEM the guard misses still loads as a valid public key and is then used as an HMAC secret. This is an incomplete-guard bypass of the CVE-2022-29217 family.

Summary

A PEM public key with marker-adjacent whitespace, CR-only line terminators, or folded to a single line makes PyJWT's is_pem_format() return False while cryptography.load_pem_public_key() accepts the identical bytes. The asymmetric-key rejection in HMACAlgorithm.prepare_key is skipped, the public key becomes the HMAC secret, and an attacker who knows the public key mints a valid HS256 token — universal forgery — whenever the verify allow-list mixes an HMAC and an asymmetric algorithm.

Details

At jwt/algorithms.py:331-335, HMACAlgorithm.prepare_key contains the sole family-mismatch guard:

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."
    )

If neither predicate fires, :357 returns key_bytes unchanged — the PEM text is used directly as the HMAC secret.

is_pem_format (jwt/utils.py:116-127) is bool(_PEM_RE.search(key)), where _PEM_RE requires ----[- ]BEGIN (...)[- ]----\r?\n, then .+?\r?\n, then the END marker. The LF in each \r?\n is mandatory, the markers are anchored directly after a newline, and only [- ] is tolerated adjacent to them — not arbitrary whitespace. So a key with a tab/space before the END marker, with bare \r terminators, or folded onto one line is not recognized as PEM. cryptography's load_pem_public_key is tolerant of exactly these forms and still returns the key.

Reach: jwt/api_jws.py:386 performs the allow-list check (passes when HS256 is in the list) and takes the non-PyJWK branch to alg_obj.prepare_key(key) at :407. The mismatch guard above is the only thing standing between a mixed allow-list and using the public key as an HMAC secret.

PoC

Vulnerable path: jwt/algorithms.py:331 (guard gated on is_pem_format) -> is_pem_format returns False for a loader-accepted PEM -> jwt/algorithms.py:357 returns the public-key bytes as the HMAC secret -> HS256 verification succeeds.

Reproduced on PyJWT 2.13.0 (commit 7144e453) with cryptography 49.0.0, using only the public API. For each of an EC (ES256) and an RSA-2048 (RS256) key: start from the correct public-key PEM, apply a mutation, confirm is_pem_format now returns False while cryptography still loads the bytes, then verify a token signed alg=HS256 with the public-key text as the HMAC secret, under algorithms=["ES256","HS256"] (resp. ["RS256","HS256"]).

Observed output:

pyjwt 2.13.0
  ec  canonical (control)                is_pem_format=True  crypto_loads=True  forgery=BLOCKED:InvalidKeyError
  ec  marker-adjacent (tab before…
Record
GHSA-ffc3-869f-jxw9
CVSS 3.1
9.1 CriticalCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N
Weakness
CWE-347
Updated
2026-11-02
NVD 9.1

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.

Record
CVE-2026-102268
CVSS 3.1
9.1 CriticalCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N
Weakness
CWE-347
Updated
2026-11-02
OSVBELL-CVE-2026-102268 9.1
Record
BELL-CVE-2026-102268
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-07
OSV 9.1

PyJWT: Asymmetric-PEM detection bypass: whitespace/line-ending-mutated public keys skip the HS/asymmetric confusion guard

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.

Record
CVE-2026-102268
CVSS 3.1
9.1 CriticalCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N
Weakness
CWE-347
Updated
2026-11-04
Show 28 moreShow less
OSVDEBIAN-CVE-2026-102268 9.1

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.

Record
DEBIAN-CVE-2026-102268
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
OSVGHSA-ffc3-869f-jxw9 9.1

PyJWT: Asymmetric-PEM detection bypass: whitespace/line-ending-mutated public keys skip the HS/asymmetric confusion guard

Prerequisites (both conditions must hold; both are deployment properties, not attacker-controlled at request time):

  • The jwt.decode allow-list mixes an HMAC algorithm with an asymmetric one, e.g. algorithms=["ES256", "HS256"] (the RFC 8725 footgun the guard exists to backstop).
  • The verification key is passed as raw PEM text/bytes on the non-PyJWK path, in a byte-form that cryptography's loader accepts but PyJWT's is_pem_format regex does not recognize (marker-adjacent whitespace/indentation, CR-only line terminators, or the PEM folded to a single line). Such forms arise naturally from an indented YAML/JSON block, a single-line environment variable or JSON string, or a CR/LF round-trip through config tooling.

The attacker additionally needs the public verification key, which is public by definition, and cryptography must be installed.

The fix for CVE-2022-29217 rejects an asymmetric key handed to an HMAC algorithm, but only when is_pem_format() recognizes the key as PEM. That recognizer accepts strictly fewer byte-forms than the loader that later parses the key, so a PEM the guard misses still loads as a valid public key and is then used as an HMAC secret. This is an incomplete-guard bypass of the CVE-2022-29217 family.

Summary

A PEM public key with marker-adjacent whitespace, CR-only line terminators, or folded to a single line makes PyJWT's is_pem_format() return False while cryptography.load_pem_public_key() accepts the identical bytes. The asymmetric-key rejection in HMACAlgorithm.prepare_key is skipped, the public key becomes the HMAC secret, and an attacker who knows the public key mints a valid HS256 token — universal forgery — whenever the verify allow-list mixes an HMAC and an asymmetric algorithm.

Details

At jwt/algorithms.py:331-335, HMACAlgorithm.prepare_key contains the sole family-mismatch guard:

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."
    )

If neither predicate fires, :357 returns key_bytes unchanged — the PEM text is used directly as the HMAC secret.

is_pem_format (jwt/utils.py:116-127) is bool(_PEM_RE.search(key)), where _PEM_RE requires ----[- ]BEGIN (...)[- ]----\r?\n, then .+?\r?\n, then the END marker. The LF in each \r?\n is mandatory, the markers are anchored directly after a newline, and only [- ] is tolerated adjacent to them — not arbitrary whitespace. So a key with a tab/space before the END marker, with bare \r terminators, or folded onto one line is not recognized as PEM. cryptography's load_pem_public_key is tolerant of exactly these forms and still returns the key.

Reach: jwt/api_jws.py:386 performs the allow-list check (passes when HS256 is in the list) and takes the non-PyJWK branch to alg_obj.prepare_key(key) at :407. The mismatch guard above is the only thing standing between a mixed allow-list and using the public key as an HMAC secret.

PoC

Vulnerable path: jwt/algorithms.py:331 (guard gated on is_pem_format) -> is_pem_format returns False for a loader-accepted PEM -> jwt/algorithms.py:357 returns the public-key bytes as the HMAC secret -> HS256 verification succeeds.

Reproduced on PyJWT 2.13.0 (commit 7144e453) with cryptography 49.0.0, using only the public API. For each of an EC (ES256) and an RSA-2048 (RS256) key: start from the correct public-key PEM, apply a mutation, confirm is_pem_format now returns False while cryptography still loads the bytes, then verify a token signed alg=HS256 with the public-key text as the HMAC secret, under algorithms=["ES256","HS256"] (resp. ["RS256","HS256"]).

Observed output:

pyjwt 2.13.0
  ec  canonical (control)                is_pem_format=True  crypto_loads=True  forgery=BLOCKED:InvalidKeyError
  ec  marker-adjacent (tab before…
Record
GHSA-ffc3-869f-jxw9
CVSS 3.1
9.1 CriticalCVSS:3.1/AV:N/AC:L/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-4145 9.1

PyJWT: Asymmetric-PEM detection bypass: whitespace/line-ending-mutated public keys skip the HS/asymmetric confusion guard

Prerequisites (both conditions must hold; both are deployment properties, not attacker-controlled at request time):

  • The jwt.decode allow-list mixes an HMAC algorithm with an asymmetric one, e.g. algorithms=["ES256", "HS256"] (the RFC 8725 footgun the guard exists to backstop).
  • The verification key is passed as raw PEM text/bytes on the non-PyJWK path, in a byte-form that cryptography's loader accepts but PyJWT's is_pem_format regex does not recognize (marker-adjacent whitespace/indentation, CR-only line terminators, or the PEM folded to a single line). Such forms arise naturally from an indented YAML/JSON block, a single-line environment variable or JSON string, or a CR/LF round-trip through config tooling.

The attacker additionally needs the public verification key, which is public by definition, and cryptography must be installed.

The fix for CVE-2022-29217 rejects an asymmetric key handed to an HMAC algorithm, but only when is_pem_format() recognizes the key as PEM. That recognizer accepts strictly fewer byte-forms than the loader that later parses the key, so a PEM the guard misses still loads as a valid public key and is then used as an HMAC secret. This is an incomplete-guard bypass of the CVE-2022-29217 family.

Summary

A PEM public key with marker-adjacent whitespace, CR-only line terminators, or folded to a single line makes PyJWT's is_pem_format() return False while cryptography.load_pem_public_key() accepts the identical bytes. The asymmetric-key rejection in HMACAlgorithm.prepare_key is skipped, the public key becomes the HMAC secret, and an attacker who knows the public key mints a valid HS256 token — universal forgery — whenever the verify allow-list mixes an HMAC and an asymmetric algorithm.

Details

At jwt/algorithms.py:331-335, HMACAlgorithm.prepare_key contains the sole family-mismatch guard:

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."
    )

If neither predicate fires, :357 returns key_bytes unchanged — the PEM text is used directly as the HMAC secret.

is_pem_format (jwt/utils.py:116-127) is bool(_PEM_RE.search(key)), where _PEM_RE requires ----[- ]BEGIN (...)[- ]----\r?\n, then .+?\r?\n, then the END marker. The LF in each \r?\n is mandatory, the markers are anchored directly after a newline, and only [- ] is tolerated adjacent to them — not arbitrary whitespace. So a key with a tab/space before the END marker, with bare \r terminators, or folded onto one line is not recognized as PEM. cryptography's load_pem_public_key is tolerant of exactly these forms and still returns the key.

Reach: jwt/api_jws.py:386 performs the allow-list check (passes when HS256 is in the list) and takes the non-PyJWK branch to alg_obj.prepare_key(key) at :407. The mismatch guard above is the only thing standing between a mixed allow-list and using the public key as an HMAC secret.

PoC

Vulnerable path: jwt/algorithms.py:331 (guard gated on is_pem_format) -> is_pem_format returns False for a loader-accepted PEM -> jwt/algorithms.py:357 returns the public-key bytes as the HMAC secret -> HS256 verification succeeds.

Reproduced on PyJWT 2.13.0 (commit 7144e453) with cryptography 49.0.0, using only the public API. For each of an EC (ES256) and an RSA-2048 (RS256) key: start from the correct public-key PEM, apply a mutation, confirm is_pem_format now returns False while cryptography still loads the bytes, then verify a token signed alg=HS256 with the public-key text as the HMAC secret, under algorithms=["ES256","HS256"] (resp. ["RS256","HS256"]).

Observed output:

pyjwt 2.13.0
  ec  canonical (control)                is_pem_format=True  crypto_loads=True  forgery=BLOCKED:InvalidKeyError
  ec  marker-adjacent (tab before…
Record
PYSEC-2026-4145
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
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-102268 9.1

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.

Record
UBUNTU-CVE-2026-102268
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
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-104991 No score

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

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.

Record
AZL-104991
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-1791271338 No score

TuxCare security update for pyjwt (7 CVEs)

TuxCare rebuilt pyjwt to address 7 CVEs. Fixed in 2.3.0.post4+tuxcare.

Record
CLSA-2026-1791271338
Updated
2026-11-02
OSVCLSA-2026-1791272933 No score

TuxCare security update for pyjwt (3 CVEs)

TuxCare rebuilt pyjwt to address 3 CVEs. Fixed in 1.7.1.post4+tuxcare.

Record
CLSA-2026-1791272933
Updated
2026-11-02
OSVopenSUSE-SU-2026:11994-1 No score

python313-PyJWT-2.15.1-1.1 on GA media

These are all security issues fixed in the python313-PyJWT-2.15.1-1.1 package on the GA media of openSUSE Tumbleweed.

Record
openSUSE-SU-2026:11994-1
Updated
2026-11-02
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-102268 No score

CVE-2026-102268 in pyjwt - Patched by Root

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

Record
ROOT-APP-PYPI-CVE-2026-102268
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
OSVSUSE-SU-2026:5093-1 No score

Security update for python-PyJWT

This update for python-PyJWT fixes the following issues:

  • CVE-2026-102268: an attacker who knows the public key can forge authenticated HMAC tokens (bsc#1283065).
  • CVE-2026-102270: an attacker can cause intensive CPU consumption (bsc#1283067).
Record
SUSE-SU-2026:5093-1
Updated
2026-11-04
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
through 2.13.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 135 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 7 CVEs
2.3.0 up to 2.3.0.post4+tuxcare, plus listed versions
2.3.0.post1+tuxcare2.3.0.post2+tuxcare2.3.0.post3+tuxcare
2.3.0.post4+tuxcare
pyjwt
TuxCare:PyPI
From an advisory covering 3 CVEs
1.7.1 up to 1.7.1.post4+tuxcare, plus listed versions
1.7.1.post1+tuxcare1.7.1.post2+tuxcare1.7.1.post3+tuxcare
1.7.1.post4+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
before 2.14.0, plus listed versions
0.1.10.1.20.1.30.1.40.1.5
Show 45 moreShow less
0.1.60.1.70.1.80.1.90.2.00.2.10.2.30.3.00.3.10.3.20.4.00.4.10.4.20.4.31.0.01.0.11.1.01.3.01.4.01.4.11.4.21.5.01.5.11.5.21.5.31.6.01.6.11.6.31.6.41.7.01.7.12.0.02.0.0a12.0.0a22.0.12.1.02.10.02.10.12.11.02.12.02.12.12.13.02.2.02.3.02.4.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
python-PyJWT
SUSE:Linux Enterprise Module for Public Cloud 12
From an advisory covering 2 CVEs
before 1.5.3-3.22.1
1.5.3-3.22.1
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:Tumbleweed
From an advisory covering 9 CVEs
before 2.15.1-1.1
2.15.1-1.1
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

Public exploits

Links only. Every CVE stores no exploit code.

Public exploits
SourceLinkDate
PoC in GitHubcovepseng/cve-2026-102268-poc2026-10-02

History

History
RecordedChangedSources
affected, aliases, referencesOSV
affectedOSV
affected, aliases, referencesOSV
affected, aliases, referencesOSV
affected, aliases, referencesOSV
affected, aliases, facts, referencesOSV
first indexedCVE List, EUVD, GitHub Advisories, NVD, OSV, PoC in GitHub

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

In short

CVE-2026-102268 is a critical vulnerability (CVSS 9.1) in Jpadilla Pyjwt, published September 28, 2026. Public exploit code exists. EPSS puts the chance of exploitation in the next 30 days at 0.24%, the 14th percentile. Fixed in pyjwt 2.14.0.

References

Show 68 moreShow less
This page doesn't list everything

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

MoveEnter Open