CVE Feed
8.2 High

PyJWT is a Python implementation of JSON Web Token standards.

CVE-2026-102275

Summary PyJWT accepts internally inconsistent OKP private JWKs where the declared public key x does not correspond to the supplied private key d. When d is present, OKPAlgorithm.fromjwk() constructs the Ed25519/Ed448 private key from d without verifying that the public key derived from d matches x. As a result, the original JWK can contain one public key identity while PyJWT performs cryptographic operations using a different key. In affected DPoP integrations, this can allow a stolen sender-constrained access token to be used without possession of the legitimate holder's private key. Details The vulnerable logic is in jwt/algorithms.py: python if "x" not in obj: raise InvalidKeyError('OKP should have "x" parameter') x = base64urldecode(obj.get("x")) if "d" not in obj: if curve == "Ed25519": return Ed25519PublicKey.frompublicbytes(x) return Ed448PublicKey.frompublicbytes(x) d = base64urldecode(obj.get("d")) if curve == "Ed25519": return Ed25519PrivateKey.fromprivatebytes(d) return Ed448PrivateKey.fromprivatebytes(d) When d is present, x is parsed but never compared with the public key derived from d. For example, PyJWT accepts: json { "kty": "OKP", "crv": "Ed25519", "x": " ", "d":…

Assessment

CVSS
8.2 (v3.1)
Severity
High
EPSS
0.17% chance of exploitation in the next 30 days
Known exploited
Not listed in CISA KEV
Exploit availability
Nothing found in Exploit-DB, Metasploit, Nuclei or public PoC repositories
Published
28 September 2026
Last updated
6 October 2026
Affected
jpadilla · pyjwt · PyJWT
Weakness
CWE-345, CWE-348
Assigner
security-advisories@github.com

CVSS vectorCVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:L/I:H/A:N

At the source

References

Community proofs of concept

No community proof of concept yet. If you have one for a published vulnerability and the right to share it, add it below — it will appear here once reviewed.

Submit a proof of concept
Before you submit *

Query this programmatically

Agents can read this through the MCP endpoint, or over HTTP:

curl https://cve.zerocrew.in/api/cve/CVE-2026-102275