CVE-2026-33287LiquidJS是一款纯JavaScript模板引擎。在10.25.1版本之前,`replace_first`过滤器存在内存耗尽漏洞。因仅对输入字符串计算内存限制,攻击者可利用`$&`后向引用实现高达625,000倍的内存放大,在绕过限制的同时导致系统资源耗尽并引发拒绝服务。
该漏洞源于LiquidJS的`replace_first`过滤器实现机制。该过滤器底层调用JavaScript的`String.prototype.replace()`方法,其中特殊字符序列`$&`会被解释为对匹配子字符串的后向引用。漏洞的核心在于内存预算的计算逻辑存在缺陷:系统仅根据输入字符串的长度扣除`memoryLimit`配额,而完全忽略了经过替换处理后生成的输出字符串长度。攻击者精心构造包含大量`$&`模式的恶意输入,使得输出字符串的长度相对于输入呈现指数级增长,理论上放大倍数可达625,000倍。由于内存限制检查未能覆盖输出阶段,这种恶意操作会迅速耗尽服务器可用内存资源,导致服务崩溃或拒绝响应,且整个过程无需用户交互或认证即可通过网络远程触发。