
Работающий воспроизводитель на Spring Boot и Quarkus для CVE-2026-85254, демонстрирующий обход подавления эха заголовков в Apache Camel camel-platform-http через изменение регистра имён заголовков, с уязвимым и исправленным вариантами.
Запускаемый воспроизводитель proof-of-concept для уязвимости Apache Camel, при которой защитный механизм, предотвращающий отражение заголовка запроса в ответ, сравнивал имена заголовков с учётом регистра, тогда как имена HTTP-заголовков регистронезависимы. Вызывающая сторона могла обойти подавление, просто изменив регистр имени заголовка — а при HTTP/2 он вообще никогда не совпадал, поскольку протокол требует, чтобы имена заголовков передавались в нижнем регистре, поэтому подавление было неработоспособным для любого HTTP/2-запроса. Следствием является то, что выбранное вызывающей стороной содержимое отражается обратно в ответе (основа для атак типа response-splitting и отравления кэша), и в ответ попадают именно те заголовки с учётными данными (Authorization, Cookie, Proxy-Authorization), которые подавление призвано не допустить в ответ.
| Среда выполнения | Каталог | Стек |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-platform-http-vertx 4.22.0 (уязвимая; исправлена в 4.22.1), сервер Vert.x от Camel |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.29.0 + camel-quarkus-platform-http (Camel 4.15.0, уязвимая; контрольное исправление CQ 3.40.0 / Camel 4.22.1) |
Оба модуля демонстрируют как уязвимое, так и исправленное поведение.
Обслуживается эндпоинт platform-http:/echo. Его HeaderFilterStrategy должен подавлять передачу распространённых заголовков запроса в ответ. Драйвер проверяет стратегию напрямую, а также отправляет реальный запрос, содержащий заголовок с учётными данными в нижнем регистре (в стиле HTTP/2).
Authorization (канонический регистр), но не authorization (нижний регистр), и реальный запрос, содержащий authorization: Bearer <secret>, отражается обратно в ответе.# Camel Spring Boot
cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack # affected: lowercase header echoed back; >>> PROVEN
docker compose down
# Patched control
mvn clean package -Dcamel.version=4.22.1
java -jar target/cve-2026-85254-platform-http-header-echo-0.0.1-SNAPSHOT.jar &
curl -s http://localhost:8080/exploit/attack # fixed: suppressed; >>> 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): lowercase header echoed back
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: suppressed
| Свойство | Значение |
|---|---|
| Компонент | camel-platform-http (PlatformHttpEndpoint, COMMON_HTTP_REQUEST_HEADERS) |
| CWE | CWE-178 (Некорректная обработка регистрозависимости) |
| Критичность | MEDIUM |
| Вектор атаки | Заголовок запроса, имя которого отличается по регистру от канонического написания (например, любой запрос HTTP/2) |
| Воздействие | Выбранное вызывающей стороной содержимое заголовка отражается в ответе — расщепление ответа / отравление кэша, а также отражение заголовков учётных данных, которые подавление должно скрывать |
| Затронутые версии | С 4.0.0 до 4.18.5, с 4.19.0 до 4.22.1 |
| Исправленные версии | 4.18.5, 4.22.1, 4.23.0 |
| JIRA | CAMEL-24453 |
| Благодарность | Claude Security Scan Tool |
Уведомление: https://camel.apache.org/security/CVE-2026-85254.html
PlatformHttpEndpoint теперь хранит COMMON_HTTP_REQUEST_HEADERS в
регистронезависимом TreeSet(String.CASE_INSENSITIVE_ORDER) вместо регистрозависимого Set.of(...), поэтому
подавление срабатывает независимо от того, в каком регистре вызывающая сторона указала имя заголовка — включая
имена в нижнем регистре, которые требует HTTP/2.
Удаляйте соответствующие заголовки перед эндпоинтом Camel или удаляйте их из ответа в маршруте, вместо того чтобы полагаться на встроенное подавление.
Этот репозиторий публикуется в образовательных и защитных целях: чтобы помочь пользователям Apache Camel понять уязвимость, проверить, затронуты ли они, и убедиться, что обновление её устраняет. Внедряемое значение заголовка является инертным локальным фикстуром. Не используйте этот материал против систем, которыми вы не владеете и не управляете.