
Reproductor ejecutable de Spring Boot y Quarkus para CVE-2026-85247, que demuestra el fallback de confianza total TLS de camel-knative y verifica la corrección.
Reproductor de prueba de concepto ejecutable para la vulnerabilidad de Apache Camel en la que habilitar SSL en el cliente HTTP de Knative sin configurar un truststore hacía que se confiara en todos los certificados presentados en lugar de en los anclajes de confianza predeterminados de la JVM. Por lo tanto, un despliegue que activaba TLS sin configurar también un truststore obtenía una conexión cifrada sin autenticación del par, que un atacante situado en la ruta de red puede terminar e interceptar para leer. El estado peligroso se alcanza por omisión, no por una habilitación explícita: activar TLS no debería ser lo que desactiva la validación de certificados.
| Entorno de ejecución | Directorio | Stack |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-knative 4.22.0 (afectado; corregido en 4.22.1) |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.29.0 + camel-quarkus-knative (Camel 4.15.0, afectado; control corregido CQ 3.40.0 / Camel 4.22.1) |
Ambos módulos demuestran el comportamiento afectado y el corregido.
El despliegue establece camel.knative.client.ssl.enabled=true y no configura ningún truststore. El driver construye el
KnativeSslClientOptions real a partir exactamente de esos ajustes —las mismas opciones que usa el productor HTTP de Knative— y
realiza una petición HTTPS con ellas a un servidor incluido que presenta un certificado autofirmado (CN=localhost, no presente en ningún
truststore), en representación de un man-in-the-middle de TLS.
KnativeSslClientOptions.getTrustOptions() es TrustAllOptions, por lo que el cliente acepta el certificado autofirmado
y la petición tiene éxito: cifrada pero no 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
| Propiedad | Valor |
|---|---|
| Componente | camel-knative (KnativeSslClientOptions.configureOptions) |
| CWE | CWE-295 (Validación de certificados incorrecta) |
| Gravedad | MEDIA |
| Vector de ataque | Man-in-the-middle de red contra un cliente HTTP de Knative que habilitó SSL pero no configuró ningún truststore |
| Impacto | Conexión cifrada sin autenticación del par: se confía en cualquier certificado, por lo que TLS puede ser interceptado y leído |
| Versiones afectadas | Desde 4.0.0 anterior a 4.18.5, desde 4.19.0 anterior a 4.22.1 |
| Versiones corregidas | 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
El archivo server-keystore.p12 incluido es un par de claves autofirmado desechable (CN=localhost) generado únicamente para este
reproductor.
KnativeSslClientOptions.configureOptions: cuando SSL está habilitado sin
keystore, truststore ni ruta de certificado de confianza, las opciones de confianza ahora se dejan sin establecer, por lo que Vert.x recurre a los
anclajes de confianza predeterminados de la JVM — el mismo mecanismo de reserva que usan SSLContextParameters y el resto de Camel. Ahora solo se
llega a TrustAllOptions estableciendo camel.knative.client.ssl.trust.all=true de forma explícita (lo que sigue disponible para desarrollo
contra un clúster con un certificado autofirmado). Tras la actualización, una implementación que dependía del comportamiento implícito de confiar en todo
debe configurar un truststore o establecer trust.all deliberadamente.
Configure un truststore explícitamente siempre que SSL esté habilitado en el cliente HTTP de Knative.
Este repositorio se publica con fines educativos y defensivos: para ayudar a los usuarios de Apache Camel a comprender la vulnerabilidad, verificar si se ven afectados y confirmar que la actualización la resuelve. El keystore autofirmado es un elemento local inerte. No utilice este material contra sistemas que no sean de su propiedad o que no opere.