
CVE-2025-68999 のPoCエクスプロイト - Happy Addons for Elementor <= 3.20.4 における二次SQLインジェクション
Happy Addons for Elementor <= 3.20.4 — 認証済み(Contributor+)二次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() はキーを読み戻して raw INSERT に連結します。MySQL は注入されたサブクエリを実行します。静的解析がこれを検出できないのは、危険なデータの発生源が DB 読み取り($wpdb->get_results())であり、汚染解析エンジンがそれをサニタイズ済みと判定するためです。ストレージの境界が汚染チェーンを断ち切ります。
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
https://folks-iwd.github.io/writeups/cve-2025-68999.html
| 日付 | 内容 |
|---|---|
| 2025年12月 | SVN 差分により発見。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() を呼び出し、キーと値の両方に対してプリペアドステートメントを使用します。