
CVE-2025-68999 の PoC エクスプロイト - Happy Addons for Elementor <= 3.20.4 における二次SQLインジェクション
| CVSS | 8.5 HIGH |
| 影響を受けるバージョン | <= 3.20.4 |
| 修正バージョン | 3.20.6 |
| 最小権限ロール | Contributor (edit_posts) |
| 攻撃条件 | ネットワーク / 複雑度:低 / 権限:低 |
duplicate_meta_entries()(classes/clone-handler.php 内)は、手書きのバルクINSERTを使って投稿メタ行を複製した投稿にコピーします。行の取得は $wpdb->prepare() で安全に行いますが、その後 $entry->meta_key をエスケープせずに SQL 文字列へ直接埋め込みます:
$_records[] = "( $duplicated_post_id, '{$entry->meta_key}', '{$_value}' )";
// ...
$wpdb->query( $query );
meta_key はデータベース由来のため、コードはこれを信頼できるものとして扱います。しかし Contributor はカスタムフィールドパネルで任意のフィールド名を設定できるため、その列の内容を制御できます。
攻撃は2段階です:
add_post_meta() はこれを安全に処理するため、ペイロードは何も実行されずに DB に格納されます。duplicate_meta_entries() がキーを読み戻し、生の INSERT に連結します。MySQL が注入されたサブクエリを実行します。静的解析はこれを検出できません。危険なデータの発生源が DB 読み取り($wpdb->get_results())であり、taint エンジンはこれをサニタイズ済みとみなすためです。保存の境界が taint チェーンを断ち切ります。
Contributor は以下のデータを抽出できます:
wp_options の任意の行(API キー、決済資格情報)開示時点で40万以上のアクティブインストールが影響を受けていました。
pip install requests
python3 poc.py https://target.com contributor p4ss
このスクリプトは HTTP 経由で認証し、注入ペイロードをカスタムフィールド名として保存して、Happy Clone アクションをトリガーし、複製された投稿のメタフィールドから漏えいしたハッシュを読み取ります。出力は hash.txt に保存されます。
hashcat -m 400 hash.txt rockyou.txt
| 日付 | イベント |
|---|---|
| 2025年12月 | SVN diff により発見。PoC を確認。 |
| 2025年12月 | 完全な解析記事と PoC を添えて Patchstack Alliance に報告。 |
| 2026年1月 | weDevs が v3.20.6 で修正をリリース。 |
| 2026年1月23日 | CVE-2025-68999 公開。CVSS 8.5 HIGH が割り当てられる。 |
weDevs は手書きの INSERT 全体を次のコードに置き換えました:
foreach ( $entries as $entry ) {
update_post_meta( $duplicated_post_id, $entry->meta_key, $entry->meta_value );
}
update_post_meta() は内部的に $wpdb->update() を呼び出し、キーと値の両方についてプリペアドステートメントを使用します。