
# Репроducer для проверки концепции обхода фильтра заголовков Apache Camel camel-undertow (CVE-2026-78329), демонстрирующий инъекцию заголовков websocket.* и содержащий сведения о затронутых версиях и проверке исправления.
websocket.*)Готовый к запуску репроducer (proof-of-concept) для уязвимости Apache Camel, в которой UndertowEndpoint по умолчанию использовал базовую HttpHeaderFilterStrategy в качестве своей headerFilterStrategy и помещал этот экземпляр в создаваемый им UndertowHttpBinding, перезаписывая UndertowHeaderFilterStrategy, которую устанавливает DefaultUndertowHttpBinding. Если развёртывание не предоставляло собственную привязку или явную headerFilterStrategy, специфичная для undertow фильтрация никогда не выполнялась — объект стратегии создавался и немедленно заменялся до того, как его можно было задействовать.
| Среда выполнения | Каталог | Стек |
|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-undertow 4.18.2 |
Camel Quarkus: расширения
camel-quarkus-undertowне существует (Quarkus использует собственный стек Vert.x HTTP), поэтому этот компонент нельзя запустить на Camel Quarkus — репроducer работает только на Spring Boot.
Следствие состоит в том, что устаревший префикс websocket. в заголовках Exchange не фильтруется на транспортной границе undertow ни в одном из направлений. Поэтому HTTP-потребитель undertow переносит входящие сетевые заголовки такого вида (websocket.connectionKey, websocket.connectionKey.list, websocket.sendToAll, …) в Exchange, где WebSocket-производитель undertow читает их как директивы маршрутизации и может быть принуждён к доставке не тому пиру, которому собирался доставить маршрут, — тот же класс перехвата маршрутизации, что и в случае atmosphere-websocket CVE-2026-71300.
Этот репроducer отправляет HTTP-запрос с заголовками маршрутизации websocket.* и управляющим заголовком Camel* и показывает, что фактически достигло Exchange: заголовки websocket.* пересекают границу (без фильтрации), тогда как Camel* отбрасывается, — это доказывает, что действовал базовый фильтр (а не undertow-фильтр).
cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack
docker compose down
Ожидаемый вывод на подверженной уязвимости сборке:
What actually reached the Exchange, as echoed by the undertow route:
websocket.connectionKey.list on Exchange = [attacker-connection-key]
websocket.sendToAll on Exchange = [true]
CamelFoo on Exchange (control) = []
>>> PROVEN: the undertow endpoint applied the base HttpHeaderFilterStrategy (Camel* filtered) instead of the
>>> UndertowHeaderFilterStrategy, so the legacy websocket.* dispatch headers passed onto the Exchange ...
| Свойство | Значение |
|---|---|
| Компонент | camel-undertow (camel-undertow-starter) |
| CWE | CWE-20 (Improper Input Validation) → CWE-74 (Injection) |
| Вектор атаки | Входящие заголовки websocket.* на HTTP-потребителе undertow, читаемые WebSocket-производителем undertow как директивы маршрутизации |
| Воздействие | Перехват решения WebSocket-производителя о маршрутизации — доставка произвольным WebSocket-пирам либо её блокировка |
| Затронутые версии | с 4.11.0 до 4.14.9, с 4.15.0 до 4.18.4, с 4.19.0 до 4.22.0 |
| Исправленные версии | 4.14.9, 4.18.4, 4.22.0 |
| JIRA | CAMEL-24360 |
| Благодарности | Andrea Cosentino (Apache Software Foundation); Barak Srour (Apiiro) |
Рекомендация: https://camel.apache.org/security/CVE-2026-78329.html
Конечная точка undertow больше не перезаписывает UndertowHeaderFilterStrategy привязки, которая фильтрует префикс websocket. (добавленный в CAMEL-23588) в обоих направлениях, — поэтому заголовки маршрутизации отбрасываются на транспортной границе, и внешний отправитель больше не может их внедрить.
Этот репозиторий опубликован в образовательных и защитных целях — помочь пользователям Apache Camel понять уязвимость, проверить, подвержены ли они ей, и убедиться, что обновление её устраняет. Не используйте этот материал против систем, которыми вы не владеете или которые не эксплуатируете.