
Рабочий воспроизводитель на Spring Boot и Quarkus для CVE-2026-85260, демонстрирующий логирование PHI в camel-mllp в уязвимых версиях и его подавление после исправления.
Запускаемый воспроизводитель proof-of-concept для уязвимости Apache Camel, при которой опция logPhi компонента camel-mllp по умолчанию имела значение true, поэтому развёртывание, не предпринявшее никаких действий, записывало содержимое полезной нагрузки HL7 — данные пациентов — в журнал приложения «из коробки». (Ещё два пути в коде записывали содержимое полезной нагрузки независимо от настройки, поэтому даже оператор, отключивший logPhi, оставался уязвимым на этих путях.) MLLP передаёт клинические сообщения HL7, поэтому затрагиваемое содержимое является PHI, и оно попадало в обычные журналы приложений, подчиняясь тем правилам хранения, агрегации и доступа, которые развёртывание применяет к журналам, а не к клиническим записям.
| Среда выполнения | Каталог | Стек |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-mllp 4.22.0 (уязвим; исправлено в 4.22.1) |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.29.0 + camel-quarkus-mllp (Camel 4.15.0, уязвим; исправлено в контрольной версии CQ 3.40.0 / Camel 4.22.1) |
Оба модуля демонстрируют как уязвимое, так и исправленное поведение.
Потребитель MLLP (TCP-сервер) принимает сообщения HL7. Компонент записывает полученную полезную нагрузку на уровне DEBUG (поэтому логгеры MLLP поднимаются до DEBUG, а журналы пишутся в mllp-phi.log). Драйвер выступает в роли отправителя HL7: он формирует HL7-сообщение, поле PID (имя пациента) которого содержит безвредный маркер PHI-MARKER-DOE-JANE-5E1F в конверте MLLP, и отправляет его, после чего читает файл журнала.
Два сообщения отправляются по одному соединению намеренно: потребитель обрабатывает первое из своего проверочного чтения, а второе — через свой цикл приёма, который и является путём, записывающим полученную полезную нагрузку.
logPhi по умолчанию имеет значение true, поэтому журнал содержит Received 170 byte message MSH|…PID|…| PHI-MARKER-DOE-JANE-5E1F^Jane… — данные пациента дословно.logPhi по умолчанию имеет значение false, поэтому в журнале вместо этого отображается <PHI suppressed>.# Camel Spring Boot
cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack # affected: PHI in the log; >>> PROVEN
docker compose down
# Patched control
mvn clean package -Dcamel.version=4.22.1
java -jar target/cve-2026-85260-mllp-phi-logging-0.0.1-SNAPSHOT.jar &
curl -s http://localhost:8080/exploit/attack # fixed: <PHI suppressed>; >>> 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.15.0): PHI in the log
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: <PHI suppressed>
| Свойство | Значение |
|---|---|
| Компонент | camel-mllp (logPhi по умолчанию; TcpSocketConsumerRunnable, MllpSocketBuffer, Hl7Util) |
| CWE | CWE-532 (Внесение конфиденциальной информации в лог-файл) |
| Критичность | СРЕДНЯЯ |
| Вектор атаки | HL7-сообщения, получаемые MLLP-консьюмером, работающим с настройками по умолчанию и логированием уровня DEBUG |
| Воздействие | Защищённая медицинская информация (данные пациентов) записывается в обычные журналы приложения |
| Уязвимые версии | С 4.0.0 до 4.18.5, с 4.19.0 до 4.22.1 |
| Исправленные версии | 4.18.5, 4.22.1, 4.23.0 |
| JIRA | CAMEL-24454 |
| Благодарность | Claude Security Scan Tool |
Рекомендация: https://camel.apache.org/security/CVE-2026-85260.html
Исправление меняет значение по умолчанию logPhi с true на false в
MllpComponent и направляет логирование полезной нагрузки через новые вспомогательные методы convertToLoggableString/toLoggableStringAndReset
(а также Hl7Util PHI_SUPPRESSED_REPLACEMENT_VALUE = "<PHI suppressed>"), так что пути, которые ранее игнорировали
флаг, теперь его соблюдают. Это изменённое значение по умолчанию: развёртывание, полагавшееся на логирование полезной нагрузки, теперь должно явно
задать logPhi=true.
Задайте logPhi=false и учитывайте, что два пути продолжат логировать содержимое полезной нагрузки до применения исправления —
ограничьте доступ к журналам соответствующим образом.
Этот репозиторий публикуется в образовательных и защитных целях: чтобы помочь пользователям Apache Camel понять уязвимость, проверить, затронуты ли они, и убедиться, что обновление её устраняет. HL7-сообщение и его «пациентские» данные являются инертными, вымышленными локальными фикстурами. Не используйте этот материал против систем, которыми вы не владеете и которые не эксплуатируете.