CVE-2026-71300 в Apache HTTP Server: инъекция заголовков в маршрутизации WebSocket

CVE: CVE-2026-71300
Продукт: Apache HTTP Server
Дата публикации: 24.08.2026
Критичность: CRITICAL
CVSS: 9.8 (3.1)
EPSS: 0,23%; процентиль 13,30%
CISA KEV: нет подтверждения в каталоге CISA KEV

Краткое описание​


Уязвимость в компоненте Apache Camel Atmosphere Websocket позволяет внешнему отправителю подменить заголовки маршрутизации, перехватывая или блокируя доставку сообщений. Ошибка затрагивает версии Camel от 4.0.0 до исправленных 4.14.9, 4.18.4 и 4.22.0. Механика основана на том, что имена заголовков не попадают под фильтрацию HttpHeaderFilterStrategy, что нарушает границу доверия между HTTP-консумером и WebSocket-продюсером.

Основные характеристики​


Идентификатор: CVE-2026-71300. Классификация: CWE-20 (Некорректная валидация ввода). Оценка CVSS 3.1: 9.8 (CRITICAL). Вектор: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H. EPSS: 0.00228 (процентиль 0.13%). Статус в NVD: Received. Дата публикации: 24.08.2026. Компонент: Apache Camel Atmosphere Websocket. Тип атаки: инъекция заголовков и перехват управления маршрутизацией. Уязвимость существует с версии 2.17.0, когда были введены соответствующие константы, и оставалась неизменной до выпуска исправлений.

Какие продукты и версии затронуты​


Уязвимы версии Apache Camel: от 4.0.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. Важно: уязвимость находится в компоненте Camel, а не в ядре Apache HTTP Server. Если Camel интегрирован с HTTP-консумерами, работающими под управлением Apache HTTP Server, риск распространяется на всю цепочку обработки запросов, где нарушена изоляция недоверенных заголовков.

Причина уязвимости​


Причина кроется в нарушении границы доверия при обработке заголовков Exchange. Компонент WebsocketEndpoint наследует HttpHeaderFilterStrategy, который фильтрует только заголовки с префиксами Camel и camel. Имена заголовков маршрутизации (websocket.connectionKey, websocket.connectionKey.list и др.) используют точку как разделитель и не попадают под этот фильтр. В результате HTTP-консумеры принимают эти заголовки от внешних клиентов без проверки. Producer читает эти значения напрямую через in.getHeader, минуя стратегию фильтрации, что позволяет внешнему отправителю управлять логикой доставки сообщений.

Как работает атака​


Атакующий отправляет обычный HTTP-запрос с заголовком websocket.connectionKey.list. Camel HTTP binding преобразует повторяющиеся имена заголовков или значения в квадратных скобках в List. WebsocketProducer.process проверяет список заголовков раньше одиночного ключа. Если список присутствует, он заменяет получателя, выбранного маршрутом. Это позволяет направить уведомление другому клиенту, чей connection key известен атакующему, или полностью заблокировать доставку. Заголовок не должен быть query-параметром; достаточно обычного HTTP-заголовка в теле запроса.

Условия успешной эксплуатации​


Для эксплуатации необходимо: 1) наличие маршрута, связывающего HTTP-консумер с atmosphere-websocket producer; 2) доступность HTTP-консумера для внешних запросов; 3) знание connection key целевого WebSocket-клиента (для перенаправления) или возможность блокировать доставку. Аутентификация не требуется (PR:N). Сложность атаки низкая (AC:L).

Возможный сценарий атаки​


Сценарий: приложение использует Camel для отправки push-уведомлений через WebSocket. Маршрут принимает HTTP-запрос, извлекает данные и направляет их в WebSocket-продюсер. Атакующий отправляет HTTP-запрос с заголовком websocket.connectionKey.list, содержащим ключ другого пользователя. Продюсер видит список и перенаправляет сообщение. Жертва получает чужие данные, а целевой пользователь не получает уведомление. Это нарушает конфиденциальность и целостность доставки.

Есть ли публичный эксплойт​


