
Reprodutores executáveis em Spring Boot e Quarkus para a CVE-2026-84180, demonstrando o vazamento de exceções do consumidor HTTP do camel-knative e verificando a correção muteException.
Reprodutor de prova de conceito executável para a vulnerabilidade do Apache Camel em que o consumidor HTTP Knative, quando uma
exchange falhava no lado do consumidor, gravava a exceção resultante de volta ao chamador remoto como o corpo da resposta
HTTP — incluindo o nome da classe, a mensagem e o rastreamento de pilha completo. Um remetente externo poderia, portanto, provocar uma falha
e ler detalhes internos sobre a implantação: nomes de classes e pacotes, nomes de sistema de arquivos ou de host contidos nas mensagens
de exceção, a forma da rota e — quando uma mensagem de exceção incorpora uma string de conexão ou configuração — esses
dados diretamente. O camel-knative era o consumidor restante da família HTTP que ainda não havia sido alinhado ao comportamento
muteException estabelecido para os outros consumidores HTTP pela CAMEL-23651.
| Runtime | Diretório | Stack |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-knative 4.22.0 (afetado; corrigido em 4.22.1), consumidor no servidor platform-http Vert.x do Camel |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.29.0 + camel-quarkus-knative (Camel 4.15.0, afetado; controle corrigido CQ 3.40.0 / Camel 4.22.1), consumidor no Quarkus HTTP |
Ambos os módulos demonstram o comportamento afetado e o corrigido.
Uma rota source (consumidor) HTTP Knative recebe um CloudEvent e então falha ao processá-lo — representando
qualquer rota que encontre um erro interno (uma consulta a datasource que falhou, um timeout a jusante, um bug). A rota lança uma
IllegalStateException cuja mensagem carrega detalhes internos simulados: um hostname interno falso
(internal-db.prod.svc.cluster.local), uma URL JDBC falsa e um token marcador INTERNAL-DETAIL-MARKER-7F3A2B. O atacante
é simplesmente um chamador remoto: ele envia via POST um CloudEvent bem formado ao consumidor e lê a resposta que o consumidor
devolve.
at com.example... / do framework.muteException (padrão
true), de modo que o status de erro é retornado, mas nenhum detalhe da exceção chega ao chamador.# Camel Spring Boot
cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack # affected: stack trace leaks; prints >>> PROVEN
docker compose down
# Patched control: rebuild with the fixed version, then run on the host
mvn clean package -Dcamel.version=4.22.1
java -jar target/cve-2026-84180-knative-info-disclosure-0.0.1-SNAPSHOT.jar &
curl -s http://localhost:8080/exploit/attack # fixed: empty body; prints >>> Not exploited
# Camel Quarkus
cd camel-quarkus
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack # affected (Camel 4.15.0): stack trace leaks; >>> PROVEN
docker compose down
# Patched control: CQ 3.40.0 ships Camel 4.22.1
mvn clean package -Dcamel-quarkus.version=3.40.0 -Dquarkus.platform.version=3.40.0
java -jar target/quarkus-app/quarkus-run.jar &
curl -s http://localhost:8080/exploit/attack # fixed: empty body; >>> Not exploited
| Propriedade | Valor |
|---|---|
| Componente | camel-knative (consumidor HTTP Knative, KnativeHttpConsumer.computeResponseBody) |
| CWE | CWE-209 (Geração de Mensagem de Erro Contendo Informações Sensíveis) |
| Severidade | MÉDIA |
| Vetor de ataque | Um chamador remoto provoca uma falha de rota no lado do consumidor e lê o detalhe da exceção a partir do corpo da resposta |
| Impacto | Divulgação de informações: classe/mensagem/stack trace da exceção (nomes de host internos, nomes de pacotes, formato da rota, strings de conexão embutidas) chegam a um remetente externo |
| Versões Afetadas | A partir de 4.0.0 antes de 4.18.5, a partir de 4.19.0 antes de 4.22.1 |
| Versões Corrigidas | 4.18.5, 4.22.1, 4.23.0 |
| JIRA | CAMEL-24428 |
| Crédito | Claude Security Scan Tool |
Aviso: https://camel.apache.org/security/CVE-2026-84180.html
KnativeHttpConsumer.computeResponseBody agora verifica uma nova
opção muteException (consumidor, padrão true). Quando silenciada, uma troca com falha produz um corpo de resposta vazio
(new byte[0]) em vez do stack trace — o corpo vazio é intencional para que o status de erro seja preservado (um
corpo null faria o chamador enviar 204 No Content). Defina muteException=false para restaurar a saída anterior.
Isso alinha o camel-knative com os demais consumidores da família HTTP (CAMEL-23651).
Adicione um manipulador onException à rota do consumidor que defina o corpo da resposta explicitamente (por exemplo, para um corpo
vazio ou uma mensagem genérica), para que o framework nunca escreva a exceção de volta ao chamador.
Este repositório é publicado para fins educacionais e defensivos: para ajudar os usuários do Apache Camel a entender a vulnerabilidade, verificar se são afetados e confirmar que a atualização a resolve. O nome de host "interno", a URL JDBC e o token marcador na rota com falha são fixtures locais inertes e fictícios — nenhum segredo real está envolvido. Não use este material contra sistemas que você não possui ou opera.