
Este repositório contém um ambiente de prova de conceito (PoC) projetado para testar a CVE-2026-29145.
Este repositório contém um ambiente de prova de conceito (PoC) projetado para testar a CVE-2026-29145.
A vulnerabilidade é uma falha de autenticação na implementação de TLS Mútuo (CLIENT_CERT) do Apache Tomcat. Quando o OCSP (Online Certificate Status Protocol) é configurado com soft-fail desabilitado, o Tomcat pode falhar ao tratar uma falha de verificação OCSP como uma negação definitiva. Isso permite que um cliente com um certificado potencialmente revogado ou não verificado contorne a autenticação se o respondedor OCSP estiver inacessível ou retornar um erro.
| Propriedade | Valor |
|---|
| ID CVE | CVE-2026-29145 |
| Pontuação CVSS | 9.1 (Crítica) - CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N |
| Vetor de Ataque | Rede |
| Privilégios Necessários | Nenhum |
| Impacto | Bypass de Autenticação |
.ps1O script run_test.sh automatiza todo o processo: limpeza, geração de certificados e execução de todos os cenários de teste (vulnerável, sucesso e corrigido).
# Navegue até o diretório do projeto
cd CVE-2026-29145-Tester
# Torne os scripts executáveis
chmod +x cleanup.sh setup_certs.sh run_test.sh
# Instale as dependências Python (se o poc_exploit.py exigir)
pip install -r requirements.txt
# Execute a suíte de testes completa
./run_test.sh
No Linux/macOS:
./setup_certs.sh
No Windows (PowerShell):
.\setup_certs.ps1
O que isso faz:
http://localhost:8888Saída esperada:
[INFO] Iniciando geração de certificados para o ambiente de teste CVE-2026-29145
[INFO] OpenSSL encontrado: OpenSSL 3.0.x (...)
[INFO] Diretório certs criado
[INFO] Gerando CA Raiz...
[INFO] Gerando Certificado do Servidor...
[INFO] Gerando Certificado do Cliente com Extensão OCSP...
[INFO] Configuração de certificados concluída com sucesso!
docker-compose up -d
O que isso faz:
Verifique se os contêineres estão em execução:
docker-compose ps
python poc_exploit.py
Saídas esperadas:
Sistema Vulnerável:
[INFO] Tentando conexão com https://localhost:8443/protected-resource...
[WARNING] VULNERÁVEL: Acesso concedido apesar da falha na verificação OCSP.
[WARNING] Prévia da resposta: <html>...
Sistema Corrigido:
[INFO] Tentando conexão com https://localhost:8443/protected-resource...
[INFO] NÃO VULNERÁVEL: Acesso negado (Autenticação funcionando).
| Cenário | Status OCSP | Esperado (Corrigido) | Resultado (Vulnerável) | Observações |
|---|---|---|---|---|
| Operação Normal | Online e Válido | 200 OK ✓ | 200 OK ✓ | Verificação OCSP bem-sucedida, acesso concedido |
| Falha Suave | Offline/Timeout | 403 Proibido ✓ | 200 OK ✗ | BYPASS - Respondedor OCSP inacessível |
| Revogação Definitiva | Online e Revogado | 403 Proibido ✓ | 403 Proibido ✓ | Certificado explicitamente revogado |
| Certificado Inválido | Cadeia Inválida | 403 Proibido ✓ | 403 Proibido ✓ | Validação da cadeia falha |
Teste 1: Padrão (Respondedor OCSP com Falha)
# Mantenha os contêineres em execução
python poc_exploit.py
Teste 2: Parar Respondedor OCSP (Simular Timeout)
docker-compose pause ocsp-responder
python poc_exploit.py
docker-compose unpause ocsp-responder
Teste 3: Teste Manual com 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 # Este arquivo
├── setup_certs.sh # Script de geração de certificados - Bash (Linux/macOS)
├── setup_certs.ps1 # Script de geração de certificados - PowerShell (Windows)
├── cleanup.sh # Script de limpeza e redefinição - Bash (Linux/macOS)
├── cleanup.ps1 # Script de limpeza e redefinição - PowerShell (Windows)
├── run_test.sh # Script de ciclo de teste automatizado completo
├── docker-compose.yml # Orquestração de serviços Docker
├── requirements.txt # Dependências Python
├── poc_exploit.py # Script de teste principal (com logging e tratamento de erros)
├── simple_proxy_fail.py # Respondedor OCSP simulado (com logging detalhado)
├── .gitignore # Regras de ignore do Git para certificados e logs
├── certs/ # Certificados gerados (criados pelos scripts setup_certs)
│ ├── ca-chain.pem # Certificado da CA Raiz
│ ├── ca-key.pem # Chave privada da CA Raiz
│ ├── server-cert.pem # Certificado do servidor Tomcat
│ ├── server-key.pem # Chave privada do servidor Tomcat
│ ├── client-cert.pem # Certificado do cliente de teste
│ └── client-key.pem # Chave privada do cliente de teste
├── tomcat/
│ └── server.xml # Configuração do Tomcat vulnerável
└── logs/ # Logs do Tomcat (criados em tempo de execução)
O arquivo tomcat/server.xml configura:
<SSLHostConfig
hostName="localhost"
certificateVerification="required"
caCertificateFile="conf/certs/ca-chain.pem">
<OpenSSLConf>
<ConfCommand name="OCSP" value="on"/>
</OpenSSLConf>
</SSLHostConfig>
Configurações Principais:
certificateVerification="required" - Impõe autenticação CLIENT_CERTOCSP on - Habilita verificação de revogação OCSPO respondedor OCSP simulado (simple_proxy_fail.py):
localhost:8888# macOS
brew install openssl
# Ubuntu/Debian
sudo apt-get install openssl
# CentOS/RHEL
sudo yum install openssl
Causa: A geração de certificados falhou ou não foi executada.
# Limpe e regenere
rm -rf certs
./setup_certs.sh
Causa: O contêiner Tomcat não está em execução ou não está pronto.
# Verifique o status do contêiner
docker-compose ps
# Verifique os logs
docker-compose logs vulnerable-tomcat
# Garanta que ambos os serviços estejam em execução e saudáveis
docker-compose up -d
sleep 10 # Aguarde os serviços iniciarem
Causa: O Tomcat está demorando muito para iniciar ou há problemas de rede.
# Verifique os logs de inicialização do Tomcat
docker-compose logs vulnerable-tomcat
# Aumente o timeout e tente novamente
timeout 30 docker-compose logs -f vulnerable-tomcat # Monitore a inicialização
Causa: Docker Compose não instalado ou não está no PATH.
# Instale o Docker Compose (se usar standalone)
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
# Ou use docker compose (V2 integrado ao Docker Desktop)
docker compose up -d
Causa: Falha na validação do certificado.
# Verifique se os arquivos de certificado existem
ls -la certs/
# Verifique a validade do certificado
openssl x509 -in certs/client-cert.pem -noout -text
Causa: Falha no handshake SSL - pode indicar que o hard-fail está funcionando corretamente.
Solução: Na verdade, isso é um sinal positivo! O hard-fail está impedindo o acesso quando o OCSP falha.
# Verifique se o respondedor OCSP está em execução
docker-compose ps ocsp-responder
# Veja o erro detalhado
python poc_exploit.py # Já fornece logging detalhado
Causa: A porta 8443 ou 8888 já está em uso.
# Encontre o processo usando a porta
lsof -i :8443
lsof -i :8888
# Encerre o processo ou use portas diferentes no docker-compose.yml
# Logs do Tomcat
docker-compose logs -f vulnerable-tomcat
# Logs do respondedor OCSP
docker-compose logs -f ocsp-responder
# Depuração do script Python
python poc_exploit.py # Já inclui logging detalhado
# Abra um terminal e execute
docker-compose logs -f
# Em outro terminal, execute o teste
python poc_exploit.py
# Teste a conectividade com o respondedor OCSP
curl http://localhost:8888/
# Teste o respondedor OCSP de dentro do contêiner Tomcat
docker exec vulnerable-tomcat curl http://ocsp-responder:8888/
# Teste o handshake SSL
openssl s_client -connect localhost:8443 \
-cert certs/client-cert.pem \
-key certs/client-key.pem \
-CAfile certs/ca-chain.pem
Para remover todos os contêineres, volumes, certificados e logs:
No Linux/macOS:
./cleanup.sh
No Windows (PowerShell):
.\cleanup.ps1
O que isso faz:
certs/ geradologs/Verifique a limpeza:
docker-compose ps # Deve mostrar nada
ls -la certs/ # Não deve existir
Este projeto é apenas para fins de teste de segurança educacional e autorizado.
Para mitigar esta vulnerabilidade, atualize o Apache Tomcat para as seguintes versões:
| Série de Versão | Versão Mínima Corrigida |
|---|---|
| 11.0.x | 11.0.20 ou posterior |
| 10.1.x | 10.1.53 ou posterior |
| 9.0.x | 9.0.116 ou posterior |
Passos para atualização:
# Exemplo: Atualize o docker-compose.yml para usar a versão corrigida
# Altere: image: tomcat:10.1.52-jdk17
# Para: image: tomcat:10.1.53-jdk17
docker-compose down
docker-compose up -d
Para problemas, perguntas ou contribuições, abra uma issue ou envie um pull request.
Última Atualização: Abril de 2026
Status: Teste e Documentação Concluídos