CVE-2025-13646CVE-2025-13646是WordPress插件Modula Image Gallery中的一个高危安全漏洞。该插件是一款流行的WordPress图片画廊插件,广泛应用于各类网站中。漏洞存在于插件的ajax_unzip_file函数中,由于该函数在处理文件上传时缺少足够的文件类型验证和安全性检查,导致存在严重的安全隐患。具体而言,攻击者可以利用此漏洞上传任意类型的文件到目标服务器,包括恶意PHP脚本文件。一旦恶意文件被成功上传,攻击者便可以通过访问该文件在服务器上执行任意代码,从而完全控制受影响的网站。此漏洞的CVSS评分为7.5分,属于高危级别,攻击复杂度较低但需要认证。攻击者需要拥有WordPress网站的Author级别或更高权限才能利用此漏洞。虽然利用过程涉及竞态条件(race condition),但这并不妨碍漏洞的实质性危害。攻击者可以通过构造特定的ZIP压缩包,利用WordPress内置的unzip_file函数或类似机制,在解压过程中将恶意文件写入服务器指定目录。对于托管在Linux系统上的WordPress网站,由于文件系统通常区分文件大小写,攻击者可以通过精心构造的文件名绕过某些基础的安全检查。此漏洞的影响范围涵盖机密性、完整性和可用性三个方面,攻击成功后可能导致用户数据泄露、网站内容被篡改以及服务中断等严重后果。
该漏洞的技术根源在于Modula Image Gallery插件的ajax_unzip_file函数未对上传文件进行充分的类型验证和内容检查。在WordPress插件的class-modula-gallery-upload.php文件第1103行附近,该函数直接处理用户上传的ZIP文件并解压到服务器。在解压过程中,函数没有验证ZIP包内各个文件的扩展名、MIME类型或内容结构,允许攻击者嵌入任意扩展名的文件。攻击者可以创建一个包含恶意PHP脚本(如webshell)的ZIP文件,上传后通过访问该PHP文件即可在服务器上执行系统命令。技术利用步骤如下:首先,攻击者准备一个包含恶意PHP文件的ZIP压缩包,文件名可使用大小写混合(如.PHP或.pHP)绕过部分检测;其次,攻击者使用有效的WordPress Author账户登录,通过WordPress的admin-ajax.php接口发送特制的POST请求,将恶意ZIP文件作为ajax_unzip_file函数的参数提交;然后,服务器执行unzip操作,将恶意文件写入wp-content/uploads/modula/目录;最后,攻击者通过HTTP请求直接访问上传的PHP文件,在服务器上执行任意代码。值得注意的是,漏洞利用存在竞态条件,攻击者需要在正确的时间窗口内完成上传和访问操作。此外,服务器配置(如.htaccess规则、PHP配置等)可能会影响实际的利用成功率。插件开发者已在后续版本中修复了此问题,修复方案包括:添加文件扩展名白名单验证、使用wordpress内置的验证函数检查文件类型、在解压前扫描ZIP内容、以及限制可写入的目录范围。