pac4j-jwt身份验证绕过漏洞

admin 2026-03-13 00:30:04 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: 文档披露了Java认证库pac4j-jwt的严重漏洞CVE-2026-29000,CVSS评分10.0。漏洞根源在于JwtAuthenticator处理加密令牌时,若内层为无签名PlainJWT则跳过签名验证,导致攻击者可用公钥伪造身份绕过认证。受影响版本包括4.x、5.x、6.x系列特定版本,建议立即升级至修复版本并限制接口访问。 综合评分: 85 文章分类: 漏洞分析,漏洞预警,WEB安全,应用安全,安全建设


cover_image

pac4j-jwt 身份验证绕过漏洞

原创

🅼🅰🆈 🅼🅰🆈

独眼情报

2026年3月11日 14:11 湖北

想象一下:你家门口有一个投递箱,任何人都可以往里塞东西,但只有你拿着私钥才能打开取出来。正常情况下,你取出信件后还需要核对里面是否盖有官方印章,才算确认这封信是可信的。但这次漏洞的问题在于——服务器成功打开了投递箱,却忘了核对印章,直接就相信了里面写的内容。攻击者只需要找到那个公开的投递箱入口,就能塞进一张写着「我是管理员」的纸条,服务器照单全收。

2026年3月3日,安全研究团队 CodeAnt AI 披露了一个 CVSS 满分 10.0 的严重漏洞,编号为 CVE-2026-29000,影响 Java 生态中被广泛使用的认证库 pac4j-jwt。攻击者只需持有服务器的 RSA 公钥,便可伪造任意用户身份——包括管理员账户——完成完整的身份验证绕过,无需知道任何私钥或密码。

pac4j 和 JWT 是什么?

要理解这个漏洞,先得搞清楚几个概念。

pac4j 是 Java 生态中一个老牌的通用安全框架,被大量企业级应用、API 网关和 SSO 系统所集成,负责处理用户登录与权限校验。

JWT 是一种常见的身份令牌格式。当你登录某个网站后,服务器会生成一个令牌发给你,之后你每次请求都带上它,服务器就能知道你是谁、有什么权限。

JWT 有两个核心安全机制:

  • 加密:把令牌内容加密,中间人无法偷看,对应格式叫 JWE。
  • 签名:证明令牌是由持有私钥的服务器颁发的,对应格式叫 JWS。

这两层机制各司其职——加密保护数据的机密性,签名保护数据的真实性。单纯能解密一个令牌,并不等于证明令牌是合法颁发的。而这次漏洞,恰恰就发生在这个关键区别上。


漏洞的根源:一个「空值判断」悄悄架空了签名验证

漏洞出在 JwtAuthenticator 组件处理加密令牌时的逻辑缺陷:当服务器解密 JWE 令牌后,会尝试将内层载荷解析为一个带签名的 JWT 对象。如果内层实际上是一个无签名的 PlainJWT,解析结果就是空值,而后续的签名校验判断正好依赖这个空值——一旦为空,签名验证就被完全跳过,服务器却继续用令牌中的声明字段构建用户身份。

用更通俗的话来说:服务器成功解密了攻击者发来的内容,便错误地将「能解密」等同于「可信任」。但问题在于,任何人都可以用公钥加密数据——这正是公钥设计的初衷。服务器漏掉的那一步,是检验「这个令牌究竟是谁签发的」。

这个 bug 的本质是逻辑组合错误:每一段代码单独来看都没有问题,但当「解密成功」和「签名验证」两个步骤被串联时,中间的条件判断出现了漏洞。

影响范围:哪些系统受到威胁?

凡是同时满足以下条件的部署,均处于危险中:使用了 RSA 加密配置、同时配置了加密和签名两层机制、通过 JwtAuthenticator 进行身份校验。

受影响版本包括:

  • 4.x 系列:4.5.9 以下所有版本
  • 5.x 系列:5.7.9 以下所有版本
  • 6.x 系列:6.3.3 以下所有版本

如果 pac4j 被用于 API 网关或单点登录集成节点,影响范围会进一步扩大——伪造的身份可能会被下游系统完全信任,造成整个内网的信任链崩塌。这与当年 Log4Shell 的扩散模式非常相似:一个被广泛内嵌的组件一旦出问题,影响面会呈指数级放大。

值得关注的是,这并非 pac4j 生态首次出现类似问题。更早的 CVE-2021-44878 同样涉及令牌算法校验漏洞,当时客户端可以通过「none」算法绕过 OpenID Connect 令牌校验。两次漏洞的根因惊人地相似:攻击者找到了一条让验证器跳过真实性证明的路径。

如何应对?

立即升级是唯一有效的修复手段:

| 版本系列 | 升级目标 | | — | — | | 4.x | 4.5.9 或更高 | | 5.x | 5.7.9 或更高 | | 6.x | 6.3.3 或更高 |

如果暂时无法升级,应临时限制接受加密令牌的接口访问,并对日志中出现的无签名令牌请求保持警惕。

在更宏观的层面,这次漏洞提醒所有开发团队:「解密成功」不等于「身份可信」。加密只是令牌系统的一半——另一半是确认令牌是由谁创建、经过谁授权的。两者缺一不可。

详细技术分析:https://www.codeant.ai/security-research/pac4j-jwt-authentication-bypass-public-key


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:独眼情报 🅼🅰🆈 🅼🅰🆈《pac4j-jwt 身份验证绕过漏洞》

    评论:0   参与:  0