CVE-2026-101917 PyJWT 拒绝服务漏洞
影响攻击者可放大对 JWKS 端点的出站请求,造成资源耗尽
PyJWT 是 Python 的 JSON Web Token 实现库。在 2.14.0 之前,get_signing_key_from_jwt 在处理未知 kid 时缺少负缓存或最小刷新间隔,导致每次缓存未命中都会触发 PyJWKClient 重新拉取 JWKS。攻击者可通过反复发送携带未知 kid 的未认证令牌,放大对配置的 JWKS 端点的出站请求。
影响范围
PyJWT 2.14.0 之前的版本,具体受影响版本范围以官方公告为准。
漏洞详情
该漏洞属于资源耗尽类问题。当令牌中的 kid 不在已缓存的 JWKS 中时,PyJWKClient 会立即重新请求 JWKS,且没有负缓存或最小刷新间隔限制。攻击者只需使用同一未知 kid 或不断变化的 kid 值发送未认证令牌,即可让每次校验都触发一次外部请求,从而放大出站流量。
利用条件与风险
利用无需认证,攻击者只要能向使用 PyJWT 校验令牌的服务发送请求即可触发。实战中可能导致 JWKS 端点被大量请求压垮,或造成服务端资源消耗与拒绝服务。
修复建议
升级到 PyJWT 2.14.0 或更高版本。临时缓解措施包括在网关或应用层限制令牌校验请求频率,或对未知 kid 的 JWKS 刷新做缓存与限流,具体以官方公告为准。
PyJWT is a Python implementation of JSON Web Token standards. Prior to 2.14.0, PyJWT get_signing_key_from_jwt is affected because unknown kid misses force refreshes without a negative cache or minimum refresh interval. This occurs when unauthenticated tokens repeatedly use the same unknown kid or varying kid values absent from the cached JWKS. As a result, each cache miss causes PyJWKClient to refresh the JWKS. Consequently, attacker traffic can amplify outbound requests to the configured JWKS endpoint. This issue is fixed in version 2.14.0.