Публичный эксплойт в виде готового PoC или подтвержденной эксплуатации в реальных атаках в доступных источниках не указан. Существует техническое описание уязвимости и исправление. Отсутствие сведений о PoC не означает, что эксплойт не существует; механика атаки проста и может быть воспроизведена на основе документации.

Признаки эксплуатации​


Специфичные IOC для CVE-2026-71300 не опубликованы. Неспецифичные точки контроля: 1) наличие заголовков websocket.* в HTTP-запросах к эндпоинтам, связанным с Camel; 2) аномальные паттерны доставки WebSocket-сообщений (несоответствие между отправителем и получателем); 3) логи Camel с ошибками маршрутизации. Эти признаки требуют корреляции с контекстом приложения.

Как обнаружить атаку​


Для обнаружения: 1) настройте логирование HTTP-заголовков на уровне Apache HTTP Server или балансировщика; 2) ищите заголовки с префиксом websocket. в запросах к API, использующим Camel; 3) анализируйте логи Camel на предмет аномальных значений connectionKey. Интеграция с SIEM позволит автоматизировать поиск таких паттернов. Важно: детекция должна учитывать легитимное использование заголовков внутри доверенной сети.

Как проверить свою версию​


Проверьте версию Apache Camel, а не Apache HTTP Server. Команды для проверки версии HTTP-сервера (не заменяют проверку Camel):

Bash:
apache2 -v
httpd -v
apachectl -V 2>/dev/null || apache2ctl -V 2>/dev/null

Для Camel: проверьте зависимости в pom.xml или build.gradle. Убедитесь, что версия не входит в диапазон 4.0.0–4.14.9, 4.15.0–4.18.4, 4.19.0–4.22.0. Заполнитель <имя-пакета> в командах сборки нужно заменить на фактическое имя артефакта camel-atmosphere-websocket.

Исправление​


Основное исправление: обновление Apache Camel до версий 4.14.9, 4.18.4 или 4.22.0. Исправление переименовывает строковые значения заголовков в пространство имен Camel (например, websocket.connectionKey становится CamelAtmosphereWebsocketConnectionKey). Это breaking change для маршрутов, использующих литеральные строки. Маршруты, ссылающиеся на константы WebsocketConstants символически, не требуют изменений. Обновите документацию и код, если используются хардкод-строки.

Временные меры защиты​


Если обновление невозможно: 1) удалите заголовки маршрутизации на границе доверия перед продюсером. Пример: вставьте removeHeaders("websocket.") между HTTP-консумером и atmosphere-websocket producer. 2) Не связывайте недоверенный HTTP-консумер напрямую с WebSocket-продюсером, если маршрутизация зависит от заголовков. 3) Ограничьте доступ к HTTP-эндпоинтам, использующим Camel, через WAF или firewall, блокируя заголовки websocket..

Как проверить устранение уязвимости​


После обновления: 1) проверьте версию Camel в зависимостях; 2) протестируйте маршруты на предмет корректной работы (символические константы должны работать); 3) отправьте тестовый HTTP-запрос с заголовком websocket.connectionKey.list и убедитесь, что он игнорируется или отклоняется; 4) проверьте логи на предмет ошибок маршрутизации. Убедитесь, что breaking change не сломал существующие маршруты, использующие литеральные строки.

Вывод​


CVE-2026-71300 демонстрирует риски нарушения границ доверия в интеграционных фреймворках. Хотя уязвимость находится в Camel, а не в Apache HTTP Server, системы, использующие оба компонента, подвержены риску. Обновление до исправленных версий и применение временных мер по фильтрации заголовков снижают опасность. Регулярный аудит конфигураций Camel и HTTP-сервера необходим для предотвращения подобных инцидентов.

Официальные источники​


  1. NVD — CVE-2026-71300
  2. FIRST EPSS — CVE-2026-71300
  3. Apache Camel Security Advisory - CVE-2026-71300 - Apache Camel
  4. Apache HTTP Server 2.4 vulnerabilities - The Apache HTTP Server Project

История обновлений статьи​


  • 26.08.2026 — Опубликована первая версия материала.
 
Назад
Верх Низ