
Apache Camel の脆弱性を再現する実行可能な概念実証(PoC)です。この脆弱性では、camel-mllp コンポーネントの logPhi
オプションがデフォルトで true になっていたため、何も設定していないデプロイでも HL7 ペイロードの内容 — 患者データ — が
アプリケーションログにそのまま書き込まれていました。(さらに 2 つのコードパスがこの設定に関係なくペイロード内容をログに記録していたため、
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 送信者として動作します。
PID(患者名)フィールドに無害なマーカー PHI-MARKER-DOE-JANE-5E1F を含む HL7 メッセージを MLLP エンベロープでフレーミングして送信し、
その後ログファイルを読み取ります。
1 つの接続で 2 つのメッセージを意図的に送信しています。コンシューマーは 1 つ目を検証用の読み取りで処理し、 2 つ目を受信ループで処理します — これが受信ペイロードをログに記録するパスです。
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(ログファイルへの機密情報の挿入) |
| 重大度 | MEDIUM |
| 攻撃ベクトル | デフォルト設定かつ DEBUG ログが有効な状態で実行されている MLLP コンシューマーが受信する HL7 メッセージ |
| 影響 | 保護対象保健情報(患者データ)が通常のアプリケーションログに書き込まれる |
| 影響を受けるバージョン | 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
修正では、MllpComponent における logPhi のデフォルトを true から false に変更し、ペイロードのログ出力を新たな convertToLoggableString/toLoggableStringAndReset ヘルパー(および Hl7Util の PHI_SUPPRESSED_REPLACEMENT_VALUE = "<PHI suppressed>")を経由するようにしています。これにより、以前はこのフラグを無視していた経路もフラグに従うようになります。これはデフォルトの変更です:ペイロードのログ出力に依存していたデプロイメントでは、今後は logPhi=true を明示的に設定する必要があります。
logPhi=false を設定してください。ただし、修正が適用されるまで 2 つの経路では引き続きペイロードの内容がログに記録されることに注意し、それに応じてログへのアクセスを制限してください。
このリポジトリは教育および防御目的で公開されています:Apache Camel ユーザーが脆弱性を理解し、影響を受けているかどうかを確認し、アップグレードによって解決されることを検証できるようにするためです。HL7 メッセージおよびその「患者」データは、無害な架空のローカルフィクスチャです。所有または運用していないシステムに対してこの資料を使用しないでください。