CVE-2026-39859LiquidJS 是一个纯 JavaScript 编写的模板引擎。在 10.25.3 版本之前,尽管文档声称限制了传递给 renderFile() 和 parseFile() 的文件名,但顶层文件加载并未强制执行该边界限制。如果 Liquid 实例被配置为使用空的临时目录作为根目录,攻击者可以利用此漏洞返回服务器上任意文件的内容。该漏洞已在 10.25.3 版本中修复。
该漏洞的根本原因在于 LiquidJS 在处理文件路径时的安全校验逻辑存在缺陷。虽然针对 renderFile 和 parseFile 等函数设计了文档根目录限制,旨在防止访问根目录以外的文件,但在处理顶层文件加载时,系统未能正确应用这一边界检查。具体而言,当实例初始化时 root 参数被设置为空字符串或临时目录时,攻击者可以通过构造包含“../”序列的路径遍历载荷(Payload),在顶层加载文件时绕过目录限制。由于缺乏对路径规范化的严格验证,引擎会将相对路径解析为系统上的绝对路径,从而导致任意文件读取。这使得攻击者能够获取敏感配置信息、源代码或其他关键数据。