CVE-2025-13516SureMail是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直接访问上传的文件触发代码执行。