
Reproducer eseguibile per Spring Boot e Quarkus per CVE-2026-85247, che dimostra il fallback TLS trust-all di camel-knative e verifica la correzione.
PoC riproducibile ed eseguibile della vulnerabilità di Apache Camel in cui l'abilitazione di SSL sul client HTTP Knative senza configurare un truststore ricadeva sul considerare attendibile ogni certificato presentato anziché sulle trust anchor predefinite della JVM. Un deployment che attivava TLS senza configurare anche un truststore otteneva quindi una connessione cifrata senza autenticazione del peer, che un attaccante posizionato sul percorso di rete può terminare e leggere. Lo stato pericoloso viene raggiunto per omissione, non tramite un opt-in esplicito — attivare TLS non dovrebbe essere ciò che disattiva la convalida del certificato.
| Runtime | Directory | Stack |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-knative 4.22.0 (affetto; corretto in 4.22.1) |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.29.0 + camel-quarkus-knative (Camel 4.15.0, affetto; controllo corretto CQ 3.40.0 / Camel 4.22.1) |
Entrambi i moduli dimostrano il comportamento affetto e quello corretto.
Il deployment imposta camel.knative.client.ssl.enabled=true e non configura alcun truststore. Il driver costruisce il vero KnativeSslClientOptions esattamente da quelle impostazioni — le stesse opzioni usate dal producer HTTP Knative — ed effettua una richiesta HTTPS con esse verso un server incluso che presenta un certificato autofirmato (CN=localhost, in nessun truststore), che rappresenta un man-in-the-middle TLS.
KnativeSslClientOptions.getTrustOptions() è TrustAllOptions, quindi il client accetta il certificato autofirmato e la richiesta riesce — cifrata ma non autenticata.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
| Proprietà | Valore |
|---|---|
| Componente | camel-knative (KnativeSslClientOptions.configureOptions) |
| CWE | CWE-295 (Validazione non corretta dei certificati) |
| Gravità | MEDIA |
| Vettore di attacco | Man-in-the-middle di rete contro un client HTTP Knative che ha abilitato SSL ma non ha configurato alcun truststore |
| Impatto | Connessione cifrata senza autenticazione del peer: qualsiasi certificato viene considerato attendibile, quindi il TLS può essere intercettato e letto |
| Versioni interessate | Dalla 4.0.0 precedente alla 4.18.5, dalla 4.19.0 precedente alla 4.22.1 |
| Versioni corrette | 4.18.5, 4.22.1, 4.23.0 |
| JIRA | CAMEL-24443 |
| Riconoscimento | Claude Security Scan Tool |
Avviso: https://camel.apache.org/security/CVE-2026-85247.html
Il file server-keystore.p12 incluso è una coppia di chiavi autofirmate usa e getta (CN=localhost) generata solo per questo
reproducer.
KnativeSslClientOptions.configureOptions: quando SSL è abilitato senza
keystore, truststore o percorso trust-cert, le opzioni di trust ora vengono lasciate non impostate, così Vert.x ricade
sulle trust anchor predefinite della JVM — lo stesso fallback usato da SSLContextParameters e dal resto di Camel. Ora
TrustAllOptions viene raggiunto solo impostando esplicitamente camel.knative.client.ssl.trust.all=true (che rimane
disponibile per lo sviluppo contro un cluster con un certificato autofirmato). Dopo l'aggiornamento, un deployment che
faceva affidamento sul comportamento implicito di trust-all deve configurare un truststore oppure impostare
deliberatamente trust.all.
Configurare esplicitamente un truststore ovunque SSL sia abilitato sul client HTTP Knative.
Questo repository è pubblicato per scopi educativi e difensivi: per aiutare gli utenti di Apache Camel a comprendere la vulnerabilità, verificare se sono interessati e confermare che l'aggiornamento la risolve. Il keystore autofirmato è un fixture locale inerte. Non utilizzare questo materiale contro sistemi di cui non si è proprietari o gestori.