
CVE-2026-82222の概念実証エクスプロイト。GiveWP WordPressプラグインのバージョン4.16.7.1以前における、認証不要のPHPオブジェクトインジェクションを介したリモートコード実行につながる脆弱性です。
| 範囲 | 到達可能か |
|---|
<= 4.16.5.1 | デフォルトインストール。公開済みフォーム1件、有効なゲートウェイ1件。 |
4.16.6 から 4.16.7.1 | レガシー(非V3)フォームが存在する場合は可能。新規のV3のみのインストールでは不可。 |
Python 3.8+ と requests が必要です。
pip install requests
python cve-2026-82222.py http://127.0.0.1:8080
python cve-2026-82222.py http://127.0.0.1:8080 --check
python cve-2026-82222.py http://127.0.0.1:8080 42 -c id
python cve-2026-82222.py http://127.0.0.1:8080 -g offline
-c のデフォルトは id です。コマンド内に < > & % は使用できません。スペースは ${IFS} に置き換えられます。
検出に失敗した場合はフォームIDを渡してください。有効なゲートウェイが見つからない場合は -g を渡してください。
寄付リクエストはHTTP 500またはタイムアウトを返すことがよくあります。これは想定内です。セッションの書き込みが先に行われます。system() の出力は次のリクエスト(/?give_action=view_receipt など)に含まれ、ディスク上のファイルには保存されません。
その他のオプションは python cve-2026-82222.py -h で確認してください。
POST give_action=user_register を送信します。GiveWP がアカウントを作成し、認証Cookieを設定します。users_can_register は参照されません。/wp-admin/profile.php を通じて last_name に保存されます。give_last を省略します。process-donation.php はusermetaから名前を読み取り、maybeSafeUnserialize(allowed_classes => false)を実行し、__PHP_Incomplete_Class を wp_give_sessions に書き込みます。PHPは元のオブジェクトのバイト列をそのまま再出力します。TCPDF::__destruct() が call_user_func_array('system', [cmd]) に到達します。標準出力はそのレスポンスに含まれます。TCPDF.__destruct()
-> Symfony Session.getIterator()
-> Give\TestData ProviderForwarder.__call()
-> call_user_func_array('system', [cmd])
pre_user_last_name はNULを除去するため、ガジェットのプロパティは改変されません。バックスラッシュは4重化され、stripslashes_deep と removeBackslashes を生き延びます。
MIT。LICENSE を参照してください。