CVE-2026-32719AnythingLLM是一款应用程序,能够将各种内容转换为上下文信息,供大型语言模型(LLM)在聊天时作为参考使用。该应用在1.11.1及更早版本中存在严重的Zip Slip路径遍历安全漏洞。漏洞位于ImportedPlugin.importCommunityItemFromUrl()函数中,该函数从社区Hub URL下载ZIP文件并使用AdmZip.extractAllTo()方法进行解压缩操作。问题在于该函数在提取ZIP文件时未对压缩包内的文件路径进行安全验证,攻击者可以通过在ZIP文件中嵌入包含路径遍历序列(如../../../)的文件名,实现将文件任意写入服务器文件系统。当攻击者精心构造恶意ZIP文件时,可以利用此漏洞将恶意脚本或可执行文件写入服务器的Web根目录、启动目录或其他敏感位置,从而实现任意代码执行。成功利用此漏洞需要攻击者诱骗具有高权限的用户从恶意社区Hub下载并导入插件,整个攻击过程需要用户交互配合。
该漏洞的核心问题在于ZIP文件解压过程中的路径验证缺失。具体来说,AnythingLLM的ImportedPlugin.importCommunityItemFromUrl()函数通过HTTP请求从社区Hub获取ZIP格式的插件压缩包。在接收到ZIP文件后,程序使用AdmZip库的extractAllTo()方法将压缩包内容解压到指定目录。AdmZip库默认会根据ZIP条目中记录的文件名创建目录结构并写入文件内容。攻击者可以构造包含特殊构造文件名的ZIP条目,例如../../../var/www/html/malicious.js,该文件名包含路径遍历序列。当AdmZip处理此类条目时,会按照ZIP条目中指定的绝对路径或相对路径将文件写入目标系统,而不会检查该路径是否在预期的插件目录范围内。攻击者利用此漏洞可以将WebShell写入Web服务器的文档根目录,或将恶意脚本写入系统启动目录、计划任务目录等敏感位置,从而在后续访问或系统重启时获得代码执行能力。此漏洞的利用需要目标用户通过UI触发插件导入功能,因此被归类为需要用户交互的攻击场景。