
Prova de conceito executável para CVE-2026-80312, uma falha de segurança do tipo fail-open no guarda OAuth do Apache Camel camel-oauth, com reprodutores Spring Boot e Quarkus afetados e corrigidos.
Reprodutor de prova de conceito executável para a vulnerabilidade do Apache Camel em que os processadores camel-oauth que protegem
uma rota não interrompiam o exchange quando a autenticação não podia ser concluída. Onde uma falha ao estabelecer uma
sessão autenticada deveria ter encerrado o roteamento e retornado um erro, o processador definia um código de resposta mas
devolvia o controle à rota — assim, a requisição continuava até o endpoint protegido como se a autenticação tivesse
sido bem-sucedida. O resultado é uma guarda de autenticação fail-open: um chamador não autenticado alcança o que quer que a rota
faça em seguida, no caminho normal da requisição, sem nenhuma configuração especial.
| Runtime | Diretório | Stack |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-oauth 4.22.0 (afetado; corrigido em 4.22.1), HTTP via camel-undertow |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.39.0 + camel-quarkus-oauth 3.39.0 (Camel 4.22.0, afetado; controle corrigido 3.40.0 / Camel 4.22.1), HTTP via camel-quarkus-platform-http |
Ambos os módulos demonstram o comportamento afetado e o corrigido. (O módulo Spring Boot usa camel-undertow como
transporte HTTP — a guarda é agnóstica ao transporte, e o camel-platform-http-starter 4.22.0 é compilado contra uma
linha diferente do Spring Boot que a 3.5.x.)
Uma rota expõe /protected, protegida por OAuthBearerTokenProcessor; apenas uma requisição autenticada deveria alcançar as
etapas protegidas que se seguem. O atacante envia GET /protected sem o cabeçalho Authorization.
exchange.setRouteStop(true), então a rota
prosseguia para as etapas protegidas → HTTP 200 e o corpo protegido.rejectUnauthorized(...), que responde 401 e interrompe a rota → as etapas protegidas
nunca são executadas.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:
Sent: GET /protected (NO Authorization header)
Response status: 200
Response body : PROTECTED-DATA: reached the protected endpoint WITHOUT authenticating
>>> PROVEN: the OAuth guard failed open ...
No build corrigido: Response status: 401, corpo Authorization header, etapas protegidas nunca executadas.
| Propriedade | Valor |
|---|---|
| Componente | camel-oauth (processadores de proteção de rotas, por exemplo OAuthBearerTokenProcessor) |
| CWE | CWE-287 (Autenticação Imprópria) |
| Severidade | ALTA |
| Vetor de ataque | Uma requisição comum a uma rota protegida por OAuth onde a autenticação não pode ser concluída (aqui: sem cabeçalho Authorization) |
| Impacto | Acesso não autenticado ao endpoint protegido (bypass de autenticação) |
| Versões Afetadas | De 4.11.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-24411 |
| Crédito | Claude Security Scan Tool |
Aviso: https://camel.apache.org/security/CVE-2026-80312.html
Os processadores de proteção agora chamam rejectUnauthorized(...) / reject(...) em todos os caminhos onde a autenticação não pode ser
concluída, o que define o status HTTP (401) e chama exchange.setRouteStop(true) para que nenhuma etapa subsequente seja executada
para uma requisição que o processador não autenticou. "A ausência de credenciais deve ser rejeitada pelo menos com a mesma força que
credenciais inválidas."
Coloque uma verificação de autorização explícita após a proteção, ou garanta que a rota seja encerrada quando a
propriedade de exchange CamelOAuthUserProfile estiver ausente, até que você 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.