strikoder/CVE-2026-29000-pac4j-jwt

GitHub: strikoder/CVE-2026-29000-pac4j-jwt

CVE-2026-29000 的概念验证工具,利用 pac4j-jwt 将未签名 JWT 包装在 JWE 中时不验证签名的缺陷,实现身份认证绕过和权限伪造。

Stars: 0 | Forks: 0

# pac4j-jwe-forge (CVE-2026-29000) CVE-2026-29000 的概念验证。目标为 4.5.9、5.7.9 和 6.3.3 之前的 pac4j-jwt 版本。 该漏洞的原理非常简单:只要库将一个 `PlainJWT`(未签名,`alg=none`)包装在有效的 JWE 中,它就会接受该 JWT。由于服务器通过 JWKS 端点公开了其 RSA 公钥,任何人都可以使用该公钥将任意未签名的 JWT 加密成服务器会信任的 JWE —— 包括带有 `ROLE_ADMIN` 的 JWT。 ## 工作原理 1. 从目标的 JWKS 端点获取 RSA 公钥 2. 使用你想要的任何 claims 构建一个未签名的 JWT (`alg=none`) 3. 使用服务器的公钥对其进行加密 4. 将生成的 JWE 作为 Bearer token 发送 服务器将其解密,信任其中的 claims,并且从不检查内部的 JWT 是否未签名。 ## 环境要求 带有 [uv](https://github.com/astral-sh/uv) 的 Python 3.13+,或手动安装依赖项: ``` pip install jwcrypto requests ``` ## 使用方法 ``` [uv run / python3] CVE-2026-29000.py --url --jwks [options] ``` **必填项:** | 标志 | 描述 | |------|-------------| | `--url` | 目标的基础 URL,例如 `http://10.10.11.x:8080` | | `--jwks` | JWKS 端点的路径或完整 URL | **可选项:** | 标志 | 默认值 | 描述 | |------|---------|-------------| | `--user` | `admin` | `sub` claim 的值 | | `--role` | `ROLE_ADMIN` | 要伪造的角色 (`ROLE_ADMIN`, `ROLE_MANAGER`, `ROLE_USER`) | | `--issuer` | `principal-platform` | `iss` claim 的值 | | `--enc` | `A256GCM` | JWE 内容加密方式 (`A256GCM` 或 `A128GCM`) | **示例:** ``` python3 exploit.py --url http://10.10.11.x:8080 --jwks /api/auth/jwks python3 exploit.py --url http://10.10.11.x:8080 --jwks /api/auth/jwks --user john --role ROLE_ADMIN python3 exploit.py --url http://10.10.11.x:8080 --jwks /.well-known/jwks.json --enc A128GCM ``` ## 查找 JWKS 端点 通常并不明显。可以查找的好地方: - `/robots.txt` — 通常会列出受限或内部路径 - `/api/auth/jwks` - `/.well-known/jwks.json` - `/.well-known/openid-configuration` ## 查找正确的 alg/enc 如果 token 被拒绝,应用程序可能需要特定的加密算法。检查 `/static/js/app.js` 是否包含类似以下内容: ``` const JWE_ALG = "RSA-OAEP-256"; const JWE_ENC = "A128GCM"; ``` 然后使用 `--enc A128GCM` 重新运行。 token 的存储方式通常也在其中: ``` class TokenManager { static getToken() { return sessionStorage.getItem('auth_token'); } } ``` 如果使用的是 sessionStorage,请直接在 DevTools 的 Application > Session Storage 中替换 token。 ## 受影响的版本 - pac4j-jwt < 4.5.9 - pac4j-jwt < 5.7.9 - pac4j-jwt < 6.3.3 已在 4.5.9、5.7.9 和 6.3.3 版本中修复。
标签:alg=none, CISA项目, CSV导出, CVE-2026-29000, JWE, JWKS, JWT安全, pac4j-jwt, PlainJWT, PoC, Python, RSA公钥, Token伪造, Web安全, 代码执行, 协议分析, 无后门, 暴力破解, 权限提升, 网络安全, 蓝队分析, 身份验证绕过, 隐私保护