CVE-2026-43888Outline是一款用于协作文档的服务。在1.7.0版本之前,其ZipHelper.extract组件存在安全漏洞。当计算ZIP条目的提取路径时,如果嵌套路径足够长,导致连接后的文件系统路径超过MAX_PATH_LENGTH(4096字节), trimFileAndExt函数会静默地删除所有目录组件并返回一个裸文件名。这导致fs.createWriteStream在进程工作目录而非提取沙箱内打开文件。由于cleanupExtractedData仅删除临时提取目录,逃逸的文件会在导入清理后持续存在。
该漏洞源于Outline处理ZIP文件时的路径验证逻辑缺陷。具体而言,ZipHelper.extract在处理文件路径时调用了trimFileAndExt辅助函数,该函数在截断文件名时使用path.basename。攻击者可以构造一个包含超长嵌套路径的恶意ZIP文件。当路径长度超过4096字节限制时,trimFileAndExt会错误地剥离路径中的所有目录信息,仅保留文件名。随后,fs.createWriteStream根据处理后的路径创建文件流,由于缺少相对路径引导,文件被直接写入进程的当前工作目录(CWD),打破了沙箱限制。此外,系统的清理机制仅针对临时解压目录,因此写入CWD的恶意文件不会被自动删除,从而可能导致任意文件写入或持久化后门。