天下漏洞,尽知其名
HIGH

CVE-2026-102273 PyJWT HMAC 密钥验证绕过漏洞

影响攻击者可用公钥伪造通过 HMAC 校验的 JWT 令牌

AI 研判

PyJWT 是 Python 的 JSON Web Token 实现库。在 2.13.0 至 2.14.0 之前的版本中,HMACAlgorithm.prepare_key 的密钥校验逻辑只识别顶层公钥 JWK 形式,遗漏了容器(container)形式的公钥表示。当应用同时允许 HMAC 与非对称算法、并把公钥 JWK 容器当作原始密钥传入时,非对称公钥材料会被当作 HMAC 密钥接受。

影响范围

PyJWT

PyJWT 2.13.0 起至 2.14.0 之前的版本;2.14.0 已修复。

漏洞详情

该漏洞属于密钥混淆/算法混淆类问题。PyJWT 在准备 HMAC 密钥时,本应拒绝把非对称公钥当作 HMAC 密钥使用,但其校验只覆盖顶层公钥 JWK,未覆盖容器形式的公钥表示。当应用配置同时支持 HMAC 与非对称算法并传入公钥 JWK 容器时,公钥会被误当作 HMAC 共享密钥。由于公钥通常是公开的,攻击者据此即可自行计算 HMAC 签名,伪造任意声明已通过认证的令牌。

利用条件与风险

利用前提是应用同时启用 HMAC 与非对称算法,并将公钥 JWK 容器作为原始密钥传入。满足条件时,攻击者仅凭公开的公钥即可伪造令牌,实战风险较高。

修复建议

升级到 PyJWT 2.14.0 或更高版本。临时缓解措施:避免同时启用 HMAC 与非对称算法,或确保传入的密钥不是公钥 JWK 容器形式。

原始情报

PyJWT is a Python implementation of JSON Web Token standards. From 2.13.0 until 2.14.0, PyJWT HMACAlgorithm.prepare_key is affected because HMAC key guard only recognizes top-level public JWK forms and misses container representations. This occurs when an application allows HMAC and asymmetric algorithms and passes a public JWK container as the raw key. As a result, public asymmetric key material is accepted as the HMAC secret. Consequently, an attacker who knows the public key can forge a token with arbitrary authenticated claims. This issue is fixed in version 2.14.0.