CVE-2026-32731CVE-2026-32731是ApostropheCMS开源内容管理框架中@apostrophecms/import-export模块存在的严重安全漏洞。该漏洞为典型的Zip Slip(压缩包路径穿越)漏洞,存在于gzip.js文件的extract()函数中。漏洞根源在于使用path.join()函数构造文件写入路径时,未对压缩包内文件名的路径遍历字符(如../)进行过滤和验证。攻击者可通过制作包含路径遍历文件名的恶意.tar.gz压缩包,利用CMS标准导入功能上传,突破预期目录限制,将任意文件写入服务器任意路径。由于Node.js进程通常具有较高权限,攻击者可写入webshell或系统配置文件,从而实现远程代码执行,获取服务器完全控制权。该漏洞CVSS评分高达9.9(严重),CVSS向量为CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:H/A:H,任何拥有Global Content Modify权限的用户均可利用此漏洞发起攻击。
漏洞位于@apostrophecms/import-export模块的gzip.js文件中,具体在extract()函数实现。问题代码使用fs.createWriteStream(path.join(exportPath, header.name))构造写入路径,其中header.name来自tar.gz压缩包内的文件名。path.join()函数仅做字符串拼接,不解析或清理路径遍历序列(如../),导致恶意文件名../../evil.js会被原样保留,最终路径会跳出预期导出目录。漏洞利用前提条件:1)攻击者拥有CMS账号且具备Global Content Modify权限(内容编辑者或网站管理员常见角色);2)利用CMS标准导入界面上传特制的.tar.gz文件;3)Node.js进程对目标路径有写入权限。成功利用后可写入任意文件到服务器可访问的任何目录,结合系统特性(如写入定时任务、SSH authorized_keys、.bashrc等)可实现持久化远程代码执行。官方在3.5.3版本中修复了此问题。