
Apache Camelの脆弱性に対する実行可能な概念実証(PoC)再現ツールです。この脆弱性では、camel-hazelcastがCVE-2026-43865のハードニングが到達しなかった2つの設定パス上で、JavaSerializationFilterConfigなしでHazelcastインスタンスを作成していました。これらのパスでは、Camelによって構築されたHazelcastメンバー/クライアントが、クラス制限なしでクラスタから読み取った値をデシリアライズするため、クラスタに公開できる攻撃者が、任意のシリアライズされたJavaオブジェクトをHazelcastのシリアライゼーション層内でデシリアライズさせることが可能になります — これがリモートコード実行(CWE-502)です。Hazelcastクラスタはデフォルトで認証もTLSも有効になっていません。
この再現ツールは、2つのパスのうち最も明確なもの、すなわち**ReplicatedHazelcastAggregationRepository**を駆動します。これはsuper.doStart()を呼び出さずにdoStart()をオーバーライドしており、影響を受けるビルドではデフォルトフィルタを適用せずに独自のローカルメンバーを起動します。(もう一方のパスであるhazelcastMode=client向けのHazelcastDefaultComponent#getOrCreateHzClientInstance()も、同じ修正でカバーされています。)
| ランタイム | ディレクトリ | スタック |
|---|---|---|
| Camel Spring Boot | camel-spring-boot/ | Spring Boot 3.5.13 + camel-hazelcast 4.22.0(影響あり、4.22.1で修正) |
| Camel Quarkus | camel-quarkus/ | Quarkus 3.29.0 + camel-quarkus-hazelcast 3.29.0(Camel 4.15.0、影響あり) |
修正済みと影響ありの対照: 修正はCamel 4.18.5 / 4.22.1 / 4.23.0で提供されます。Spring Bootモジュールは影響を受けるビルド(4.22.0)と修正済みビルド(4.22.1)の両方を実行できるため、パッチ適用済みの挙動も実演できます。修正済みのCamelを同梱したCamel Quarkusのリリースはまだ存在しないため(最新の3.29.0はCamel 4.15.0を使用)、Quarkusモジュールは影響を受けるケースのみを実演します。
このアプリは、外部から提供されたHazelcastInstanceを持たないReplicatedHazelcastAggregationRepositoryに支えられたCamelルートを実行するため、リポジトリは独自のローカルHazelcastメンバー(デフォルトクラスタdev、ポート5701)を起動します。影響を受けるビルドでは、そのメンバーにJavaSerializationFilterConfigがありません。
次に攻撃者クライアントがクラスタに参加し、シリアライズされたオブジェクトをバッキングReplicatedMapに公開します。Hazelcastのクライアントはバイトを送信するだけで、マップの値を保存もデシリアライズもしないため、発生するデシリアライゼーションはすべて被害者メンバーに起因すると特定できます。公開されるオブジェクトは意図的に無害なマーカーcom.example.PwnMarkerです。これはガジェットチェーンを持たず、コマンドも実行せず、自身のreadObjectが実行されたことだけを(JVMグローバルフラグ経由で)記録します。実際の攻撃者はここでRCEのために既知のガジェットクラスを公開するでしょうが、クラスがデシリアライズされたこと自体を証明すれば十分です。
修正のデフォルトフィルタはjava.、javax.、org.apache.camel.のクラス名プレフィックスのホワイトリストであるため、com.example.PwnMarkerは完璧なオラクルとなります:
PwnMarkerがデシリアライズされ、被害者メンバー上でreadObjectが実行される → PROVEN(実証済み)。readObjectの前にcom.example.PwnMarkerを拒否する → java.lang.SecurityException: Resolving class com.example.PwnMarker is not allowed → 悪用されず。cd camel-spring-boot
mvn clean package
docker compose up -d --build
curl -s http://localhost:8080/exploit/attack
docker compose down
影響を受けるビルドで期待される出力:
=== CVE-2026-78162 — camel-hazelcast ReplicatedHazelcastAggregationRepository ===
=== missing JavaSerializationFilterConfig on the Camel-built member ===
Attacker client joined the victim cluster 'dev' at 127.0.0.1:5701.
Attacker published a com.example.PwnMarker into ReplicatedMap 'aggregation'.
Result:
>>> PROVEN: the Camel-built Hazelcast member deserialized an attacker-supplied, non-whitelisted
>>> class (com.example.PwnMarker) with no JavaSerializationFilterConfig in effect — its readObject
>>> executed inside the victim. A real attacker would publish a gadget class here instead, for RCE.
>>> PwnMarker.readObject executed inside the victim member; tag=attacker-rce-marker; thread=hz.*.partition-operation.thread-1
| プロパティ | 値 |
|---|---|
| コンポーネント | camel-hazelcast (camel-hazelcast-starter / camel-quarkus-hazelcast) |
| CWE | CWE-502 (信頼できないデータのデシリアライズ) |
| 深刻度 | MEDIUM |
| 攻撃ベクトル | 影響を受けるインスタンスが接続している Hazelcast クラスタに公開できる攻撃者。Camel が構築したメンバー/クライアントが、公開されたオブジェクトをクラス制限なしでデシリアライズする |
| 影響 | Camel がエクスチェンジを処理する前に、Camel プロセス内で (ガジェットクラスを介して) リモートコード実行が発生する |
| 影響を受けるバージョン | 4.0.0 から 4.18.5 未満、4.19.0 から 4.22.1 未満 |
| 修正済みバージョン | 4.18.5、4.22.1、4.23.0 |
| JIRA | CAMEL-24413、CAMEL-24420 |
| クレジット | TCBS の cattier、Leon Zlobecki |
アドバイザリ: https://camel.apache.org/security/CVE-2026-78162.html
HazelcastSerializationFilterHelper.applyDefault(...) に ClientConfig のオーバーロードが追加され、これまで未対応だった
2 つの経路 — ReplicatedHazelcastAggregationRepository#doStart() と
HazelcastDefaultComponent#getOrCreateHzClientInstance() — の両方で呼び出されるようになりました。これにより、Camel が
自身で構築するすべての Hazelcast 設定に、デフォルトの JavaSerializationFilterConfig (ホワイトリスト java. / javax. /
org.apache.camel.、ブラックリスト java.net.) が適用されます。ユーザーが指定した Config、ClientConfig、または
HazelcastInstance は引き続き変更されません。このアドバイザリは、CVE-2026-43865
に対する不完全な修正の後続です。
JavaSerializationFilterConfig を含む明示的な Hazelcast 設定を指定するか、事前に構築した
HazelcastInstance を注入してください (ユーザーが指定した設定が Camel によって上書きされることはありません)。JVM 全体の
-Djdk.serialFilter=... を設定し、Hazelcast クラスタの認証と TLS を有効にしてください。
このリポジトリは教育および防御目的で公開されています。Apache Camel ユーザーが脆弱性を理解し、影響を受けているかどうかを 確認し、アップグレードによって解決されることを検証できるようにするためです。ペイロードはコードを実行しない無害な マーカーです。所有または運用していないシステムに対してこの資料を使用しないでください。