
Apache Camelの脆弱性に対する実行可能な概念実証 (PoC) 再現プログラムです。この脆弱性では、Smooksデータフォーマット
(.unmarshal().smooks(...)) と Smooksコンポーネント (smooks:) が、受信したXMLボディをSmooksがデフォルトで
解決するリーダー (Woodstox SAXパーサー) で解析していました。このリーダーは外部の一般エンティティおよびパラメータ
エンティティを解決し、外部DTDを読み込みます — そして camel-smooks は、他のCamel XMLコンポーネントが適用している
パーサーハードニングを一切適用していませんでした。したがって、XMLドキュメント内で宣言された外部サブセットを持つ
DOCTYPE、または外部の一般エンティティは、ボディがアンマーシャルされる際に解決・展開され、解決された内容が結果に
バインドされます。XMLが camel-smooks のデータフォーマットやエンドポイントに到達する外部の送信者は、Camelプロセスが
読み取り可能なファイルを読み取ったり、プロセスに内部ホストへのリクエストを発行させたりする可能性があります (CWE-611)。
非デフォルトのオプションは不要です — 外部エンティティの解決がデフォルトの動作でした。
Spring Bootのみ。 この再現プログラムには単一のCamel Spring Bootモジュールが含まれています。
camel-smooksにはcamel-quarkus-smooks拡張機能が存在しないため、再現すべきQuarkus版の対応物はありません。Spring Bootモジュールは、 影響を受ける動作および修正後の動作を示します。
| ランタイム | ディレクトリ | スタック |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-smooks 4.22.0 (影響あり; 修正版 4.22.1) |
ドライバーは修正自体の回帰テスト (SmooksDataFormatXmlSecurityTest) を模倣しています。無害なマーカーファイルが
一時ディレクトリに書き込まれ、XMLの <customer> ドキュメントが、標準の smooks-config.xml (ドキュメントを Customer
Beanにバインドする) を用いて実際の SmooksDataFormat を介してアンマーシャルされます。このドキュメントの firstName
は、マーカーファイルを指す外部エンティティです:
<!DOCTYPE customer [<!ENTITY xxe SYSTEM "file:///…/secret.txt">]>
<customer><firstName>&xxe;</firstName>…</customer>
Customer.firstName にバインドされます — ファイルが
アンマーシャルされた Bean に漏洩します。DocumentBuilder(外部エンティティおよび外部 DTD の読み込みを
無効化)で事前解析されるため、エンティティは解決されず、マーカーが現れることはありません。cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack # affected: firstName = the marker file content; >>> PROVEN
docker compose down
# Patched control
mvn clean package -Dcamel.version=4.22.1
java -jar target/cve-2026-88901-smooks-xxe-0.0.1-SNAPSHOT.jar &
curl -s http://localhost:8080/exploit/attack # fixed: firstName null, marker not leaked; >>> Not exploited
| プロパティ | 値 |
|---|---|
| コンポーネント | camel-smooks(Smooks データフォーマットおよびコンポーネント) |
| CWE | CWE-611(XML 外部エンティティ参照の不適切な制限) |
| 重大度 | HIGH |
| 攻撃ベクトル | 外部の送信者が、デフォルトの XML リーダーを使用する camel-smooks データフォーマットまたはエンドポイントによってアンマーシャリングされる XML メッセージ本文を提供する |
| 影響 | Camel プロセスが読み取り可能なローカルファイルの読み取り、ドキュメントが指定する内部ホストへの SSRF |
| 影響を受けるバージョン | 4.7.0 から 4.18.5 未満、4.19.0 から 4.22.1 未満 |
| 修正済みバージョン | 4.18.5、4.22.1、4.23.0 |
| JIRA | CAMEL-24677 |
| 報告者 | h1ei1 |
アドバイザリ: https://camel.apache.org/security/CVE-2026-88901.html
camel-smooks は、信頼できない XML を、FEATURE_SECURE_PROCESSING を設定し、外部一般エンティティ、外部パラメータエンティティ、および外部 DTD の読み込みを無効化した javax.xml.parsers.DocumentBuilder で事前解析し、その結果得られた DOM を Smooks に渡すようになりました。これは XmlConverter や他の Camel XML コンポーネントが使用する安全な設定と一致します。この強化は、Smooks 設定がデフォルトのリーダーで XML を解析する場合にのみ適用されます(したがって、EDI、CSV、JSON、カスタムリーダーの設定、およびマーシャリング方向は変更されません)。デフォルトで無効化された新しい allowExternalEntities オプションにより、信頼済みのレガシー設定に対して以前の動作を復元できます。
信頼できない送信者から受信した XML に camel-smooks を適用しないでください。
このリポジトリは教育および防御目的で公開されています。Apache Camel ユーザーが脆弱性を理解し、影響を受けているかどうかを確認し、アップグレードによって解決されることを検証できるようにするためのものです。「secret」ファイルは再現プログラム自体が一時ディレクトリに作成するもので、無害なマーカー文字列のみを含みます。チェック後に削除されます。所有または運用していないシステムに対してこの資料を使用しないでください。