CVE-2026-27962Authlib是一个用于构建OAuth和OpenID Connect服务器的Python库。该库在1.6.9版本之前存在一个严重的JWK Header Injection漏洞,存在于JWS实现中。漏洞允许未经身份验证的攻击者伪造任意JWT令牌,这些令牌可以通过签名验证。当将key=None传递给任何JWS反序列化函数时,库会提取并使用嵌入在攻击者控制的JWT jwk header字段中的加密密钥。攻击者可以使用自己的私钥对令牌进行签名,将匹配的公钥嵌入到header中,然后让服务器将伪造的令牌接受为加密有效,从而完全绕过身份验证和授权机制。该漏洞影响所有使用Authlib处理JWT的应用,尤其是那些依赖JWT进行身份验证和授权决策的系统。CVSS评分高达9.1,属于严重级别漏洞。
该漏洞的根源在于Authlib的JWS (JSON Web Signature) 实现中的不安全密钥处理。当调用JWS反序列化函数(如verify_jws或decode_jwt)时,如果传入的key参数为None,库会自动从JWT的header中提取jwk字段中嵌入的公钥。攻击流程如下:首先,攻击者生成一对RSA/ECDSA密钥对;然后,使用自己的私钥对payload进行签名,将公钥以JWK格式嵌入到JWT的protected header中;最后,将伪造的JWT发送到目标服务器。由于服务器在key=None时会使用header中的公钥进行验签,而该公钥正好匹配攻击者的私钥,因此验签通过。攻击者可以任意构造payload(如设置admin: true或更改user_id),从而获得管理员权限或冒充任意用户。此漏洞影响所有使用Authlib < 1.6.9版本且在JWT验证时允许key=None的应用。修复版本为1.6.9,修复方式是在key=None时不再自动从header提取密钥。