| CVSS | 8.5 高危 |
| 受影响版本 | <= 3.20.4 |
| 已修复版本 | 3.20.6 |
| 最低角色 | 贡献者(edit_posts) |
| 攻击向量 | 网络 / 低复杂度 / 低权限 |
duplicate_meta_entries()(位于 classes/clone-handler.php)通过手写的批量 INSERT 将文章 meta 行复制到克隆文章中。它使用 $wpdb->prepare() 安全地获取行,但随后将 $entry->meta_key 直接拼入 SQL 字符串而未转义:
$_records[] = "( $duplicated_post_id, '{$entry->meta_key}', '{$_value}' )";
// ...
$wpdb->query( $query );
由于 meta_key 来自数据库,代码将其视为可信数据。但贡献者可以通过自定义字段面板设置任意字段名——因此他们可以控制该列中的内容。
攻击分两步:
add_post_meta() 会安全地处理此操作——payload 落入数据库而不会执行任何操作。duplicate_meta_entries() 读回该键并将其拼接进原始 INSERT。MySQL 执行注入的子查询。静态分析之所以无法发现,是因为危险数据的来源是数据库读取($wpdb->get_results()),而污点分析引擎会将其标记为已净化。存储边界打破了污点链。
任何贡献者都可以提取:
wp_options 中的任意行(API 密钥、支付凭据)在披露时,超过 40 万个活跃安装受影响。
pip install requests
python3 poc.py https://target.com contributor p4ss
脚本通过 HTTP 进行身份验证,将注入 payload 存储为自定义字段名,触发 Happy Clone 操作,并从克隆文章的 meta 字段中读取泄露的哈希。输出保存到 hash.txt。
hashcat -m 400 hash.txt rockyou.txt
| 日期 | 事件 |
|---|---|
| December 2025 | 通过 SVN diff 发现。PoC 已确认。 |
| December 2025 | 向 Patchstack Alliance 提交了完整分析和 PoC。 |
| January 2026 | weDevs 在 v3.20.6 中发布了修复。 |
| January 23, 2026 | CVE-2025-68999 发布。分配 CVSS 8.5 高危。 |
weDevs 用以下代码替换了整个手写 INSERT:
foreach ( $entries as $entry ) {
update_post_meta( $duplicated_post_id, $entry->meta_key, $entry->meta_value );
}
update_post_meta() 内部调用 $wpdb->update(),使用预处理语句处理键和值。