
Reprodutor Spring Boot executável para CVE-2026-85246, demonstrando a divulgação de exceções do consumidor camel-mina pelo socket e verificando a correção muteException.
Reprodutor de prova de conceito executável para a vulnerabilidade do Apache Camel em que o consumer Mina gravava
exchange.getException() diretamente de volta sobre o socket para o par remoto quando o processamento de um exchange falhava.
Sobre um codec textline, entrega ao par o nome da classe e a mensagem da exceção; sobre o codec de objetos, entrega
a exceção serializada, incluindo a cadeia de causas. Um par remoto capaz de provocar uma falha poderia ler detalhes internos
sobre a implantação — nomes de classes e pacotes, e tudo o que uma mensagem ou causa aninhada carregue, o que na
prática inclui caminhos, nomes de host e detalhes de conexão. O consumer não tinha opção de suprimir isso, ao contrário dos
consumers da família HTTP alinhados pelo CAMEL-23651.
Somente Spring Boot. Não existe extensão
camel-quarkus-mina, portanto este reprodutor inclui um único módulo Camel Spring Boot. (A falha está noMinaConsumerdo componente, que é independente de runtime.)
| Runtime | Diretório | Stack |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-mina 4.22.0 (afetado; corrigido em 4.22.1) |
Um consumer TCP Mina (sync=true, textline=true) processa cada linha recebida e falha — representando qualquer rota
que encontre um erro interno. A rota lança uma IllegalStateException cuja mensagem carrega detalhes internos
simulados (um caminho de configuração falso /etc/camel/secret.properties, um host falso e um token marcador). O driver de exploit é um
par TCP remoto comum: ele abre um socket, envia uma linha e lê a resposta que o consumer grava de volta.
java.lang.IllegalStateException: INTERNAL-DETAIL-MARKER-7F3A2B config=/etc/camel/secret.properties db=internal-db.prod.svc.java.lang.Exception: Exchange processing failed genérica — sem classe, mensagem ou stack
trace da exceção da rota — ainda respondendo, para que um par síncrono não fique esperando até o timeout.cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack # affected: exception leaks over the socket; >>> PROVEN
docker compose down
# Patched control
mvn clean package -Dcamel.version=4.22.1
java -jar target/cve-2026-85246-mina-info-disclosure-0.0.1-SNAPSHOT.jar &
curl -s http://localhost:8080/exploit/attack # fixed: generic reply; >>> Not exploited
| Propriedade | Valor |
|---|---|
| Componente | camel-mina (MinaConsumer.messageReceived) |
| CWE | CWE-209 (Geração de Mensagem de Erro Contendo Informações Sensíveis) |
| Severidade | MÉDIA |
| Vetor de ataque | Um par remoto TCP/UDP provoca uma falha de rota e lê a exceção a partir da resposta escrita de volta pelo socket |
| Impacto | Divulgação de informações: classe/mensagem da exceção pelo codec textline, ou a exceção serializada + cadeia de causas pelo codec de objetos (nomes de host internos, caminhos, detalhes de conexão) |
| Versões Afetadas | Da 4.0.0 anterior à 4.18.5, da 4.19.0 anterior à 4.22.1 |
| Versões Corrigidas | 4.18.5, 4.22.1, 4.23.0 |
| JIRA | CAMEL-24476 |
| Crédito | Claude Security Scan Tool |
Aviso: https://camel.apache.org/security/CVE-2026-85246.html
MinaConsumer adiciona uma opção de consumidor muteException (padrão true).
Quando habilitada, uma exchange com falha não escreve mais exchange.getException() de volta; em vez disso, escreve uma
Exception("Exchange processing failed") substituta com um stack trace vazio — ainda uma Exception (para que um par
com codec de objetos ainda receba uma), mas sem carregar classe, mensagem ou frames da exceção da rota. Uma resposta ainda é escrita para que um
par síncrono não fique esperando até o timeout. Defina muteException=false para restaurar o comportamento anterior.
Adicione um handler onException que defina o corpo da resposta explicitamente, para que o framework nunca escreva a exceção de volta
ao par.
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. O caminho de configuração, o host e o token marcador na rota com falha são fixtures locais inertes e fictícios. Não use este material contra sistemas que você não possui ou opera.