sancliffe/CVE-2026-29145-Tester

GitHub: sancliffe/CVE-2026-29145-Tester

针对Apache Tomcat双向TLS认证中OCSP检查绕过漏洞(CVE-2026-29145)的一键化PoC测试环境,支持自动化证书生成与多场景漏洞验证。

Stars: 0 | Forks: 0

# CVE-2026-29145 测试环境 ## 📌 概述 本仓库包含一个概念验证 (PoC) 环境,旨在测试 **CVE-2026-29145**。 该漏洞是 **Apache Tomcat 双向 TLS (CLIENT_CERT) 实现中的身份验证绕过**。当配置了 OCSP (在线证书状态协议) 且禁用软失败时,Tomcat 可能无法将 OCSP 检查失败视为硬拒绝。这使得持有已吊销或未验证证书的客户端,在 OCSP 响应器不可达或返回错误时,能够绕过身份验证。 ## 🛡️ 漏洞详情 | 属性 | 值 | |----------|-------| | **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 | | **攻击向量** | 网络 | | **所需权限** | 无 | | **影响** | 身份验证绕过 | ### 漏洞前置条件 - ✓ Tomcat 中启用了 CLIENT_CERT 身份验证 - ✓ 启用了 OCSP 吊销检查 - ✓ 禁用了软失败选项 (硬失败模式) - ✓ OCSP 响应器不可达或发生故障 ## 🚀 入门指南 ### 前置条件 - **Docker 和 Docker Compose**:用于运行存在漏洞的 Tomcat 容器 - **OpenSSL**:用于生成 PKI (公钥基础设施) - 通常预装在 Linux/macOS 上 - **Python 3.7+**:用于运行测试脚本和模拟响应器 - **curl** (可选):用于手动测试 ### 1. 自动化完整测试周期 (推荐) `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 ``` #### 2. 生成证书 ``` ./setup_certs.sh ``` **此步骤的作用:** - 创建根 CA (证书颁发机构) - 为 Tomcat 生成服务器证书 - 生成带有指向 `http://localhost:8888` 的 OCSP 扩展的客户端证书 - 验证所有证书是否已成功创建 **预期输出:** ``` [INFO] Starting certificate generation for CVE-2026-29145 testing environment [INFO] OpenSSL found: OpenSSL 3.0.x (...) [INFO] Created certs directory [INFO] Generating Root CA... [INFO] Generating Server Certificate... [INFO] Generating Client Certificate with OCSP Extension... [INFO] Certificate setup completed successfully! ``` #### 3. 启动漏洞环境 ``` docker-compose up -d ``` **此步骤的作用:** - 在端口 8888 上启动 OCSP 模拟响应器 (使用 HTTP 500 模拟失败) - 在端口 8443 上启动存在漏洞的 Tomcat 10.1.52,并配置 CLIENT_CERT 身份验证 - 创建用于服务通信的内部 Docker 网络 - 为两个服务设置健康检查 **验证容器是否正在运行:** ``` docker-compose ps ``` #### 4. 运行漏洞利用测试 ``` python poc_exploit.py ``` **预期输出:** **存在漏洞的系统:** ``` [INFO] Attempting connection to https://localhost:8443/protected-resource... [WARNING] VULNERABLE: Access granted despite OCSP check failure. [WARNING] Response preview: ... ``` **已修补的系统:** ``` [INFO] Attempting connection to https://localhost:8443/protected-resource... [INFO] NOT VULNERABLE: Access denied (Authentication working). ``` ## 🧪 测试场景 | 场景 | OCSP 状态 | 预期结果 (已修补) | 结果 (存在漏洞) | 备注 | |----------|-------------|-------------------|---------------------|-------| | 正常操作 | 在线且有效 | 200 OK ✓ | 200 OK ✓ | OCSP 检查成功,授予访问权限 | | 软失败 | 离线/超时 | 403 Forbidden ✓ | 200 OK ✗ | **绕过** - OCSP 响应器不可达 | | 硬吊销 | 在线且已吊销 | 403 Forbidden ✓ | 403 Forbidden ✓ | 证书被明确吊销 | | 无效证书 | 无效链 | 403 Forbidden ✓ | 403 Forbidden ✓ | 链验证失败 | ### 运行不同的测试场景 **测试 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 # This file ├── setup_certs.sh # Certificate generation script (with validation) ├── cleanup.sh # Cleanup and reset script ├── docker-compose.yml # Docker service orchestration ├── requirements.txt # Python dependencies ├── poc_exploit.py # Main testing script (with logging and error handling) ├── simple_proxy_fail.py # Mock OCSP responder (with detailed logging) ├── .gitignore # Git ignore rules for certificates and logs ├── certs/ # Generated certificates (created by setup_certs.sh) │ ├── ca-chain.pem # Root CA certificate │ ├── ca-key.pem # Root CA private key │ ├── server-cert.pem # Tomcat server certificate │ ├── server-key.pem # Tomcat server private key │ ├── client-cert.pem # Test client certificate │ └── client-key.pem # Test client private key ├── tomcat/ │ └── server.xml # Vulnerable Tomcat configuration └── logs/ # Tomcat logs (created at runtime) ``` ## 📋 配置详情 ### Server.xml 配置 (存在漏洞) `tomcat/server.xml` 文件配置了: ``` ``` **关键设置:** - `certificateVerification="required"` - 强制执行 CLIENT_CERT 身份验证 - `OCSP on` - 启用 OCSP 吊销检查 - 没有软失败覆盖 - 使用硬失败模式 (存在漏洞) ### OCSP 响应器配置 模拟 OCSP 响应器 (`simple_proxy_fail.py`): - 监听 `localhost:8888` - 始终返回 HTTP 500 (服务器错误) - 记录所有传入的 OCSP 请求 - 模拟不可达/发生故障的 OCSP 服务 ## 🔧 故障排除 ### 常见问题及解决方案 #### ❌ 错误:“OpenSSL is not installed” ``` # macOS brew install openssl # Ubuntu/Debian sudo apt-get install openssl # CentOS/RHEL sudo yum install openssl ``` #### ❌ 错误:“Missing certificate files” **原因:** 证书生成失败或未运行。 ``` # 清理并重新生成 rm -rf certs ./setup_certs.sh ``` #### ❌ 错误:端口 8443 上出现 “Connection refused” **原因:** Tomcat 容器未运行或未就绪。 ``` # 检查容器状态 docker-compose ps # 检查日志 docker-compose logs vulnerable-tomcat # 确保两个服务都在运行且状态正常 docker-compose up -d sleep 10 # Wait for services to start ``` #### ❌ 错误:“Connection timeout” **原因:** Tomcat 启动时间过长或存在网络问题。 ``` # 检查 Tomcat 启动日志 docker-compose logs vulnerable-tomcat # 增加 timeout 并重试 timeout 30 docker-compose logs -f vulnerable-tomcat # Monitor startup ``` #### ❌ 错误:“docker-compose: command not found” **原因:** 未安装 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(V2 集成在 Docker Desktop 中) docker compose up -d ``` #### ❌ 错误:“SSL: CERTIFICATE_VERIFY_FAILED” **原因:** 证书验证失败。 ``` # 验证证书文件是否存在 ls -la certs/ # 检查证书有效性 openssl x509 -in certs/client-cert.pem -noout -text ``` #### ❌ 错误:“requests.exceptions.SSLError” **原因:** SSL 握手失败 - 可能表明硬失败机制正在正常工作。 **解决方案:** 这实际上是一个积极的信号!硬失败机制在 OCSP 失败时阻止了访问。 ``` # 检查 OCSP responder 是否正在运行 docker-compose ps ocsp-responder # 查看详细错误信息 python poc_exploit.py # Already provides detailed logging ``` #### ❌ 错误:“Address already in use” **原因:** 端口 8443 或 8888 已被占用。 ``` # 查找占用端口的进程 lsof -i :8443 lsof -i :8888 # 终止进程或在 docker-compose.yml 中使用不同的端口 ``` ### 调试与日志 #### 查看详细日志 ``` # Tomcat 日志 docker-compose logs -f vulnerable-tomcat # OCSP responder 日志 docker-compose logs -f ocsp-responder # Python 脚本调试 python poc_exploit.py # Already includes detailed logging ``` #### 监控实时事件 ``` # 打开终端并运行 docker-compose logs -f # 在另一个终端中,运行测试 python poc_exploit.py ``` #### 网络调试 ``` # 测试与 OCSP responder 的连通性 curl http://localhost:8888/ # 从 Tomcat 容器内部测试 OCSP responder 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 ``` ## 🧹 清理 要移除所有容器、卷、证书和日志: ``` ./cleanup.sh ``` **此步骤的作用:** - 停止并移除所有 Docker 容器 - 移除生成的 `certs/` 目录 - 移除 `logs/` 目录 - 清理 Python 缓存文件 **验证清理:** ``` docker-compose ps # Should show nothing ls -la certs/ # Should not exist ``` ## ⚖️ 免责声明 本项目仅用于**教育和授权安全测试目的**。 - ⚠️ 请仅对您拥有或获得明确书面授权测试的系统使用 - ⚠️ 未经授权对这些系统使用这些工具是**非法的**且不道德的 - ⚠️ 作者不对本软件的任何滥用行为负责 - ⚠️ 在生产系统上进行测试前,请务必确保您已进行适当的备份 ## 📝 修复建议 要缓解此漏洞,请将 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 ``` ## 🔗 参考文献 - [CVE-2026-29145 详情](https://nvd.nist.gov/) - [Apache Tomcat 文档](https://tomcat.apache.org/) - [OCSP (RFC 6960)](https://tools.ietf.org/html/rfc6960) - [双向 TLS (mTLS) 概述](https://en.wikipedia.org/wiki/Mutual_TLS) ## 📬 支持 如有问题、疑问或贡献,请提交 issue 或发起 pull request。 **最后更新:** 2026 年 4 月 **状态:** 测试与文档已完成
标签:Apache Tomcat, CISA项目, CLIENT_CERT, Cutter, CVE-2026-29145, CVSS 9.1, Docker, mTLS, OCSP验证, OpenSSL, PKI证书, Python, 协议安全, 双向TLS, 安全测试工具, 安全漏洞, 安全防御评估, 无后门, 测试环境, 漏洞PoC, 漏洞复现, 网络安全, 认证绕过, 请求拦截, 身份验证绕过, 逆向工具, 隐私保护