CVE-2026-102268
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.
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
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 Critical
CVSS: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 Critical
CVSS: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.decodeallow-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-
PyJWKpath, in a byte-form thatcryptography's loader accepts but PyJWT'sis_pem_formatregex 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 Critical
CVSS: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 Critical
CVSS: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 Critical
CVSS: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 Critical
CVSS: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 Critical
CVSS: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.decodeallow-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-
PyJWKpath, in a byte-form thatcryptography's loader accepts but PyJWT'sis_pem_formatregex 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 Critical
CVSS: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 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-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.decodeallow-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-
PyJWKpath, in a byte-form thatcryptography's loader accepts but PyJWT'sis_pem_formatregex 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 Critical
CVSS: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 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-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 Critical
CVSS: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
| Package | Affected | Fixed |
|---|---|---|
pyjwtPyPI |
through 2.13.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 135 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 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 |
pyjwtTuxCare: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 |
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 |
before 2.14.0, plus listed versions 0.1.10.1.20.1.30.1.40.1.5 Show 45 moreShow less0.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-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 |
python-PyJWTSUSE: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 |
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:Tumbleweed From an advisory covering 9 CVEs |
before 2.15.1-1.1 | 2.15.1-1.1 |
python-PyJWTopenSUSE: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.
| Source | Link | Date |
|---|---|---|
| PoC in GitHub | covepseng/cve-2026-102268-poc | 2026-10-02 |
History
| Recorded | Changed | Sources |
|---|---|---|
| affected, aliases, references | OSV | |
| affected | OSV | |
| affected, aliases, references | OSV | |
| affected, aliases, references | OSV | |
| affected, aliases, references | OSV | |
| affected, aliases, facts, references | OSV | |
| first indexed | CVE 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
github.com/jpadilla/pyjwt/security/advisories/GHSA-ffc3-869f-jxw9
github.com/jpadilla/pyjwt/commit/8b4e233a22206b34ec1186e912e75c0b2396ac07
github.com/jpadilla/pyjwt/releases/tag/2.14.0
nvd.nist.gov/vuln/detail/CVE-2026-102268
github.com/advisories/GHSA-ffc3-869f-jxw9
access.redhat.com/errata/RHSA-2026:94500
Show 68 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-102268
github.com/CVEProject/cvelistV5/tree/main/cves/2026/102xxx/CVE-2026-102268.json
security-tracker.debian.org/tracker/CVE-2026-102268
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-102271
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
suse.com/support/update/announcement/2026/suse-su-20265093-1
ubuntu.com/security/CVE-2026-102268
cve.org/CVERecord?id=CVE-2026-102268
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-102271
ubuntu.com/security/CVE-2026-102272
ubuntu.com/security/CVE-2026-102273
suse.com/security/cve/CVE-2026-102266
suse.com/security/cve/CVE-2026-102272
Left out here: 5 versions and the rest of 3 source descriptions. The JSON record has them.