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

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

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

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

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

Категории

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

CVE-2026-40860

Воспроизведение для CVE-2026-40860 — небезопасная десериализация JMS ObjectMessage в Apache Camel camel-jms/sjms/amqp (RCE)

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

Популярное

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

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

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

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

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

camel-jms JMS ObjectMessage Unsafe Deserialization Reproducer (CVE-2026-40860)

Этот проект демонстрирует уязвимость десериализации Java в компоненте camel-jms Apache Camel (и, транзитивно, camel-sjms, camel-sjms2, camel-amqp, camel-activemq, camel-activemq6), отслеживаемую как CVE-2026-40860. JmsBinding.extractBodyFromJms() десериализует полезную нагрузку входящего JMS ObjectMessage через ObjectMessage.getObject() без ObjectInputFilter, без белого или чёрного списка классов. Поскольку это происходит всегда, когда mapJmsMessage=true (значение по умолчанию), а Camel является JMS потребителем, злоумышленник, способный опубликовать сформированный ObjectMessage в потребляемую очередь/топик, может достичь удалённого выполнения кода, если на classpath присутствует цепочка гаджетов.

Уведомление: https://camel.apache.org/security/CVE-2026-40860.html

Сводка уязвимости

СвойствоЗначение
Компонентыcamel-jms (+ camel-sjms, camel-sjms2, camel-amqp, camel-activemq, camel-activemq6)
Затрагиваемый классorg.apache.camel.component.jms.JmsBinding#extractBodyFromJms → jakarta.jms.ObjectMessage#getObject()
CWECWE-502: Десериализация ненадёжных данных
ВлияниеУдалённое выполнение кода (RCE)
ТриггерПотребитель JMS Camel + mapJmsMessage=true (по умолчанию) + ObjectMessage, который злоумышленник может поставить в очередь
Затрагиваемые версииНачиная с 3.0.0 до 4.14.7, с 4.15.0 до 4.18.2, с 4.19.0 до 4.20.0
Исправленные версии4.14.7, 4.18.2, 4.20.0
JIRACAMEL-23321
Автор отчётаVenkatraman Kumar (Securin)

Технические детали

// JmsBinding.extractBodyFromJms(Exchange, Message) - affected version
if (message instanceof ObjectMessage objectMessage) {
    Object payload = objectMessage.getObject();   // <-- десериализует без ObjectInputFilter
    if (payload instanceof DefaultExchangeHolder holder) {
        ...
    }
    return payload;
}

getObject() запускает ObjectInputStream.readObject() JMS-провайдера над телом сообщения. Camel не добавляет собственной фильтрации классов, поэтому цепочка гаджетов на classpath выполняется во время десериализации.

Что делает исправление (и его ограничения)

Исправление (4.14.7 / 4.18.2 / 4.20.0) добавляет белый список ObjectInputFilter по умолчанию (java.**;javax.**;org.apache.camel.**;!*), настраиваемый через новый параметр конечной точки deserializationFilter или общеjvm-ный -Djdk.serialFilter. Обратите внимание на собственное сообщение коммита Camel об исправлении:

эта проверка выполняется после того, как JMS-провайдер уже десериализовал полезную нагрузку. Она предотвращает распространение неожиданных классов в маршрут, но сама по себе не может остановить цепочки гаджетов, чей readObject() срабатывает внутри ObjectInputStream провайдера. Полная защита требует настройки собственного фильтра десериализации JMS-провайдера и/или общеjvm-ного -Djdk.serialFilter.

Таким образом, полная защита = обновить Camel + ограничить провайдер/JVM-фильтр. Этот PoC использует клиент ActiveMQ с trustAllPackages=true (часто встречающаяся реальная настройка), поэтому провайдер десериализует полезную нагрузку; на уязвимой версии Camel больше ничего не мешает.

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

from("jms:queue:evil")            // mapJmsMessage по умолчанию true
    .log("Consumed: ${body.class.name}");

Простое получение ObjectMessage запускает десериализацию — тело маршрута не имеет значения.

Структура репозитория — злоумышленник vs. жертва

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

CVE-2026-40860/
├── pom.xml                 # camel-jms 4.18.1 + activemq-client 6.2.4 + commons-collections 3.2.1 (гаджет)
├── Dockerfile              # запускает приложение (--add-opens только для сборки гаджета)
├── docker-compose.yml      # брокер Artemis (quay.io) + приложение-воспроизводитель
├── README.md
└── src/main/
    ├── java/com/example/
    │   ├── Application.java
    │   ├── JmsConfig.java          # OpenWire ConnectionFactory (trustAllPackages=true) + jms компонент
    │   ├── VictimRoute.java        # жертва: from("jms:queue:evil")
    │   ├── Gadget.java             # гаджет CommonsCollections6, срабатывает во время getObject()
    │   └── ExploitController.java  # злоумышленник: публикует ObjectMessage(гаджет) в очередь
    └── resources/
        └── application.properties

В реальной атаке сериализованные байты создаются офлайн злоумышленником (например, с помощью ysoserial); только жертве нужна цепочка гаджетов на своём classpath. Для удобства этот PoC строит гаджет внутри процесса, поэтому JVM запускается с --add-opens java.base/java.util=ALL-UNNAMED — это деталь конструирования гаджета, не связанная с уязвимостью.

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

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

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

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

mvn clean package -DskipTests
docker compose up -d --build

Это запускает брокер Artemis (quay.io/artemiscloud/activemq-artemis-broker) и приложение-воспроизводитель, которое подключается к нему по OpenWire.

Шаг 2: Запуск десериализации (RCE)

curl -s http://localhost:8080/exploit/attack
# -> ObjectMessage опубликован в очередь 'evil'.
#    потребитель camel-jms вызвал ObjectMessage.getObject() -> десериализация.
#
#    >>> Доказательство RCE — /tmp/pwned существует: true

Шаг 3: Проверка

docker exec cve-2026-40860 ls -la /tmp/pwned

Очистка

docker compose down

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

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

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

  1. Потребитель JMS Camel с mapJmsMessage=true (по умолчанию).
  2. Злоумышленник может поставить в очередь ObjectMessage в потребляемое место назначения.
  3. JMS-провайдер десериализует полезную нагрузку (например, ActiveMQ trustAllPackages=true, или провайдер без ограничительного фильтра).
  4. Библиотека гаджетов на classpath (здесь commons-collections:3.2.1).

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

Обновитесь до 4.14.7 / 4.18.2 / 4.20.0 и ограничьте десериализацию от начала до конца:

  • Установите общеjvm-ный белый список: -Djdk.serialFilter=java.**;org.apache.camel.**;!* (или новый параметр конечной точки deserializationFilter).
  • Настройте собственный фильтр десериализации JMS-провайдера (например, trustedPackages ActiveMQ, не используйте trustAllPackages=true).

Смягчение

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

  1. Отдавайте предпочтение полезным нагрузкам не-ObjectMessage; установите mapJmsMessage=false там, где сырое сообщение приемлемо.
  2. Ограничьте доверенные пакеты JMS-провайдера; никогда не используйте trustAllPackages=true на ненадёжных местах назначения.
  3. Примените -Djdk.serialFilter.
  4. Удалите библиотеки гаджетов с classpath (обновите/удалите commons-collections 3.x и аналогичные).

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

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

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