CVE-2026-102275 PyJWT OKP 密钥验证不当漏洞
影响攻击者可绕过发送方约束令牌的私钥校验,冒用被盗令牌
PyJWT 是 Python 的 JSON Web Token 实现库。在 2.1.0 至 2.15.0 版本中,OKPAlgorithm.from_jwk 处理 OKP 私钥 JWK 时未校验由 d 推导出的公钥是否与 x 一致,导致身份标识与实际签名运算所用密钥可能不匹配。该问题已在 2.15.0 修复。
影响范围
PyJWT 2.1.0 起至 2.15.0 之前的版本;2.15.0 已修复。
漏洞详情
漏洞类型为密钥校验缺失(密码学实现缺陷)。当 OKP 私钥 JWK 中提供的 x 与 d 不互相对应时,代码不会验证二者是否匹配,使得基于 x 的身份判断与基于 d 的实际运算脱节。若集成方还接受来自证明头部的私钥参数且未拒绝,攻击者即可利用被盗的发送方约束令牌,在无合法私钥的情况下通过校验。
利用条件与风险
利用前提是集成方接受来自证明头部的私钥参数且未做拒绝处理,并已获取被盗的发送方约束令牌;属于特定场景下的绕过风险,实战影响中等。
修复建议
升级至 PyJWT 2.15.0 或更高版本;临时缓解措施为在集成层拒绝来自证明头部的私钥参数,并校验 OKP JWK 中 x 与 d 的一致性。
PyJWT is a Python implementation of JSON Web Token standards. From 2.1.0 until 2.15.0, PyJWT OKPAlgorithm.from_jwk in jwt/algorithms.py is affected because private-JWK import path does not compare the public key derived from d with x. This occurs when an OKP private JWK supplies non-corresponding x and d components. As a result, identity derived from x can differ from operations performed with d. Consequently, if an integration also accepts private key parameters from a proof header without rejecting them, an attacker may use a stolen sender-constrained token without the legitimate private key. This issue is fixed in version 2.15.0.