
Воспроизведение CVE-2026-46592: инъекция заголовка operationName в Apache Camel camel-cxf, перенаправляющая вызываемую SOAP-операцию (confused deputy) с операции чтения на деструктивную (исправлено в 4.14.8/4.18.3/4.21.0)
| Рантайм | Каталог | Стек | Бэкенд-сервис SOAP |
|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.2.0 + camel-spring-boot 4.18.2 | CXF ServerFactoryBean на отдельном порту :9000 |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.36.0 + Camel Quarkus 3.36.0 (включает Camel 4.20.0) | quarkus-cxf на управляемом сервере, /soapservice/account |
Обе версии затронуты уязвимостью (исправлено в 4.14.8 / 4.18.3 / 4.21.0), и обе демонстрируют один и тот же дефект:
CxfProducer#getBindingOperationInfo сначала ищет заголовок сообщения operationName и только при его отсутствии
обращается к defaultOperationName конечной точки. Значение этой константы заголовка — обычная строка
operationName, а не CamelCxfOperationName, поэтому фильтр на HTTP-границе (который удаляет только Camel*) пропускает
входящий HTTP-заголовок с таким именем напрямую. Недоверенный клиент добавляет operationName: deleteAccount, и
закреплённая, доступная только для чтения операция getBalance маршрута превращается в деструктивный вызов (CWE-441, confused deputy).
Два варианта различаются только тем, как поднимается бэкенд-сервис SOAP: вариант Quarkus публикует его с помощью quarkus-cxf на управляемом HTTP-сервере Quarkus (поэтому контракт несёт JAX-WS аннотации
@WebService), тогда как вариант Spring Boot создаёт его программно с помощью CXFServerFactoryBeanна отдельном порту. Дефект от этого не зависит.
Каждый подкаталог — это самостоятельный проект со своим Dockerfile, docker-compose.yml и README. В
кратце, для любого из них:
cd camel-spring-boot # или: cd camel-quarkus
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack
docker compose down
| Свойство | Значение |
|---|---|
| Компонент | camel-cxf (camel-cxf-soap; константа находится в camel-cxf-common, поэтому camel-cxfrs тоже затронут) |
| Затронутый класс | org.apache.camel.component.cxf.jaxws.CxfProducer#getBindingOperationInfo, читающий CxfConstants.OPERATION_NAME ("operationName") |
| CWE | CWE-20 (некорректная проверка входных данных) / CWE-441 (непреднамеренный прокси или посредник — confused deputy) |
| Воздействие | HTTP-клиент задаёт operationName → продюсер вызывает другую SOAP-операцию (например, деструктивную) |
| Затронутые версии | с 4.0.0 до 4.14.8, с 4.15.0 до 4.18.3, с 4.19.0 до 4.21.0 |
| Исправленные версии | 4.14.8, 4.18.3, 4.21.0 |
| JIRA | CAMEL-23526 (PR apache/camel#23326) |
| Автор | Yu Bao (PayPal) |
Консультация: https://camel.apache.org/security/CVE-2026-46592.html
Эти воспроизведения предоставлены только для исследований в области безопасности и авторизованного тестирования, для публично раскрытой и исправленной уязвимости. Не используйте их против систем без явного разрешения.