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, 无后门, 暴力破解, 渗透测试, 漏洞利用, 身份认证绕过