Java/SparkJava 实验室,模拟与 CVE-2026-29000 相关的 JWT/JWE 认证漏洞。应用程序运行在 4567 端口,并提供 API 用于测试有效的登录流程、创建伪造 token 以及检查仪表盘。
CVE-2026-29000 影响 pac4j-jwt 中早于 4.5.9、5.7.9 和 6.3.3 的版本。该漏洞存在于 JwtAuthenticator 处理加密 JWT/JWE 时,允许攻击者在某些认证流程中伪造认证 token。
应根据当前使用的分支升级到的最低版本:
4.x:升级到 4.5.9 或更高版本5.x:升级到 5.7.9 或更高版本6.x:升级到 6.3.3 或更高版本在项目根目录下运行:
docker compose up --build
构建完成后,打开:
http://localhost:4567
停止实验室:
docker compose down
构建镜像:
docker build -t cve-2026-29000-lab .
运行容器:
docker run --rm -p 4567:4567 --name cve-2026-29000-lab cve-2026-29000-lab
检查服务器公钥:
curl http://localhost:4567/api/public-key
进入 lab 目录:
cd lab
运行应用程序:
mvn exec:java
或者先构建,再通过 classpath 运行:
mvn -DskipTests package dependency:copy-dependencies
java -cp "target/classes;target/dependency/*" com.demo.App
在 Linux/macOS 上,使用 : 代替 ;:
java -cp "target/classes:target/dependency/*" com.demo.App
GET / - 演示步骤的快速指南POST /api/login - 创建有效 tokenPOST /api/forge-token - 创建用于演示绕过(bypass)的 tokenGET /api/dashboard - 检查 Authorization: Bearer <token> 请求头中的 tokenGET /api/public-key - 查看 JWK 格式的公钥有效登录:
curl -X POST http://localhost:4567/api/login \
-H "Content-Type: application/json" \
-d "{\"username\":\"user_lucas\",\"role\":\"user\"}"
创建伪造 token:
curl -X POST http://localhost:4567/api/forge-token \
-H "Content-Type: application/json" \
-d "{\"username\":\"admin\",\"role\":\"administrator\"}"
CVE-2026-29000-lab/
|-- Dockerfile
|-- docker-compose.yml
|-- lab/
| |-- pom.xml
| `-- src/main/java/com/demo/
| |-- App.java
| `-- VulnerableAuthenticator.java
`-- README.md
本实验室仅用于本地环境中的学习和测试。请勿公开部署,或用于攻击未经授权的系统。