<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>LiquidJS (&lt;= 10.27.0) - CraftedSignal Threat Feed</title><link>https://feed.craftedsignal.io/products/liquidjs--10.27.0/</link><description>Trending threats, MITRE ATT&amp;CK coverage, and detection metadata. Fed continuously.</description><generator>Hugo</generator><language>en</language><managingEditor>hello@craftedsignal.io</managingEditor><webMaster>hello@craftedsignal.io</webMaster><lastBuildDate>Fri, 24 Jul 2026 14:16:34 +0000</lastBuildDate><atom:link href="https://feed.craftedsignal.io/products/liquidjs--10.27.0/feed.xml" rel="self" type="application/rss+xml"/><item><title>LiquidJS pop Filter Bypasses Memory Limit Accounting</title><link>https://feed.craftedsignal.io/briefs/2026-07-liquidjs-pop-filter-bypass/</link><pubDate>Fri, 24 Jul 2026 14:16:34 +0000</pubDate><author>hello@craftedsignal.io</author><guid isPermaLink="true">https://feed.craftedsignal.io/briefs/2026-07-liquidjs-pop-filter-bypass/</guid><description>A vulnerability (CVE-2026-55575) in the LiquidJS templating library's `pop` filter, affecting versions up to and including 10.27.0, allows an attacker to bypass the `memoryLimit` accounting, leading to uncontrolled memory allocation and potential denial of service when processing untrusted, large arrays in templates.</description><content:encoded><![CDATA[<p>A critical vulnerability, tracked as CVE-2026-55575, has been identified in the LiquidJS templating library, affecting all versions up to and including 10.27.0. The <code>pop</code> array filter, located at <code>src/filters/array.ts:91-95</code>, fails to properly account for memory allocations against the configured <code>memoryLimit</code> setting. Unlike its sibling array filters, <code>pop</code> creates an O(N) clone of an input array without deducting its size from the memory budget. This oversight allows an attacker to bypass the intended memory limits by crafting templates that apply the <code>| pop</code> filter to large, attacker-influenced arrays. Consequently, a single <code>render()</code> call can consume substantial amounts of memory, potentially leading to denial of service (DoS) through memory exhaustion. This is particularly dangerous in multi-tenant environments where <code>memoryLimit</code> is relied upon as a critical DoS guard against untrusted template inputs, such as those derived from user-generated content or large data sets. The vulnerability directly undermines the library's built-in resource protection mechanisms.</p>
<h2 id="attack-chain">Attack Chain</h2>
<ol>
<li>An attacker identifies a web application or service that utilizes the LiquidJS templating library, specifically versions up to and including 10.27.0.</li>
<li>The application allows attacker-influenced input, such as query parameters or API payloads, to be processed as a large array within a LiquidJS template context.</li>
<li>The attacker crafts a malicious template or injects template code that applies the <code>| pop</code> filter to this large, untrusted array (e.g., <code>{{ untrusted_array | pop }}</code>).</li>
<li>When the LiquidJS engine processes this template, the vulnerable <code>pop</code> filter creates a full O(N) clone of the large input array in memory.</li>
<li>Due to the vulnerability (CVE-2026-55575), this significant memory allocation is not accounted for against the application's configured <code>memoryLimit</code>.</li>
<li>The application continues to allocate memory unchecked, consuming Node.js process heap space.</li>
<li>This excessive memory consumption eventually leads to the exhaustion of the Node.js process's available memory or triggers a system-level Out-Of-Memory (OOM) killer.</li>
<li>The final objective is achieved: a denial of service for the affected LiquidJS application instance or the host system.</li>
</ol>
<h2 id="impact">Impact</h2>
<p>The vulnerability renders the <code>memoryLimit</code> guard ineffective for templates utilizing the <code>pop</code> filter, allowing uncontrolled O(N) memory allocation when processing large, attacker-influenced arrays. This directly enables a denial of service (DoS) attack through memory exhaustion. A single template render can allocate hundreds of megabytes of array slots, circumventing the intended memory budget. In scenarios with concurrent requests, this effect is amplified, rapidly consuming the Node.js process heap and potentially leading to <code>oom-kill</code> events on the host system. This is a critical bypass of a documented DoS protection mechanism, especially concerning for multi-tenant applications that rely on <code>memoryLimit</code> to constrain resource usage from untrusted template inputs like search results, paginated lists, or user data.</p>
<h2 id="recommendation">Recommendation</h2>
<ul>
<li>Upgrade the <code>liquidjs</code> package to a version where CVE-2026-55575 has been resolved to mitigate this memory limit bypass.</li>
<li>Review LiquidJS templates for any usage of the <code>| pop</code> filter on arrays derived from untrusted input; consider replacing it with guarded alternatives like <code>| slice: 0, arr.size | minus: 1</code>.</li>
<li>Implement the provided workaround by registering a custom <code>pop</code> filter in LiquidJS that explicitly includes <code>this.context.memoryLimit.use(arr.length)</code> accounting for array allocations to re-establish the memory budget.</li>
</ul>
]]></content:encoded><category domain="severity">medium</category><category domain="type">advisory</category><category>liquidjs</category><category>denial-of-service</category><category>vulnerability</category><category>memory-exhaustion</category><category>nodejs</category></item></channel></rss>