
Запускаемый proof-of-concept на Spring Boot, воспроизводящий CVE-2026-84176 — уязвимость CORS с учётными данными и любым origin в Apache Camel camel-platform-http-vertx, с шагами проверки.
Запускаемый воспроизводитель proof-of-concept для уязвимости Apache Camel, в которой VertxPlatformHttpServerSupport. createCorsHandler() устанавливал Access-Control-Allow-Credentials: true вне проверки origin — поэтому этот заголовок
отправлялся в каждом ответе на запрос с заголовком Origin, включая ответы для origin, которые обработчик только что решил
не разрешать. Когда camel.server.cors.origins не задан, обработчик считает любой origin разрешённым и отражает
собственный Origin вызывающей стороны обратно в Access-Control-Allow-Origin. В совокупности это даёт конфигурацию
credentialed any-origin, которую спецификация fetch отказывается выражать литеральным wildcard — именно поэтому отражение
origin является обычным способом обойти это правило. Таким образом, страница на любом origin может выполнять
credentialed cross-origin запросы к эндпоинту Camel и читать ответы.
| Среда выполнения | Каталог | Стек |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-platform-http-vertx 4.22.0 (уязвим; исправлено в 4.22.1) |
Camel Quarkus: неприменимо. Уязвимый обработчик находится в собственном standalone-сервере Vert.x platform-http от Camel (
camel-platform-http-vertx). В Camel Quarkusplatform-httpобслуживается HTTP-сервером Quarkus, а CORS обрабатывается Quarkus (quarkus.http.cors.*), а неcreateCorsHandler(), поэтому данный конкретный дефект там недостижим. (Также не существуетcamel-platform-http-vertx-starter; модуль Spring Boot использует обычный артефактcamel-platform-http-vertx, который запускает собственный сервер Vert.x независимо от веб-сервера Spring Boot.)
Приложение запускает сервер Vert.x platform-http от Camel на порту 8081 с включённым CORS и без настроенных origins, а
также маршрут platform-http:/api. Атакующий отправляет GET /api с Origin: https://evil.example (origin, который никогда
не был в списке разрешённых) и проверяет ответ:
Access-Control-Allow-Origin: https://evil.example (отражён) и
Access-Control-Allow-Credentials: true.Access-Control-Allow-Credentials больше не предоставляется этому origin.cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack
docker compose down
Ожидаемый вывод на затронутой сборке:
Response CORS headers:
Access-Control-Allow-Origin = https://evil.example
Access-Control-Allow-Credentials = true
>>> PROVEN: the endpoint echoes the attacker's Origin ... and sends Access-Control-Allow-Credentials: true ...
| Свойство | Значение |
|---|---|
| Компонент | camel-platform-http-vertx |
| CWE | CWE-942 (Разрешающая междоменная политика с недоверенными доменами) |
| Уровень серьёзности | MEDIUM |
| Вектор атаки | Междоменный (с учётными данными) запрос с заголовком Origin к эндпоинту platform-http-vertx с включённым CORS и без настроенных источников |
| Воздействие | Любой источник может выполнять междоменные запросы с учётными данными и читать ответы |
| Затронутые версии | С 4.0.0 до 4.18.5, с 4.19.0 до 4.22.1 |
| Исправленные версии | 4.18.5, 4.22.1, 4.23.0 |
| JIRA | CAMEL-24436 |
| Благодарность | Claude Security Scan Tool |
Уведомление: https://camel.apache.org/security/CVE-2026-84176.html
Access-Control-Allow-Credentials: true больше не отправляется безусловно для каждого источника; учётные данные не
предоставляются источнику, который явно не разрешён, поэтому комбинация отражённого источника с учётными данными
(«учётные данные для любого источника») больше не возникает.
Задайте явный список разрешённых источников camel.server.cors.origins и не полагайтесь на междоменный доступ с
учётными данными из произвольных источников; разместите эндпоинт за прокси, который обеспечивает корректную политику CORS.
Этот репозиторий публикуется в образовательных и защитных целях: чтобы помочь пользователям Apache Camel понять уязвимость, проверить, затронуты ли они, и убедиться, что обновление её устраняет. Не используйте этот материал против систем, которыми вы не владеете и которые не эксплуатируете.