
Prova de conceito executável para CVE-2026-80343, um bypass de sensibilidade a maiúsculas/minúsculas em security-constraint do camel-netty-http, com reprodutores Spring Boot e Quarkus e verificação de correção.
Reprodutor de prova de conceito executável para a vulnerabilidade do Apache Camel em que a restrição de segurança do camel-netty-http comparava o caminho da requisição com o caminho de contexto configurado usando uma correspondência sensível a maiúsculas/minúsculas, enquanto o roteamento que despacha a requisição para o endpoint não aplicava a mesma regra. As duas comparações divergem para qualquer caminho cujo uso de maiúsculas/minúsculas difira do valor configurado: um chamador externo pode alterar o caso de um caractere no segmento do caminho de contexto para que a restrição de segurança deixe de reconhecer o caminho como protegido, enquanto a requisição ainda é despachada para o mesmo endpoint. A restrição é ignorada e a rota protegida é alcançada sem satisfazê-la — sem necessidade de credencial, acesso prévio ou configuração especial.
| Runtime | Diretório | Stack |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-netty-http 4.22.0 (afetado; corrigido em 4.22.1) |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.29.0 + camel-quarkus-netty-http 3.29.0 (Camel 4.15.0, afetado; controle corrigido 3.40.0 / Camel 4.22.1) |
Um consumidor netty-http escuta no caminho de contexto /app e é protegido por um SecurityConstraintMapping que protege /secret (relativo ao endpoint) com um autenticador que rejeita. Ambas as requisições abaixo não carregam credenciais:
GET /app/secret (caso configurado) → a restrição o reconhece como protegido → 401.GET /App/secret (caso do caminho de contexto alterado) → o extractTarget do handler remove o caminho de contexto apenas em um startsWith sensível a maiúsculas/minúsculas, então a remoção é ignorada e a restrição não reconhece o caminho como protegido → o roteador ainda o despacha para o endpoint /app → 200 e o corpo protegido, sem autenticação.Na build corrigida, ambas as requisições retornam 401.
cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack
docker compose down
Saída esperada na build afetada:
Configured case GET /app/secret -> status 401, body:
Altered case GET /App/secret -> status 200, body: PROTECTED-ADMIN-DATA: reached the protected endpoint
>>> PROVEN: /app/secret is correctly rejected (401), but /App/secret bypassed the security constraint ...
| Propriedade | Valor |
|---|---|
| Componente | camel-netty-http |
| CWE | CWE-178 (Tratamento inadequado de sensibilidade a maiúsculas/minúsculas) |
| Severidade | ALTA |
| Vetor de ataque | Uma requisição cujo caso do caminho de contexto difere do caminho do endpoint configurado |
| Impacto | Restrição de segurança ignorada; rota protegida alcançada sem autenticação |
| Versões afetadas | De 4.0.0 antes de 4.18.5, de 4.19.0 antes de 4.22.1 |
| Versões corrigidas | 4.18.5, 4.22.1, 4.23.0 |
| JIRA | CAMEL-24412 |
| Crédito | Claude Security Scan Tool |
Aviso: https://camel.apache.org/security/CVE-2026-80343.html
A restrição de segurança e o tratamento do caminho de contexto agora comparam o caminho de forma consistente (sem diferenciar maiúsculas/minúsculas no caminho de contexto), de modo que uma requisição com o caso alterado é reconhecida como protegida exatamente como sua forma no caso configurado e está sujeita à mesma autenticação.
Aplique a autorização na própria rota em vez de depender apenas da restrição de segurança do netty-http, ou normalize o caso do caminho da requisição antes da verificação de segurança, até que possa atualizar.
Este repositório é publicado para fins educacionais e defensivos: para ajudar usuários do Apache Camel a entender a vulnerabilidade, verificar se são afetados e confirmar que a atualização a resolve. Não use este material contra sistemas que você não possui ou opera.