漏洞概述 该漏洞涉及在配置 时,JWKS 缓存和单租户查找仅基于 JWT 头部的 进行键控。如果两个 JWKS 文档声明了相同的 ,一个从单租户域获取的密钥可能会被用于另一个租户的验证请求。 影响范围 多租户环境:在多租户部署中,攻击者可以控制一个租户的 JWKS 文档,并使用该租户的密钥来验证另一个租户的令牌。 单租户环境:单租户部署不受影响,因为只有一个信任域,缓存作用域是隐式的。 修复方案 缓存和单租户密钥的作用域:现在缓存和单租户密钥不仅基于 ,还基于解析的 JWKS 端点 URL 进行作用域设置(复合键: )。 URL 模板解析和路径遍历验证:现在在缓存查找之前运行 URL 模板解析和路径遍历验证,因此缓存命中仅针对已验证的、完全解析的 URL。 代码变更 : 现在接受一个不透明的 ,而不是从 派生。 : 解析 JWKS URL 并使用复合键为 TTL 缓存和单租户组存储每个返回的密钥。 测试 添加了两个回归测试,分别在预修复代码下失败,在修复后通过: - :首先断言租户 A 的获取与相同的 咨询租户 B 的端点并返回租户 B 的密钥(而不是缓存的 A 密钥)。 - :首先通过合法令牌获取租户 A 的密钥,然后提交由租户 A 的密钥签名的租户 B 声称的令牌;断言拒绝并联系租户 B 的 JWKS 端点。 POC 代码