Description
LiquidJS is a Shopify / GitHub Pages compatible template engine in pure JavaScript. Prior to 10.25.3, the replace filter in LiquidJS incorrectly accounts for memory usage when the memoryLimit option is enabled. It charges str.length + pattern.length + replacement.length bytes to the memory limiter, but the actual output from str.split(pattern).join(replacement) can be quadratically larger when the pattern occurs many times in the input string. This allows an attacker who controls template content to bypass the memoryLimit DoS protection with approximately 2,500x amplification, potentially causing out-of-memory conditions. This vulnerability is fixed in 10.25.3.
Published: 2026-04-08
Score: 3.7 Low
EPSS: < 1% Very Low
KEV: No
Impact: Out‑of‑Memory Denial of Service
Action: Immediate Patch
AI Analysis

Impact

The replace filter in LiquidJS miscalculates memory consumption when the memoryLimit option is active. It accounts only for the lengths of the source string, the pattern, and the replacement, yet the actual output from str.split(pattern).join(replacement) can explode quadratically when the pattern occurs many times. An attacker who controls template content can craft input that amplifies the output by roughly 2,500×, thereby evading the memory limiter and forcing an out‑of‑memory condition, which can crash the service or kill processes.

Affected Systems

LiquidJS implementations bundled by Harttle are affected in all versions earlier than 10.25.3. The vulnerability exists in the patch‑free code base that ships with these older releases and is fixed in 10.25.3 and newer.

Risk and Exploitability

The CVSS score of 3.7 indicates a moderate severity. The EPSS score of less than 1 % suggests a low likelihood of exploitation in the wild, and the vulnerability is not listed in CISA’s KEV catalog. Exploitability requires the attacker to control template content and have the application run LiquidJS with the memoryLimit option enabled; no local privilege escalation or network attack vector is needed.

Generated by OpenCVE AI on April 10, 2026 at 22:22 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Upgrade LiquidJS to version 10.25.3 or later.

Generated by OpenCVE AI on April 10, 2026 at 22:22 UTC.

Tracking

Sign in to view the affected projects.

Advisories
Source ID Title
Github GHSA Github GHSA GHSA-mmg9-6m6j-jqqx LiquidJS Has Memory Limit Bypass via Quadratic Amplification in `replace` Filter
History

Fri, 10 Apr 2026 21:30:00 +0000

Type Values Removed Values Added
First Time appeared Liquidjs
Liquidjs liquidjs
CPEs cpe:2.3:a:liquidjs:liquidjs:*:*:*:*:*:node.js:*:*
Vendors & Products Liquidjs
Liquidjs liquidjs

Fri, 10 Apr 2026 21:15:00 +0000

Type Values Removed Values Added
Metrics ssvc

{'options': {'Automatable': 'no', 'Exploitation': 'poc', 'Technical Impact': 'partial'}, 'version': '2.0.3'}


Wed, 08 Apr 2026 20:15:00 +0000

Type Values Removed Values Added
First Time appeared Harttle
Harttle liquidjs
Vendors & Products Harttle
Harttle liquidjs

Wed, 08 Apr 2026 18:45:00 +0000

Type Values Removed Values Added
Description LiquidJS is a Shopify / GitHub Pages compatible template engine in pure JavaScript. Prior to 10.25.3, the replace filter in LiquidJS incorrectly accounts for memory usage when the memoryLimit option is enabled. It charges str.length + pattern.length + replacement.length bytes to the memory limiter, but the actual output from str.split(pattern).join(replacement) can be quadratically larger when the pattern occurs many times in the input string. This allows an attacker who controls template content to bypass the memoryLimit DoS protection with approximately 2,500x amplification, potentially causing out-of-memory conditions. This vulnerability is fixed in 10.25.3.
Title LiquidJS has a Memory Limit Bypass via Quadratic Amplification in `replace` Filter
Weaknesses CWE-400
References
Metrics cvssV3_1

{'score': 3.7, 'vector': 'CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:N/I:N/A:L'}


Subscriptions

Harttle Liquidjs
Liquidjs Liquidjs
cve-icon MITRE

Status: PUBLISHED

Assigner: GitHub_M

Published:

Updated: 2026-04-10T20:37:03.164Z

Reserved: 2026-03-25T20:12:04.197Z

Link: CVE-2026-34166

cve-icon Vulnrichment

Updated: 2026-04-10T20:36:56.235Z

cve-icon NVD

Status : Analyzed

Published: 2026-04-08T19:25:21.400

Modified: 2026-04-10T21:19:24.237

Link: CVE-2026-34166

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-04-13T14:25:07Z

Weaknesses