针对 Apache Camel 漏洞的可运行概念验证复现程序:在未配置 truststore 的情况下为 Knative HTTP 客户端启用 SSL 时,会退化为信任所有出示的证书,而不是使用 JVM 的默认信任锚。因此,一个在开启 TLS 时未同时配置 truststore 的部署,会获得一条加密但无对端认证的连接,位于网络路径上的攻击者可以终止该连接并读取内容。这一危险状态是通过遗漏配置达成的,而非显式选择——开启 TLS 本不应成为关闭证书验证的原因。
| 运行时 | 目录 | 技术栈 |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-knative 4.22.0(受影响;修复版本 4.22.1) |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.29.0 + camel-quarkus-knative(Camel 4.15.0,受影响;修复对照 CQ 3.40.0 / Camel 4.22.1) |
两个模块均演示了受影响以及修复后的行为。
该部署设置 camel.knative.client.ssl.enabled=true 且不配置任何 truststore。驱动程序完全依据这些设置构建真实的 KnativeSslClientOptions——与 Knative HTTP producer 使用的选项相同——并使用它们向一个内置服务器发起 HTTPS 请求,该服务器出示自签名证书(CN=localhost,不在任何 truststore 中),以此模拟 TLS 中间人攻击。
KnativeSslClientOptions.getTrustOptions() 为 TrustAllOptions,因此客户端接受该自签名证书,请求成功——加密但未经认证。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
| 属性 | 值 |
|---|---|
| 组件 | camel-knative(KnativeSslClientOptions.configureOptions) |
| CWE | CWE-295(证书验证不当) |
| 严重性 | 中危 |
| 攻击向量 | 针对启用了 SSL 但未配置信任库的 Knative HTTP 客户端的网络中间人攻击 |
| 影响 | 加密连接无对端身份验证:任何证书都会被信任,因此 TLS 可被拦截并读取 |
| 受影响版本 | 从 4.0.0 起至 4.18.5 之前,从 4.19.0 起至 4.22.1 之前 |
| 修复版本 | 4.18.5、4.22.1、4.23.0 |
| JIRA | CAMEL-24443 |
| 致谢 | Claude Security Scan Tool |
公告:https://camel.apache.org/security/CVE-2026-85247.html
随附的 server-keystore.p12 是一个一次性自签名密钥对(CN=localhost),仅为该复现程序生成。
KnativeSslClientOptions.configureOptions:当启用 SSL 但未配置密钥库、信任库或信任证书路径时,信任选项现在保持未设置,因此 Vert.x 会回退到 JVM 默认信任锚点——这与 SSLContextParameters 及 Camel 其余部分使用的回退机制相同。现在只有显式设置 camel.knative.client.ssl.trust.all=true 才会使用 TrustAllOptions(该选项仍可用于针对使用自签名证书的集群进行开发)。升级后,依赖隐式信任所有行为的部署必须配置信任库,或有意设置 trust.all。
在 Knative HTTP 客户端启用 SSL 的任何位置显式配置信任库。
本仓库出于教育和防御目的发布:帮助 Apache Camel 用户理解该漏洞、验证自身是否受影响,并确认升级可解决该问题。自签名密钥库是一个无实际作用的本地测试文件。请勿将本材料用于您不拥有或运营的系统。