
PoC-воспроизводитель для CVE-2026-49042 (Apache Camel camel-langchain4j-tools): аргументы вызова инструментов LLM, внедрённые через промпт-инъекцию, становятся нефильтрованными заголовками Exchange, перехватывая exec:-приёмник маршрута инструмента для RCE. Исправлено в 4.14.8/4.18.3/4.21.0.
Готовые к запуску PoC-репродукторы одной и той же уязвимости Apache Camel, по одному на каждую среду выполнения:
| Среда выполнения | Каталог | Стек | Перехваченный приёмник | Демонстрируемые последствия |
|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.2.0 + camel-spring-boot 4.18.2 | exec: через CamelExecCommand* | удалённое выполнение кода |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.36.0 + Camel Quarkus 3.36.0 (включает Camel 4.20.0) | http через CamelHttpUri | SSRF + раскрытие секретов |
Обе — затронутые версии (исправлено в 4.14.8 / 4.18.3 / 4.21.0), и обе демонстрируют один и тот же дефект: LangChain4jToolsProducer#invokeTools копирует каждое поле JSON-аргументов вызова инструмента модели прямо в заголовки Exchange, без проверки на соответствие объявленной схеме параметров. Инструмент объявляет один параметр (host), но модель с инъекцией в промпт формирует дополнительные поля, которые попадают в управляющие заголовки Camel и перехватывают управление любым продюсером, используемым маршрутом инструмента ниже по цепочке (CWE-20).
Ни настоящая LLM, ни API-ключ не нужны: инъекция целиком содержится в аргументах вызова инструмента, которые формирует модель-заглушка, ровно так, как их сформировала бы взломанная модель или модель, подвергшаяся непрямой инъекции в промпт.
Вариант на Spring Boot доказывает RCE через приёмник exec:. Этот приёмник недоступен по умолчанию в Camel 4.20.0 (именно эту версию включает Camel Quarkus 3.36.0): в CAMEL-23315 в camel-exec добавлена опция allowControlHeaders, по умолчанию false, впервые появившаяся в 4.20.0. Это усиление не связано с данной CVE и не устраняет её — в 4.20.0 внедрённые поля по-прежнему становятся заголовками Exchange (проверено по логу маршрута); лишь этот единственный нижестоящий приёмник перестал учитывать свои управляющие заголовки. Поэтому вариант на Quarkus перехватывает продюсер http, который учитывается по умолчанию, и вдобавок протаскивает Camel property placeholder, который продюсер разрешает, — что даёт SSRF плюс раскрытие реального секрета приложения.
Каждый подкаталог — это самодостаточный проект со своими Dockerfile, docker-compose.yml и README. Если коротко, для любого из них:
cd camel-spring-boot # or: cd camel-quarkus
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack
docker compose down
| Свойство | Значение |
|---|---|
| Компонент | camel-langchain4j-tools (также camel-langchain4j-agent, camel-spring-ai-tools) |
| Затронутый класс | org.apache.camel.component.langchain4j.tools.LangChain4jToolsProducer#invokeTools |
| CWE | CWE-20 (Некорректная проверка входных данных) — нефильтруемые аргументы вызова инструмента становятся управляющими заголовками Exchange |
| Воздействие | RCE / SSRF / произвольная запись файлов, в зависимости от нижестоящего продюсера маршрута инструмента |
| Затронутые версии | 4.8.0–4.14.7, 4.15.0–4.18.2, 4.19.0–4.20.x |
| Исправленные версии | 4.14.8, 4.18.3, 4.21.0 |
| JIRA | CAMEL-23621 (PR apache/camel#23535) |
| Автор находки | Yu Bao (PayPal) |
Уведомление об уязвимости: https://camel.apache.org/security/CVE-2026-49042.html
Эти репродукторы предназначены только для исследований в области безопасности и авторизованного тестирования публично раскрытой и исправленной уязвимости. Не используйте их против систем без явного разрешения.