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报告查看器, 加密漏洞, 协议分析, 威胁模拟, 安全漏洞, 暴力破解, 权限提升, 概念验证, 签名验证缺失, 网络安全, 访问控制缺陷, 身份验证绕过, 逆向工具, 逻辑漏洞, 隐私保护