
Работающий reproducer на Spring Boot и Quarkus для CVE-2026-85247, демонстрирующий резервный режим доверия всем сертификатам (trust-all) в TLS для camel-knative и проверяющий исправление.
Запускаемый воспроизводитель proof-of-concept для уязвимости Apache Camel, при которой включение SSL в HTTP-клиенте Knative без настройки truststore приводило к доверию любому предъявленному сертификату вместо доверия к доверенным корневым сертификатам 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 именно из этих настроек — те же параметры, которые использует HTTP-продюсер Knative — и выполняет с ними 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 (Некорректная проверка сертификатов) |
| Уровень серьёзности | MEDIUM |
| Вектор атаки | Сетевой man-in-the-middle против HTTP-клиента Knative, в котором включён SSL, но не настроено хранилище доверенных сертификатов |
| Воздействие | Зашифрованное соединение без аутентификации узла: доверяется любой сертификат, поэтому 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. Теперь TrustAllOptions достигается только при
явной установке camel.knative.client.ssl.trust.all=true (это по-прежнему доступно для разработки
против кластера с самоподписанным сертификатом). После обновления развёртывание, полагавшееся на неявное поведение
доверия всем сертификатам, должно либо настроить хранилище доверенных сертификатов, либо намеренно задать trust.all.
Явно настройте хранилище доверенных сертификатов везде, где на HTTP-клиенте Knative включён SSL.
Этот репозиторий публикуется в образовательных и защитных целях: чтобы помочь пользователям Apache Camel понять уязвимость, проверить, затронуты ли они, и убедиться, что обновление её устраняет. Самоподписанное хранилище ключей — это инертный локальный артефакт. Не используйте этот материал против систем, которыми вы не владеете и которые не обслуживаете.