
Reproducteur exécutable Spring Boot et Quarkus pour CVE-2026-85260, démontrant la journalisation PHI de camel-mllp dans les versions affectées et sa suppression après le correctif.
Reproducteur de preuve de concept exécutable pour la vulnérabilité Apache Camel où l'option logPhi du composant camel-mllp valait true par défaut, de sorte qu'un déploiement sans configuration écrivait le contenu de la charge utile HL7 — des données de patients — dans les journaux de l'application dès l'installation. (Deux autres chemins de code journalisaient le contenu de la charge utile indépendamment du réglage, si bien que même un opérateur ayant désactivé logPhi restait exposé sur ces chemins.) MLLP transporte des messages cliniques HL7, le contenu concerné est donc constitué de PHI, et il aboutissait dans les journaux applicatifs ordinaires, soumis à la politique de rétention, d'agrégation et d'accès que le déploiement applique aux journaux plutôt qu'aux dossiers cliniques.
| Runtime | Répertoire | Pile |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-mllp 4.22.0 (affecté ; corrigé en 4.22.1) |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.29.0 + camel-quarkus-mllp (Camel 4.15.0, affecté ; témoin corrigé CQ 3.40.0 / Camel 4.22.1) |
Les deux modules démontrent le comportement affecté et le comportement corrigé.
Un consommateur MLLP (serveur TCP) reçoit des messages HL7. Le composant journalise la charge utile reçue au niveau DEBUG (les loggers MLLP sont donc élevés à DEBUG, et les journaux sont écrits dans mllp-phi.log). Le pilote agit comme un émetteur HL7 : il encapsule un message HL7 dont le champ PID (nom du patient) porte un marqueur bénin PHI-MARKER-DOE-JANE-5E1F dans l'enveloppe MLLP et l'envoie, puis lit le fichier de journal.
Deux messages sont envoyés sur la même connexion à dessein : le consommateur traite le premier lors de sa lecture de validation, et le second via sa boucle de réception — qui est le chemin qui journalise la charge utile reçue.
logPhi vaut true par défaut, le journal contient donc Received 170 byte message MSH|…PID|…| PHI-MARKER-DOE-JANE-5E1F^Jane… — les données du patient mot pour mot.logPhi vaut false par défaut, le journal affiche donc <PHI suppressed> à la place.# 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>
| Propriété | Valeur |
|---|---|
| Composant | camel-mllp (logPhi par défaut ; TcpSocketConsumerRunnable, MllpSocketBuffer, Hl7Util) |
| CWE | CWE-532 (Insertion d'informations sensibles dans un fichier de journalisation) |
| Gravité | MOYENNE |
| Vecteur d'attaque | Messages HL7 reçus par un consommateur MLLP fonctionnant avec les paramètres par défaut et la journalisation DEBUG |
| Impact | Informations de santé protégées (données de patients) écrites dans les journaux d'application ordinaires |
| Versions affectées | De 4.0.0 avant 4.18.5, de 4.19.0 avant 4.22.1 |
| Versions corrigées | 4.18.5, 4.22.1, 4.23.0 |
| JIRA | CAMEL-24454 |
| Crédit | Claude Security Scan Tool |
Avis : https://camel.apache.org/security/CVE-2026-85260.html
Le correctif fait passer la valeur par défaut de logPhi de true à false dans
MllpComponent, et achemine la journalisation de la charge utile via les nouvelles fonctions d'assistance convertToLoggableString/toLoggableStringAndReset
(ainsi que la constante Hl7Util PHI_SUPPRESSED_REPLACEMENT_VALUE = "<PHI suppressed>"), de sorte que les chemins qui ignoraient auparavant
l'indicateur le respectent désormais. Il s'agit d'une modification de la valeur par défaut : un déploiement qui s'appuyait sur la journalisation de la charge utile doit désormais définir
logPhi=true explicitement.
Définissez logPhi=false, et sachez que deux chemins continueront de journaliser le contenu de la charge utile tant que le correctif n'est pas appliqué —
limitez l'accès aux journaux en conséquence.
Ce dépôt est publié à des fins éducatives et défensives : pour aider les utilisateurs d'Apache Camel à comprendre la vulnérabilité, à vérifier s'ils sont affectés et à confirmer que la mise à jour la résout. Le message HL7 et ses données « patient » sont des données fictives locales et inertes. N'utilisez pas ce contenu contre des systèmes que vous ne possédez pas ou n'exploitez pas.