
Рабочий воспроизводитель proof-of-concept для CVE-2026-80344 в Apache Camel camel-as2, демонстрирующий асинхронный SSRF через MDN и раскрытие учётных данных на уязвимой и исправленной сборках.
Запускаемый воспроизводитель proof-of-concept для уязвимости Apache Camel, при которой AS2-получатель доставлял
асинхронное уведомление о доставке сообщения (MDN) на адрес, указанный отправителем (параметр
Receipt-Delivery-Option), без каких-либо ограничений. Таким образом, удалённый партнёр выбирает хост, к которому
экземпляр Camel подключается при доставке MDN — это server-side request forgery с позиции AS2-получателя, достигающий
хостов, маршрутизируемых только изнутри сети развёртывания, — а если доставка MDN настроена с учётными данными, эти
учётные данные предъявляются выбранному атакующим назначению.
| Среда выполнения | Каталог | Стек |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-as2 4.22.0 (уязвим; исправлено в 4.22.1) |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.29.0 + camel-quarkus-as2 3.29.0 (Camel 4.15.0, уязвим; исправленный контроль 3.40.0 / Camel 4.22.1) |
Приложение запускает в одной JVM:
as2://server/listen, порт 8888), настроенный с учётными данными для доставки MDN;as2://client/send), который отправляет одно неподписанное (PLAIN) AS2-сообщение,
запрашивающее асинхронный MDN, с receiptDeliveryOption, указывающим на внутренний URL (127.0.0.1:9099,
порт, который Docker не публикует — он изображает хост, доступный только изнутри развёртывания);В уязвимой сборке получатель подключается к выбранному атакующим внутреннему URL для доставки MDN и
предъявляет ему свои учётные данные для доставки MDN (Authorization: Basic …). В исправленной сборке эти
учётные данные не передаются (они прикрепляются только к хостам из белого списка), а новая опция
asyncMdnAllowedHosts полностью ограничивает хост доставки.
cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack
docker compose down
Ожидаемый вывод на затронутой сборке:
Internal host connections observed:
POST /internal-mdn-sink (Authorization=Basic bWRuLXBhcnRuZXItdXNlcjpNRE4tREVMSVZFUlktU0VDUkVU)
>>> PROVEN: the AS2 receiver connected to the sender-chosen internal URL to deliver the async MDN
>>> (server-side request forgery) AND presented its configured MDN-delivery credentials ...
(Значение Authorization декодируется в mdn-partner-user:MDN-DELIVERY-SECRET.) На исправленной сборке соединение
показывает Authorization=null — учётные данные больше не передаются узлу, выбранному отправителем.
| Свойство | Значение |
|---|---|
| Компонент | camel-as2 |
| CWE | CWE-918 (подделка запросов на стороне сервера); раскрытие учётных данных (CWE-200) |
| Критичность | ВЫСОКАЯ |
| Вектор атаки | AS2-отправитель, запрашивающий асинхронный MDN с адресом Receipt-Delivery-Option, выбранным атакующим |
| Воздействие | Подделка запросов на стороне сервера со стороны получателя (доступ к внутренним узлам); раскрытие учётных данных доставки MDN узлу, выбранному атакующим |
| Затронутые версии | С 4.0.0 до 4.18.5, с 4.19.0 до 4.22.1 |
| Исправленные версии | 4.18.5, 4.22.1, 4.23.0 |
| JIRA | CAMEL-24417 |
| Благодарность | Claude Security Scan Tool |
Рекомендация: https://camel.apache.org/security/CVE-2026-80344.html
Назначение асинхронного MDN теперь ограничивается, а не берётся дословно из входящего сообщения. Новая
опция asyncMdnAllowedHosts (метка security) задаёт список разрешённых узлов, на которые может доставляться MDN, а
настроенные учётные данные доставки MDN прикрепляются только когда назначение входит в список разрешённых — поэтому по умолчанию
(без списка разрешённых) учётные данные никогда не передаются узлу, выбранному отправителем.
Ограничьте исходящие подключения от AS2-получателя конечными точками партнёров, которым он законно доставляет квитанции, и не прикрепляйте к доставке MDN учётные данные, действительные для каких-либо узлов, кроме этих партнёров.
Этот репозиторий публикуется в образовательных и защитных целях: чтобы помочь пользователям Apache Camel понять уязвимость, проверить, затронуты ли они, и убедиться, что обновление её устраняет. «Учётные данные» и внутренний приёмник являются неактивными локальными тестовыми объектами. Не используйте этот материал против систем, которыми вы не владеете и не управляете.