CVE-2026-105119 OpenAM OAuth2 PKCE 校验绕过漏洞
影响攻击者可利用拦截的授权码换取公共客户端令牌
OpenAM 16.1.3 之前版本的 OAuth2 Provider 仅在 response_type 恰为 code 时强制执行 PKCE 校验,对 OpenID Connect 混合流(code token、code id_token、code token id_token)签发的授权码不绑定 challenge。攻击者截获此类授权码后,可用任意非空 code_verifier 兑换公共客户端的令牌。
影响范围
OpenAM 16.1.3 之前的版本,具体受影响版本范围暂无公开信息。
漏洞详情
该漏洞属于 PKCE 校验绕过(授权码未绑定 code_challenge)。成因是服务端对 PKCE 的强制校验仅匹配 response_type=code,未覆盖 OIDC 混合流场景。利用方式是攻击者截获混合流返回的授权码,在兑换令牌时提交任意非空 code_verifier 即可通过校验,从而获得公共客户端的访问令牌。
利用条件与风险
利用前提是攻击者能截获混合流签发的授权码,且目标为公共客户端;实战中可导致令牌被非法兑换,造成账户或资源未授权访问。
修复建议
升级 OpenAM 至 16.1.3 或更高版本,使 PKCE 校验覆盖所有签发授权码的流程;若无法立即升级,可临时禁用 OIDC 混合流或避免使用公共客户端,具体缓解措施以官方公告为准。
OpenAM before 16.1.3 applies its OAuth2 Provider PKCE enforcement only to authorization requests whose response_type is exactly code, so codes issued through OpenID Connect hybrid flows (code token, code id_token, code token id_token) carry no bound challenge. An attacker who intercepts such a code can redeem it for a public client’s tokens with any non-empty code_verifier.