CVE-2026-102266
PyJWK accepts empty HMAC keys, bypassing PyJWT's empty-key validation
PyJWT is a Python implementation of JSON Web Token standards. From 2.13.0 until 2.14.0, HMACAlgorithm.from_jwk is affected because PyJWK verification path used the decoded key without applying prepare_key validation. This occurs when a trusted JWK Set contains an oct entry with an empty k value. As a result, an attacker signs an HMAC token with the same zero-length key accepted by PyJWT. Consequently, forged token can carry arbitrary authenticated claims. This issue is fixed in version 2.14.0.
Attack profile
How easy it is to exploit
- Attack vector
- Network
- Complexity
- High
- Privileges needed
- None
- User interaction
- None
What an attacker can affect
- Confidentiality
- High
- Integrity
- High
- Availability
- None
Exploit likelihood
What each source reports
CVE List Score used
7.4
PyJWK accepts empty HMAC keys, bypassing PyJWT's empty-key validation
PyJWT is a Python implementation of JSON Web Token standards. From 2.13.0 until 2.14.0, HMACAlgorithm.from_jwk is affected because PyJWK verification path used the decoded key without applying prepare_key validation. This occurs when a trusted JWK Set contains an oct entry with an empty k value. As a result, an attacker signs an HMAC token with the same zero-length key accepted by PyJWT. Consequently, forged token can carry arbitrary authenticated claims. This issue is fixed in version 2.14.0.
- Record
CVE-2026-102266- CVSS 3.1
- 7.4 High
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N - Weakness
- CWE-347
- Updated
- 2026-11-02
EUVDEUVD-2026-88484
7.4
PyJWT is a Python implementation of JSON Web Token standards. From 2.13.0 until 2.14.0, HMACAlgorithm.from_jwk is affected because PyJWK verification path used the decoded key without applying prepare_key validation. This occurs when a trusted JWK Set contains an oct entry with an empty k value. As a result, an attacker signs an HMAC token with the same zero-length key accepted by PyJWT. Consequently, forged token can carry arbitrary authenticated claims. This issue is fixed in version 2.14.0.
- Record
EUVD-2026-88484- CVSS 3.1
- 7.4 High
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N - Updated
- 2026-11-02
GitHub AdvisoriesGHSA-9j54-fg26-wv3r
7.4
PyJWT: PyJWK accepts empty HMAC keys, bypassing PyJWT's empty-key validation
Summary
A service that verifies HS256 tokens using an empty oct JWK through PyJWK, including a PyJWK obtained from PyJWKSet, can therefore accept attacker-generated tokens as authenticated.
PyJWT 2.13.0 rejects an empty HMAC key when it is supplied through the raw str/bytes key path, but accepts the same zero-length key when it is supplied as a symmetric PyJWK.
An oct JWK containing an empty Base64URL key value:
{"kty":"oct","k":""}
is decoded to b"". During signature verification, the PyJWK path uses this decoded value directly and does not invoke the empty-key validation in HMACAlgorithm.prepare_key. With the default enforce_minimum_key_length=False, PyJWT emits a warning and proceeds with HMAC verification using the zero-length key.
An attacker can independently calculate HMAC-SHA256(b"", signing_input) and create valid HS256 JWTs with arbitrary claims. A service that verifies HS256 tokens using an empty oct JWK through PyJWK or PyJWKSet can therefore accept attacker-generated tokens as authenticated.
The application must already contain an empty HMAC JWK, for example because a missing Base64URL configuration or secret-manager value was serialized as "k": "". The attacker does not need control of the JWK/JWKS source, a signing oracle, a private key, or a mixed algorithm allow-list.
Details
The vulnerability is caused by inconsistent validation of the same HMAC key material depending on whether it enters PyJWT as a raw key or through PyJWK.
Raw empty HMAC keys are rejected
[HMACAlgorithm.prepare_key](https://github.com/jpadilla/pyjwt/blob/7144e4534c34810f4525dc4578a32addd8212cff/jwt/algorithms.py#L325-L357) rejects an empty HMAC key.
As a result, an empty raw key is rejected in PyJWT 2.13.0:
jwt.decode(token, b"", algorithms=["HS256"])
with InvalidKeyError.
Empty oct JWKs decode to the same key but are accepted
[HMACAlgorithm.from_jwk](https://github.com/jpadilla/pyjwt/blob/7144e4534c34810f4525dc4578a32addd8212cff/jwt/algorithms.py#L379-L394) handles symmetric JWKs.
For:
{
"kty": "oct",
"k": ""
}
the empty Base64URL value is decoded to:
b""
and returned without an emptiness check.
[PyJWK.__init__](https://github.com/jpadilla/pyjwt/blob/7144e4534c34810f4525dc4578a32addd8212cff/jwt/api_jwk.py#L73-L82) then stores the decoded value in self.key.
The resulting PyJWK therefore contains the same zero-length byte string rejected by the raw-key path.
PyJWK verification bypasses the raw-key validation
[PyJWS._verify_signature](https://github.com/jpadilla/pyjwt/blob/7144e4534c34810f4525dc4578a32addd8212cff/jwt/api_jws.py#L389-L416) has a separate path for PyJWK objects.
When a PyJWK is supplied, verification uses its already-decoded key directly:
prepared_key = key.key
The value is not passed through:
alg_obj.prepare_key(key.key)
so the empty-key check in HMACAlgorithm.prepare_key is never reached.
The minimum HMAC key-length check does not reject the key under the default configuration. With enforce_minimum_key_length=False, PyJWT emits a warning and continues signature verification.
The verifier therefore receives:
b""
as the HS256 key.
This creates the following difference for identical cryptographic key material:
raw b""
-> HMACAlgorithm.prepare_key
-> InvalidKeyError
{"kty":"oct","k":""}
-> HMACAlgorithm.from_jwk
-> b""
-> PyJWK.key
-> PyJWS._verify_signature…
- Record
GHSA-9j54-fg26-wv3r- CVSS 3.1
- 7.4 High
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N - Weakness
- CWE-347
- Updated
- 2026-11-02
NVD
7.4
PyJWT is a Python implementation of JSON Web Token standards. From 2.13.0 until 2.14.0, HMACAlgorithm.from_jwk is affected because PyJWK verification path used the decoded key without applying prepare_key validation. This occurs when a trusted JWK Set contains an oct entry with an empty k value. As a result, an attacker signs an HMAC token with the same zero-length key accepted by PyJWT. Consequently, forged token can carry arbitrary authenticated claims. This issue is fixed in version 2.14.0.
- Record
CVE-2026-102266- CVSS 3.1
- 7.4 High
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N - 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-102266
9.1
- Record
BELL-CVE-2026-102266- 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
7.4
PyJWK accepts empty HMAC keys, bypassing PyJWT's empty-key validation
PyJWT is a Python implementation of JSON Web Token standards. From 2.13.0 until 2.14.0, HMACAlgorithm.from_jwk is affected because PyJWK verification path used the decoded key without applying prepare_key validation. This occurs when a trusted JWK Set contains an oct entry with an empty k value. As a result, an attacker signs an HMAC token with the same zero-length key accepted by PyJWT. Consequently, forged token can carry arbitrary authenticated claims. This issue is fixed in version 2.14.0.
- Record
CVE-2026-102266- CVSS 3.1
- 7.4 High
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N - Weakness
- CWE-347
- Updated
- 2026-11-04
Show 13 moreShow less
OSVDEBIAN-CVE-2026-102266
9.1
PyJWT is a Python implementation of JSON Web Token standards. From 2.13.0 until 2.14.0, HMACAlgorithm.from_jwk is affected because PyJWK verification path used the decoded key without applying prepare_key validation. This occurs when a trusted JWK Set contains an oct entry with an empty k value. As a result, an attacker signs an HMAC token with the same zero-length key accepted by PyJWT. Consequently, forged token can carry arbitrary authenticated claims. This issue is fixed in version 2.14.0.
- Record
DEBIAN-CVE-2026-102266- 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-9j54-fg26-wv3r
7.4
PyJWT: PyJWK accepts empty HMAC keys, bypassing PyJWT's empty-key validation
Summary
A service that verifies HS256 tokens using an empty oct JWK through PyJWK, including a PyJWK obtained from PyJWKSet, can therefore accept attacker-generated tokens as authenticated.
PyJWT 2.13.0 rejects an empty HMAC key when it is supplied through the raw str/bytes key path, but accepts the same zero-length key when it is supplied as a symmetric PyJWK.
An oct JWK containing an empty Base64URL key value:
{"kty":"oct","k":""}
is decoded to b"". During signature verification, the PyJWK path uses this decoded value directly and does not invoke the empty-key validation in HMACAlgorithm.prepare_key. With the default enforce_minimum_key_length=False, PyJWT emits a warning and proceeds with HMAC verification using the zero-length key.
An attacker can independently calculate HMAC-SHA256(b"", signing_input) and create valid HS256 JWTs with arbitrary claims. A service that verifies HS256 tokens using an empty oct JWK through PyJWK or PyJWKSet can therefore accept attacker-generated tokens as authenticated.
The application must already contain an empty HMAC JWK, for example because a missing Base64URL configuration or secret-manager value was serialized as "k": "". The attacker does not need control of the JWK/JWKS source, a signing oracle, a private key, or a mixed algorithm allow-list.
Details
The vulnerability is caused by inconsistent validation of the same HMAC key material depending on whether it enters PyJWT as a raw key or through PyJWK.
Raw empty HMAC keys are rejected
[HMACAlgorithm.prepare_key](https://github.com/jpadilla/pyjwt/blob/7144e4534c34810f4525dc4578a32addd8212cff/jwt/algorithms.py#L325-L357) rejects an empty HMAC key.
As a result, an empty raw key is rejected in PyJWT 2.13.0:
jwt.decode(token, b"", algorithms=["HS256"])
with InvalidKeyError.
Empty oct JWKs decode to the same key but are accepted
[HMACAlgorithm.from_jwk](https://github.com/jpadilla/pyjwt/blob/7144e4534c34810f4525dc4578a32addd8212cff/jwt/algorithms.py#L379-L394) handles symmetric JWKs.
For:
{
"kty": "oct",
"k": ""
}
the empty Base64URL value is decoded to:
b""
and returned without an emptiness check.
[PyJWK.__init__](https://github.com/jpadilla/pyjwt/blob/7144e4534c34810f4525dc4578a32addd8212cff/jwt/api_jwk.py#L73-L82) then stores the decoded value in self.key.
The resulting PyJWK therefore contains the same zero-length byte string rejected by the raw-key path.
PyJWK verification bypasses the raw-key validation
[PyJWS._verify_signature](https://github.com/jpadilla/pyjwt/blob/7144e4534c34810f4525dc4578a32addd8212cff/jwt/api_jws.py#L389-L416) has a separate path for PyJWK objects.
When a PyJWK is supplied, verification uses its already-decoded key directly:
prepared_key = key.key
The value is not passed through:
alg_obj.prepare_key(key.key)
so the empty-key check in HMACAlgorithm.prepare_key is never reached.
The minimum HMAC key-length check does not reject the key under the default configuration. With enforce_minimum_key_length=False, PyJWT emits a warning and continues signature verification.
The verifier therefore receives:
b""
as the HS256 key.
This creates the following difference for identical cryptographic key material:
raw b""
-> HMACAlgorithm.prepare_key
-> InvalidKeyError
{"kty":"oct","k":""}
-> HMACAlgorithm.from_jwk
-> b""
-> PyJWK.key
-> PyJWS._verify_signature…
- Record
GHSA-9j54-fg26-wv3r- CVSS 3.1
- 7.4 High
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N - Weakness
- CWE-347
- Updated
- 2026-11-02
OSVPYSEC-2026-4143
7.4
PyJWT: PyJWK accepts empty HMAC keys, bypassing PyJWT's empty-key validation
Summary
A service that verifies HS256 tokens using an empty oct JWK through PyJWK, including a PyJWK obtained from PyJWKSet, can therefore accept attacker-generated tokens as authenticated.
PyJWT 2.13.0 rejects an empty HMAC key when it is supplied through the raw str/bytes key path, but accepts the same zero-length key when it is supplied as a symmetric PyJWK.
An oct JWK containing an empty Base64URL key value:
{"kty":"oct","k":""}
is decoded to b"". During signature verification, the PyJWK path uses this decoded value directly and does not invoke the empty-key validation in HMACAlgorithm.prepare_key. With the default enforce_minimum_key_length=False, PyJWT emits a warning and proceeds with HMAC verification using the zero-length key.
An attacker can independently calculate HMAC-SHA256(b"", signing_input) and create valid HS256 JWTs with arbitrary claims. A service that verifies HS256 tokens using an empty oct JWK through PyJWK or PyJWKSet can therefore accept attacker-generated tokens as authenticated.
The application must already contain an empty HMAC JWK, for example because a missing Base64URL configuration or secret-manager value was serialized as "k": "". The attacker does not need control of the JWK/JWKS source, a signing oracle, a private key, or a mixed algorithm allow-list.
Details
The vulnerability is caused by inconsistent validation of the same HMAC key material depending on whether it enters PyJWT as a raw key or through PyJWK.
Raw empty HMAC keys are rejected
[HMACAlgorithm.prepare_key](https://github.com/jpadilla/pyjwt/blob/7144e4534c34810f4525dc4578a32addd8212cff/jwt/algorithms.py#L325-L357) rejects an empty HMAC key.
As a result, an empty raw key is rejected in PyJWT 2.13.0:
jwt.decode(token, b"", algorithms=["HS256"])
with InvalidKeyError.
Empty oct JWKs decode to the same key but are accepted
[HMACAlgorithm.from_jwk](https://github.com/jpadilla/pyjwt/blob/7144e4534c34810f4525dc4578a32addd8212cff/jwt/algorithms.py#L379-L394) handles symmetric JWKs.
For:
{
"kty": "oct",
"k": ""
}
the empty Base64URL value is decoded to:
b""
and returned without an emptiness check.
[PyJWK.__init__](https://github.com/jpadilla/pyjwt/blob/7144e4534c34810f4525dc4578a32addd8212cff/jwt/api_jwk.py#L73-L82) then stores the decoded value in self.key.
The resulting PyJWK therefore contains the same zero-length byte string rejected by the raw-key path.
PyJWK verification bypasses the raw-key validation
[PyJWS._verify_signature](https://github.com/jpadilla/pyjwt/blob/7144e4534c34810f4525dc4578a32addd8212cff/jwt/api_jws.py#L389-L416) has a separate path for PyJWK objects.
When a PyJWK is supplied, verification uses its already-decoded key directly:
prepared_key = key.key
The value is not passed through:
alg_obj.prepare_key(key.key)
so the empty-key check in HMACAlgorithm.prepare_key is never reached.
The minimum HMAC key-length check does not reject the key under the default configuration. With enforce_minimum_key_length=False, PyJWT emits a warning and continues signature verification.
The verifier therefore receives:
b""
as the HS256 key.
This creates the following difference for identical cryptographic key material:
raw b""
-> HMACAlgorithm.prepare_key
-> InvalidKeyError
{"kty":"oct","k":""}
-> HMACAlgorithm.from_jwk
-> b""
-> PyJWK.key
-> PyJWS._verify_signature…
- Record
PYSEC-2026-4143- CVSS 3.1
- 7.4 High
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N - Updated
- 2026-11-02
OSVRLSA-2026:94500
9.1
Critical: fence-agents security update
The fence-agents packages provide a collection of scripts for handling remote power management for cluster devices. They allow failed or unreachable nodes to be forcibly restarted and removed from the cluster.
Security Fix(es):
-
pyjwt: pyjwt: Authentication bypass via empty HMAC key acceptance (CVE-2026-102266)
-
pyjwt: PyJWT: Authentication bypass via improper public key validation (CVE-2026-102268)
-
pyjwt: PyJWT: Authentication bypass via acceptance of DER public keys as HMAC secrets (CVE-2026-102271)
-
pyjwt: pyjwt: Verification key substitution via unvalidated JWKS redirects (CVE-2026-102267)
-
pyjwt: pyjwt: Token forgery via improper Unicode byte-order mark handling (CVE-2026-102272)
For more details about the security issue(s), including the impact, a CVSS score, acknowledgments, and other related information, refer to the CVE page(s) listed in the References section.
- Record
RLSA-2026:94500- CVSS 3.1
- 9.1 Critical
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N - Updated
- 2026-11-04
OSVRLSA-2026:94501
9.1
Critical: fence-agents security update
The fence-agents packages provide a collection of scripts for handling remote power management for cluster devices. They allow failed or unreachable nodes to be forcibly restarted and removed from the cluster.
Security Fix(es):
-
pyjwt: pyjwt: Authentication bypass via empty HMAC key acceptance (CVE-2026-102266)
-
pyjwt: PyJWT: Authentication bypass via improper public key validation (CVE-2026-102268)
-
pyjwt: PyJWT: Authentication bypass via acceptance of DER public keys as HMAC secrets (CVE-2026-102271)
-
pyjwt: pyjwt: Verification key substitution via unvalidated JWKS redirects (CVE-2026-102267)
-
pyjwt: pyjwt: Token forgery via improper Unicode byte-order mark handling (CVE-2026-102272)
For more details about the security issue(s), including the impact, a CVSS score, acknowledgments, and other related information, refer to the CVE page(s) listed in the References section.
- Record
RLSA-2026:94501- CVSS 3.1
- 9.1 Critical
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N - Updated
- 2026-11-04
OSVUBUNTU-CVE-2026-102266
7.4
PyJWT is a Python implementation of JSON Web Token standards. From 2.13.0 until 2.14.0, HMACAlgorithm.from_jwk is affected because PyJWK verification path used the decoded key without applying prepare_key validation. This occurs when a trusted JWK Set contains an oct entry with an empty k value. As a result, an attacker signs an HMAC token with the same zero-length key accepted by PyJWT. Consequently, forged token can carry arbitrary authenticated claims. This issue is fixed in version 2.14.0.
- Record
UBUNTU-CVE-2026-102266- CVSS 3.1
- 7.4 High
CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:N - 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-105239 No score
CVE-2026-102266 affecting package python-jwt for versions less than 2.15.1-1
PyJWT is a Python implementation of JSON Web Token standards. From 2.13.0 until 2.14.0, HMACAlgorithm.from_jwk is affected because PyJWK verification path used the decoded key without applying prepare_key validation. This occurs when a trusted JWK Set contains an oct entry with an empty k value. As a result, an attacker signs an HMAC token with the same zero-length key accepted by PyJWT. Consequently, forged token can carry arbitrary authenticated claims. This issue is fixed in version 2.14.0.
- Record
AZL-105239- 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
OSVROOT-APP-PYPI-CVE-2026-102266 No score
CVE-2026-102266 in pyjwt - Patched by Root
Root has patched CVE-2026-102266 in the pyjwt package for Root:PyPI. Multiple fixed versions available.
- Record
ROOT-APP-PYPI-CVE-2026-102266- Updated
- 2026-11-02
OSVUSN-8916-1 No score
pyjwt vulnerabilities
YuSung Han discovered that PyJWT did not properly validate certain JWK keys when performing HMAC verification. An attacker could possibly use this issue to forge authentication tokens. This issue only affected Ubuntu 26.04 LTS. (CVE-2026-102266)
Rohan Das discovered that PyJWT incorrectly handled redirects when fetching key sets. A remote attacker could possibly use this issue to cause PyJWT to disclose sensitive information. This issue only affected Ubuntu 22.04 LTS, Ubuntu 24.04 LTS, Ubuntu 26.04 LTS. (CVE-2026-102267)
It was discovered that PyJWT incorrectly recognized certain PEM representations. An attacker who knew the public key could possibly use this issue to forge authentication tokens. This issue only affected Ubuntu 18.04 LTS, Ubuntu 20.04 LTS, Ubuntu 22.04 LTS, Ubuntu 24.04 LTS, Ubuntu 26.04 LTS. (CVE-2026-102268)
Nuno Lopes discovered that PyJWT incorrectly handled DER public keys when performing HMAC verification. An attacker who knew the public key could possibly use this issue to forge authentication tokens. (CVE-2026-102271)
It was discovered that PyJWT did not properly handle certain JWK keys prefixed with a byte-order mark. An attacker who knew the public key could possibly use this issue to forge authentication tokens. (CVE-2026-102272)
Charles Vosburgh discovered that PyJWT incorrectly handled certain JWK containers when performing HMAC verification. An attacker who knew the public key could possibly use this issue to forge authentication tokens. (CVE-2026-102273)
- Record
USN-8916-1- Updated
- 2026-11-02
OSVUSN-8916-2 No score
pyjwt vulnerabilities
USN-8916-1 fixed vulnerabilities in PyJWT. This update provides the corresponding fix for PyJWT on Ubuntu 26.10.
Original advisory details:
YuSung Han discovered that PyJWT did not properly validate certain JWK keys when performing HMAC verification. An attacker could possibly use this issue to forge authentication tokens. (CVE-2026-102266)
Rohan Das discovered that PyJWT incorrectly handled redirects when fetching key sets. A remote attacker could possibly use this issue to cause PyJWT to disclose sensitive information. (CVE-2026-102267)
It was discovered that PyJWT incorrectly recognized certain PEM representations. An attacker who knew the public key could possibly use this issue to forge authentication tokens. (CVE-2026-102268)
Nuno Lopes discovered that PyJWT incorrectly handled DER public keys when performing HMAC verification. An attacker who knew the public key could possibly use this issue to forge authentication tokens. (CVE-2026-102271)
It was discovered that PyJWT did not properly handle certain JWK keys prefixed with a byte-order mark. An attacker who knew the public key could possibly use this issue to forge authentication tokens. (CVE-2026-102272)
Charles Vosburgh discovered that PyJWT incorrectly handled certain JWK containers when performing HMAC verification. An attacker who knew the public key could possibly use this issue to forge authentication tokens. (CVE-2026-102273)
- Record
USN-8916-2- Updated
- 2026-11-02
Affected products
Affected packages
| Package | Affected | Fixed |
|---|---|---|
pyjwtPyPI |
2.13.0 up to 2.14.0 | 2.14.0 |
fence-agents-aliyunAlmaLinux:9 From an advisory covering 5 CVEs |
before 4.10.0-110.el9_8.8 | 4.10.0-110.el9_8.8 |
fence-agents-allAlmaLinux:9 From an advisory covering 5 CVEs |
before 4.10.0-110.el9_8.8 | 4.10.0-110.el9_8.8 |
fence-agents-amt-wsAlmaLinux:9 From an advisory covering 5 CVEs |
before 4.10.0-110.el9_8.8 | 4.10.0-110.el9_8.8 |
fence-agents-apcAlmaLinux:9 From an advisory covering 5 CVEs |
before 4.10.0-110.el9_8.8 | 4.10.0-110.el9_8.8 |
fence-agents-apc-snmpAlmaLinux:9 From an advisory covering 5 CVEs |
before 4.10.0-110.el9_8.8 | 4.10.0-110.el9_8.8 |
fence-agents-awsAlmaLinux:9 From an advisory covering 5 CVEs |
before 4.10.0-110.el9_8.8 | 4.10.0-110.el9_8.8 |
fence-agents-azure-armAlmaLinux:9 From an advisory covering 5 CVEs |
before 4.10.0-110.el9_8.8 | 4.10.0-110.el9_8.8 |
fence-agents-bladecenterAlmaLinux:9 From an advisory covering 5 CVEs |
before 4.10.0-110.el9_8.8 | 4.10.0-110.el9_8.8 |
fence-agents-cisco-ucsAlmaLinux:9 From an advisory covering 5 CVEs |
before 4.10.0-110.el9_8.8 | 4.10.0-110.el9_8.8 |
Show 102 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 |
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 |
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.1 |
PyJWTRoot:PyPI |
before 2.13.0+aikido.1 | 2.13.0+aikido.1 |
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 |
History
| Recorded | Changed | Sources |
|---|---|---|
| affected, aliases, references | OSV | |
| affected | ||
| affected, aliases, references | OSV | |
| affected, aliases, facts, references | OSV | |
| first indexed | CVE List, EUVD, GitHub Advisories, NVD, OSV |
Dates are when Every CVE recorded each change. Upstream dates may differ.
In short
CVE-2026-102266 is a high vulnerability (CVSS 7.4) in Jpadilla Pyjwt, published September 28, 2026. No source lists public exploit code. EPSS puts the chance of exploitation in the next 30 days at 0.22%, the 13th percentile. Fixed in pyjwt 2.14.0.
References
github.com/jpadilla/pyjwt/security/advisories/GHSA-9j54-fg26-wv3r
github.com/jpadilla/pyjwt/commit/f91ed44dd65baaf457f4b3353ed35e98a753934c
github.com/jpadilla/pyjwt/releases/tag/2.14.0
nvd.nist.gov/vuln/detail/CVE-2026-102266
github.com/advisories/GHSA-9j54-fg26-wv3r
access.redhat.com/errata/RHSA-2026:94500
Show 43 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-102266
github.com/CVEProject/cvelistV5/tree/main/cves/2026/102xxx/CVE-2026-102266.json
security-tracker.debian.org/tracker/CVE-2026-102266
github.com/jpadilla/pyjwt
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
ubuntu.com/security/CVE-2026-102266
cve.org/CVERecord?id=CVE-2026-102266
ubuntu.com/security/notices/USN-8916-2
ubuntu.com/security/notices/USN-8916-1
ubuntu.com/security/CVE-2026-102267
ubuntu.com/security/CVE-2026-102268
ubuntu.com/security/CVE-2026-102271
ubuntu.com/security/CVE-2026-102272
ubuntu.com/security/CVE-2026-102273
suse.com/security/cve/CVE-2026-101917
suse.com/security/cve/CVE-2026-101918
suse.com/security/cve/CVE-2026-102266
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-102272
suse.com/security/cve/CVE-2026-102275
suse.com/security/cve/CVE-2026-103001
Left out here: the rest of 3 source descriptions. The JSON record has them.