
Reproductor ejecutable de Spring Boot y Quarkus para CVE-2026-85260, que demuestra el registro de PHI de camel-mllp en las versiones afectadas y su supresión tras la corrección.
Reproductor de prueba de concepto ejecutable para la vulnerabilidad de Apache Camel en la que la opción logPhi del componente camel-mllp tenía como valor predeterminado true, de modo que un despliegue que no hacía nada escribía el contenido del payload HL7 — datos de pacientes — en el registro de la aplicación sin configuración adicional. (Otras dos rutas de código registraban el contenido del payload independientemente de la configuración, por lo que incluso un operador que había desactivado logPhi seguía expuesto en esas rutas). MLLP transporta mensajes clínicos HL7, por lo que el contenido en cuestión es PHI, y llegaba a los registros de aplicación ordinarios, sujeto a cualquier retención, agregación y acceso que el despliegue aplique a los registros en lugar de a los registros clínicos.
| Runtime | Directorio | Stack |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-mllp 4.22.0 (afectado; corregido en 4.22.1) |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.29.0 + camel-quarkus-mllp (Camel 4.15.0, afectado; control corregido CQ 3.40.0 / Camel 4.22.1) |
Ambos módulos demuestran el comportamiento afectado y el corregido.
Un consumidor MLLP (servidor TCP) recibe mensajes HL7. El componente registra el payload recibido en DEBUG (por lo que los loggers de MLLP se elevan a DEBUG, y los registros se escriben en mllp-phi.log). El driver actúa como emisor HL7: encapsula un mensaje HL7 cuyo campo PID (nombre del paciente) lleva un marcador benigno PHI-MARKER-DOE-JANE-5E1F en el sobre MLLP y lo envía, luego lee el archivo de registro.
Se envían dos mensajes en la misma conexión a propósito: el consumidor procesa el primero desde su lectura de validación, y el segundo a través de su bucle de recepción — que es la ruta que registra el payload recibido.
logPhi tiene como valor predeterminado true, por lo que el registro contiene Received 170 byte message MSH|…PID|…| PHI-MARKER-DOE-JANE-5E1F^Jane… — los datos del paciente textualmente.logPhi tiene como valor predeterminado false, por lo que el registro muestra <PHI suppressed> en su lugar.# 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>
| Propiedad | Valor |
|---|---|
| Componente | camel-mllp (logPhi por defecto; TcpSocketConsumerRunnable, MllpSocketBuffer, Hl7Util) |
| CWE | CWE-532 (Inserción de información sensible en el archivo de registro) |
| Gravedad | MEDIA |
| Vector de ataque | Mensajes HL7 recibidos por un consumidor MLLP que se ejecuta con la configuración predeterminada y el registro en nivel DEBUG |
| Impacto | Información de salud protegida (datos de pacientes) escrita en los registros normales de la aplicación |
| Versiones afectadas | Desde 4.0.0 anterior a 4.18.5, desde 4.19.0 anterior a 4.22.1 |
| Versiones corregidas | 4.18.5, 4.22.1, 4.23.0 |
| JIRA | CAMEL-24454 |
| Crédito | Claude Security Scan Tool |
Aviso: https://camel.apache.org/security/CVE-2026-85260.html
La corrección cambia el valor predeterminado de logPhi de true a false en
MllpComponent, y dirige el registro de la carga útil a través de los nuevos auxiliares convertToLoggableString/toLoggableStringAndReset
(y el valor PHI_SUPPRESSED_REPLACEMENT_VALUE = "<PHI suppressed>" de Hl7Util), de modo que las rutas que antes ignoraban el
indicador ahora lo respetan. Se trata de un valor predeterminado modificado: una implementación que dependía del registro de la carga útil ahora debe establecer
logPhi=true de forma explícita.
Establezca logPhi=false, y tenga en cuenta que dos rutas seguirán registrando el contenido de la carga útil hasta que se aplique la corrección;
restrinja el acceso a los registros en consecuencia.
Este repositorio se publica con fines educativos y defensivos: para ayudar a los usuarios de Apache Camel a comprender la vulnerabilidad, verificar si se ven afectados y confirmar que la actualización la resuelve. El mensaje HL7 y sus datos de "paciente" son datos de prueba locales ficticios e inertes. No utilice este material contra sistemas que no sean de su propiedad o que no opere.