
Рабочий воспроизводитель proof-of-concept для CVE-2026-85316, демонстрирующий непредусмотренный режим прокси при сопоставлении префиксов путей в Apache Camel camel-platform-http, с контролями на исправленных версиях.
Запускаемый воспроизводитель proof-of-concept для уязвимости Apache Camel, при которой camel-platform-http определял, работает ли
эндпоинт в режиме прокси, проверяя, начинается ли его настроенный путь со строки proxy, вместо
точного совпадения. Режим прокси превращает эндпоинт в catch-all (getPath() становится /), чья цель пересылки
берётся из собственного заголовка Host запроса. Таким образом, любой эндпоинт, путь которого лишь начинается с этих символов —
proxyStats, proxy-health, proxying, … — молча становился форвардинг-прокси, которого автор маршрута не запрашивал: примитив
подделки запросов и раскрытие всего, что может достичь путь пересылки (CWE-1220).
| Среда выполнения | Каталог | Стек |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-platform-http 4.22.0 (уязвим; исправлено в 4.22.1) |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.39.0 + camel-quarkus-platform-http (Camel 4.22.0, уязвим; контроль с исправлением CQ 3.40.0 / Camel 4.22.1) |
Оба модуля демонстрируют уязвимое и исправленное поведение на реальном PlatformHttpEndpoint.
Драйвер повторяет собственный регрессионный тест исправления (PlatformHttpEndpointProxyPathTest). Он создаёт
эндпоинт platform-http:proxyStats — эндпоинт статистики, имя которого случайно начинается с proxy — и спрашивает
компонент, является ли он прокси:
isHttpProxy() возвращает true, а getPath() схлопывается в catch-all / — эндпоинт был
превращён в форвардинг-прокси.isHttpProxy() возвращает false, а getPath() равен proxyStats — только точный путь proxy выбирает
режим прокси.Документированный эндпоинт platform-http:proxy остаётся прокси в обеих версиях (показан для контраста), подтверждая, что
исправление устраняет только непреднамеренную классификацию.
# Camel Spring Boot
cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack # affected: proxyStats isHttpProxy=true, path "/"; >>> PROVEN
docker compose down
# Patched control
mvn clean package -Dcamel.version=4.22.1
java -jar target/cve-2026-85316-platform-http-proxy-prefix-0.0.1-SNAPSHOT.jar &
curl -s http://localhost:8080/exploit/attack # fixed: isHttpProxy=false, path "proxyStats"; >>> 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.22.0): proxyStats isHttpProxy=true, path "/"
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: isHttpProxy=false, path "proxyStats"
| Свойство | Значение |
|---|---|
| Компонент | camel-platform-http (PlatformHttpEndpoint.isHttpProxy) |
| CWE | CWE-1220 (Недостаточная гранулярность контроля доступа) |
| Критичность | MEDIUM |
| Вектор атаки | Маршрут объявляет эндпоинт platform-http, путь которого начинается с proxy (но не предназначен для проксирования); он становится перехватывающим всё перенаправлением на заголовок Host вызывающей стороны |
| Воздействие | Непреднамеренное проксирование/подделка запросов и раскрытие всего, что доступно по пути перенаправления |
| Затронутые версии | С 4.0.0 до 4.18.5, с 4.19.0 до 4.22.1 |
| Исправленные версии | 4.18.5, 4.22.1, 4.23.0 |
| JIRA | CAMEL-24455 |
| Благодарность | Claude Security Scan Tool |
Рекомендация: https://camel.apache.org/security/CVE-2026-85316.html
Затронутый модуль Quarkus собран на CQ 3.39.0 (Camel 4.22.0). Исправленный элемент управления — CQ 3.40.0 (Camel 4.22.1). Демонстрация лишь создаёт и проверяет эндпоинт (
isHttpProxy()/getPath()), поэтому HTTP-сервер не запускается; модуль Spring Boot использует обычный компонентcamel-platform-http, а не стартер.
PlatformHttpEndpoint.isHttpProxy() теперь сравнивает путь на равенство
с proxy (PROXY_PATH.equals(this.path)), а не использует startsWith, поэтому в режиме прокси работает только
документированный эндпоинт platform-http:proxy.
Переименуйте любой путь эндпоинта, который начинается с proxy, но не предназначен для проксирования.
Этот репозиторий публикуется в образовательных и защитных целях: чтобы помочь пользователям Apache Camel понять уязвимость, проверить, затронуты ли они, и убедиться, что обновление её устраняет. Демонстрация лишь проверяет классификацию эндпоинта в процессе и не перенаправляет никакой трафик. Не используйте этот материал против систем, которыми вы не владеете и не управляете.