cipher1x1/CVE-2026-29000
GitHub: cipher1x1/CVE-2026-29000
一个用于演示和验证 pac4j-jwt 认证绕过漏洞(CVE-2026-29000)的 PoC 工具。
Stars: 0 | Forks: 0
# CVE-2026-29000:pac4j-jwt 身份验证绕过的概念验证 (PoC)
### ⚠️ 免责声明
**本工具仅供教育和合乎道德的安全测试目的使用。** 我不以任何形式、形状或方式支持威胁行为。使用风险自负。
- 这也是我的第一个 PoC,所以请友善对待。
- 这是围绕 HackTheBox 上的 "Principal" 中等难度机器设计的。
## 概述
**CVE-2026-29000** 是 `pac4j-jwt` 库中的一个严重漏洞(CVSS 10.0)。它源于 `JwtAuthenticator` 在处理嵌套(加密) token 时的验证逻辑不当。
该缺陷的存在是因为,尽管 `pac4j` 使用服务器的密钥正确解密了 JWE(JSON Web Encryption) token,但它未能对内部的 JWT 强制执行签名验证。这允许攻击者将一个未签名的 JWT(使用 `{"alg": "none"}`)包装在一个有效的 JWE 包装器中。服务器解密 JWE,信任内部 payload,并授予访问权限。
## 漏洞详情
- **受影响版本:** `pac4j` 4.5.9、5.7.9 和 6.3.3 之前的版本。
- **漏洞类型:** 身份验证不当 / 签名验证绕过。
- **影响:** 完全绕过身份验证并提升权限(例如,获取 `ROLE_ADMIN`)。
## 概念验证
提供的脚本 `CVE-2026-29000.py` 自动执行以下步骤:
1. **密钥发现:** 通过 `/api/auth/jwks` endpoint 检索目标的公共 RSA 密钥。
2. **内部 Token 伪造:** 使用 `alg: none` 和管理员 claims 伪造一个未签名的 JWT。
3. **加密包装:** 使用检索到的公共密钥将伪造的 JWT 加密到 JWE 容器中。
4. **漏洞利用:** 将伪造的 JWE 发送到受保护的 endpoint 以验证未经授权的访问。
### 前置条件
请确保您已安装所需的 Python 库:
```
pip install requests jwcrypto
```
### 用法
```
python3 CVE-2026-29000.py
```
**示例:**
```
python3 CVE-2026-29000.py http://vulnerable-app.local:8080
```
## 修复方案
要缓解此漏洞,请采取以下措施:
1. **更新库:** 立即将 `pac4j-jwt` 升级到版本 **4.5.9**、**5.7.9** 或 **6.3.3**(或更高版本)。
2. **强制签名:** 确保您的 `JwtAuthenticator` 配置明确要求有效签名,并且不允许使用 `none` 算法。
3. **禁用 JWE:** 如果您的应用程序不需要加密的 token,请禁用 JWE 支持以减少攻击面。
## 参考
- [官方 CVE 条目 (CVE-2026-29000)](https://nvd.nist.gov/vuln/detail/CVE-2026-29000)
- [pac4j 安全公告](https://github.com/pac4j/pac4j/security/advisories)
**作者:** Cipher1x1
标签:JWT, PoC, Python, StruQ, 无后门, 暴力破解, 渗透测试, 漏洞利用, 身份认证绕过