Description
LiquidJS is a Shopify / GitHub Pages compatible template engine in pure JavaScript. Prior to 10.27.2, the join filter in src/filters/array.ts computes complexity from array.length and separator length instead of the total string length produced by array.join(sep). The concat filter can cheaply double arrays of references, after which join materializes the referenced content while charging only for element count, allowing a template to exceed a configured memoryLimit by a large factor. The sibling array_to_sentence_string filter in src/filters/string.ts has the same accounting defect, and a crafted template can allocate toward V8's string or process memory limit and crash the process. This issue is fixed in version 10.27.2.
Published: 2026-08-19
Score: 7.5 High
EPSS: < 1% Very Low
KEV: No
Impact: n/a
Action: n/a
AI Analysis

Impact

The vulnerability lies in LiquidJS’s join and array_to_sentence_string filters, which incorrectly account for memory usage by considering only array length and separator length rather than the full string produced by joining. An attacker can supply a crafted template that lets the concat filter double array references cheaply, then cause join to materialize vastly larger data while charging only for element count. This lets a template exceed the configured memoryLimit and crash the JavaScript engine, causing a denial of service. The weakness is an uncontrolled resource consumption flaw as identified by CWE‑400.

Affected Systems

The issue affects the LiquidJS library from the vendor harttle. All releases prior to version 10.27.2 are vulnerable. Versions 10.27.2 and newer contain the fix; the join and array_to_sentence_string filters are now correctly accounted for.

Risk and Exploitability

The CVSS score of 7.5 indicates a high severity vulnerability, and the EPSS score is not available, suggesting no publicly known exploitation trend at the time. The vulnerability is not listed in the CISA KEV catalog. Exploitation would require an attacker who can influence template authoring or supply templates to the application. The attack path involves creating a template that exploits the filters to exceed memory limits, which can crash the Node.js process. Thus, risk is moderate to high for exposed template engines.

Generated by OpenCVE AI on August 20, 2026 at 07:58 UTC.

Remediation

No vendor fix or workaround currently provided.

OpenCVE Recommended Actions

  • Apply the vendor-published patch to version 10.27.2 or later of LiquidJS
  • If patching cannot occur immediately, disable the join or array_to_sentence_string filters in the template configuration or replace them with safe alternatives
  • Configure the Node.js runtime with tighter memory limits (e.g., --max-old-space-size) and monitor for unexpected process restarts to detect attempted exploitation

Generated by OpenCVE AI on August 20, 2026 at 07:58 UTC.

Tracking

Sign in to view the affected projects.

Advisories
Source ID Title
Github GHSA Github GHSA GHSA-4r6h-5v86-94p3 LiquidJS: Uncontrolled Resource Consumption in `join` filter allows template authors to bypass `memoryLimit` and crash the process
History

Fri, 21 Aug 2026 22:30:00 +0000

Type Values Removed Values Added
Metrics ssvc

{'options': {'Automatable': 'yes', 'Exploitation': 'none', 'Technical Impact': 'partial'}, 'version': '2.0.3'}


Thu, 20 Aug 2026 01:00:00 +0000

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

Wed, 19 Aug 2026 21:15:00 +0000

Type Values Removed Values Added
Description LiquidJS is a Shopify / GitHub Pages compatible template engine in pure JavaScript. Prior to 10.27.2, the join filter in src/filters/array.ts computes complexity from array.length and separator length instead of the total string length produced by array.join(sep). The concat filter can cheaply double arrays of references, after which join materializes the referenced content while charging only for element count, allowing a template to exceed a configured memoryLimit by a large factor. The sibling array_to_sentence_string filter in src/filters/string.ts has the same accounting defect, and a crafted template can allocate toward V8's string or process memory limit and crash the process. This issue is fixed in version 10.27.2.
Title LiquidJS: Uncontrolled Resource Consumption in `join` filter allows template authors to bypass `memoryLimit` and crash the process
Weaknesses CWE-400
References
Metrics cvssV3_1

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


Subscriptions

Harttle Liquidjs
cve-icon MITRE

Status: PUBLISHED

Assigner: GitHub_M

Published:

Updated: 2026-08-21T21:47:58.206Z

Reserved: 2026-08-03T16:57:50.125Z

Link: CVE-2026-69222

cve-icon Vulnrichment

Updated: 2026-08-21T21:09:42.009Z

cve-icon NVD

Status : Received

Published: 2026-08-19T21:17:31.627

Modified: 2026-08-21T22:16:43.473

Link: CVE-2026-69222

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-08-20T08:00:03Z

Weaknesses
  • CWE-400

    Uncontrolled Resource Consumption