PtechAmanja/CVE-2026-29000-pac4j-jwt-auth-bypass

GitHub: PtechAmanja/CVE-2026-29000-pac4j-jwt-auth-bypass

针对pac4j-jwt库CVE-2026-29000漏洞的PoC,通过将PlainJWT封装在JWE中绕过签名验证,实现身份验证绕过。

Stars: 0 | Forks: 0

# HTB Principal — CVE-2026-29000 漏洞分析 ## 机器信息 | 字段 | 详情 | |---|---| | 名称 | Principal | | 平台 | HackTheBox | | 难度 | — | | 状态 | 已退役 | ## 漏洞 — CVE-2026-29000 **受影响库:** `pac4j-jwt` < 4.5.9 / 5.7.9 / 6.3.3 **严重程度:** 严重 **类型:** 身份验证绕过 ### 摘要 `JwtAuthenticator` 中的逻辑缺陷允许攻击者通过将未签名的 `PlainJWT` (alg=none) 封装在 JWE (加密 JWT) 中来绕过身份验证。 当服务器解密 JWE 时,它会尝试将内部 token 解析为 `SignedJWT`。由于内部 token 是 `PlainJWT`,`SignedJWT` 对象为 null,因此签名验证被完全跳过。服务器随后根据未经验证的 claims 构建用户配置文件 —— 从而允许完全冒充任何用户,包括管理员。 ### 攻击条件 - 服务器的 RSA 公钥(通常通过 JWKS 端点暴露) - 了解内部 claim 名称(例如 roles, subject 格式) ### 利用流程 ``` Craft malicious claims (sub=admin, role=ROLE_ADMIN) ↓ Build unsigned PlainJWT (alg=none) ↓ Wrap PlainJWT inside JWE using server's RSA public key ↓ Submit JWE token to server ↓ Server decrypts JWE → finds PlainJWT → skips signature check → grants access ``` ## 利用代码 参见 [`exploit.py`](./poc.py) ## 修复 将 `pac4j-jwt` 升级到已修复版本: - `4.5.9` 或更高版本 - `5.7.9` 或更高版本 - `6.3.3` 或更高版本 或者在 JWE 解密后显式拒绝 `PlainJWT` 内部 token: ``` if (jwt instanceof PlainJWT) { throw new CredentialsException("PlainJWT not allowed inside JWE"); } ``` ## ⚙️ 攻击流程 1. 从此处获取公钥: ``` /api/auth/jwks ``` 2. 构造恶意 JWT: - `alg: none` - 注入管理员角色 3. 使用公钥将其封装在 JWE 中 4. 发送为: ``` Authorization: Bearer ``` 5. 获得未授权访问 ## 🛠️ PoC 用法 ### 安装依赖 ``` pip install jwcrypto requests ``` ### 运行 exploit ``` python3 poc.py \ --jwks-url http://target/api/auth/jwks \ --target http://target/api/dashboard ``` ## 📤 示例输出 ``` [+] Forged Token: eyJhbGciOiJSU0EtT0FFUC0yNTYi... [+] Browser Injection: sessionStorage.setItem("auth_token", "eyJhbGciOiJSU0EtT0FFUC0yNTYi...") [+] Status: 200 {"user":{"username":"admin","role":"ROLE_ADMIN"}} ``` ## 🌐 浏览器利用 打开 DevTools → 控制台 (Console): ``` sessionStorage.setItem("auth_token", "") ``` 然后导航至: ``` /dashboard ``` ## 🔥 影响 * 完全绕过身份验证 * 提权至管理员 * 未授权 API 访问 * 潜在的横向移动 ## 🛡️ 缓解措施 * 始终在解密后验证 JWT 签名 (JWS) * 拒绝 `alg: none` 的 token * 强制执行严格的 token 验证策略 * 不要仅依赖加密来建立信任 ## 👤 作者 * Doomsknight ## 参考 - [pac4j 安全公告](https://github.com/pac4j/pac4j) - [HackTheBox](https://hackthebox.com)
标签:Alg:none攻击, CVE-2026-29000, GHAS, HackTheBox, Java安全, JWE, JWT, pac4j-jwt, PlainJWT, PoC, Principal, Web报告查看器, 加密漏洞, 协议分析, 威胁模拟, 安全漏洞, 暴力破解, 权限提升, 概念验证, 签名验证缺失, 网络安全, 访问控制缺陷, 身份验证绕过, 逆向工具, 逻辑漏洞, 隐私保护