
Reprodutor executável em Spring Boot e Quarkus para a CVE-2026-85247, demonstrando o fallback trust-all de TLS do camel-knative e verificando a correção.
Reprodutor de prova de conceito executável para a vulnerabilidade do Apache Camel em que ativar SSL no cliente HTTP do Knative sem configurar um truststore fazia com que todas as certificações apresentadas fossem confiadas em vez de usar as âncoras de confiança padrão da JVM. Uma implantação que ativou o TLS sem também configurar um truststore obtinha, portanto, uma conexão criptografada sem autenticação do par, que um atacante posicionado no caminho da rede pode interceptar e ler. O estado perigoso é alcançado por omissão, não por uma adesão explícita — ativar o TLS não deveria ser o que desativa a validação de certificado.
| Runtime | Diretório | Stack |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-knative 4.22.0 (afetado; corrigido 4.22.1) |
| 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) |
Ambos os módulos demonstram o comportamento afetado e o corrigido.
A implantação define camel.knative.client.ssl.enabled=true e não configura nenhum truststore. O driver constrói o
KnativeSslClientOptions real exatamente a partir dessas configurações — as mesmas opções usadas pelo produtor HTTP do Knative — e
faz uma requisição HTTPS com elas a um servidor incluído que apresenta um certificado autoassinado (CN=localhost, em nenhum
truststore), representando um man-in-the-middle de TLS.
KnativeSslClientOptions.getTrustOptions() é TrustAllOptions, então o cliente aceita o certificado autoassinado
e a requisição é bem-sucedida — criptografada, mas não autenticada.SunCertPathBuilderException: unable to find valid certification path.# Camel Spring Boot
cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack # affected: trusts the self-signed cert; >>> PROVEN
docker compose down
# Patched control
mvn clean package -Dcamel.version=4.22.1
java -jar target/cve-2026-85247-knative-cert-validation-0.0.1-SNAPSHOT.jar &
curl -s http://localhost:8080/exploit/attack # fixed: handshake fails; >>> 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): trusts the self-signed cert
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: handshake fails
| Propriedade | Valor |
|---|---|
| Componente | camel-knative (KnativeSslClientOptions.configureOptions) |
| CWE | CWE-295 (Validação de Certificado Imprópria) |
| Severidade | MÉDIA |
| Vetor de ataque | Man-in-the-middle de rede contra um cliente HTTP Knative que habilitou SSL mas não configurou nenhum truststore |
| Impacto | Conexão criptografada sem autenticação do par: qualquer certificado é confiável, portanto o TLS pode ser interceptado e lido |
| 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-24443 |
| Crédito | Claude Security Scan Tool |
Aviso: https://camel.apache.org/security/CVE-2026-85247.html
O server-keystore.p12 incluído é um par de chaves autoatribuído descartável (CN=localhost) gerado apenas para este
reprodutor.
KnativeSslClientOptions.configureOptions: quando o SSL está habilitado sem
keystore, truststore ou caminho de certificado de confiança, as opções de confiança agora são deixadas sem definição,
de modo que o Vert.x recorre às âncoras de confiança padrão da JVM — o mesmo fallback usado por SSLContextParameters
e pelo restante do Camel. TrustAllOptions agora só é alcançado definindo camel.knative.client.ssl.trust.all=true
explicitamente (o que permanece disponível para desenvolvimento contra um cluster com certificado autoassinado). Após a
atualização, uma implantação que dependia do comportamento implícito de confiar em tudo deve configurar um truststore ou
definir trust.all deliberadamente.
Configure um truststore explicitamente sempre que o SSL estiver habilitado no cliente HTTP Knative.
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 keystore autoassinado é um fixture local inerte. Não use este material contra sistemas que você não possui ou opera.