Attack ChainAIDerived
Hypothetical attack flow derived from CVE metadata – not a confirmed exploit chain
-
AccessIdentify network-accessible LiquidJS template endpoint
-
DeliveryCraft input string with unclosed '<' (e.g. 'a<')
-
ExploitSubmit to strip_html filter
-
ExecutionTrigger infinite loop in html.ts
-
PersistBlock rendering thread indefinitely
-
ImpactDeny service to legitimate users
Vulnerability Assessment
| Weakness |
CWE
ASVS 5.0
V15 - Secure Coding and Architecture Loop termination conditions
MITRE ATT&CK
1 technique across 1 tactic: Impact The technique list with ATT&CK links and the kill-chain view is part of the Basic plan and up. |
| Exploitation Conditions | Exploitation requires the target application to use LiquidJS version 10.26.0 through 10.27.0 and to render templates that include user-controlled or externally supplied strings passed through the strip_html filter. The trigger condition is any string containing a '<' character preceded by at least one other character and lacking any subsequent '>' - a two-character input such as 'a<' is sufficient. Applications that do not pass untrusted input through strip_html, that sanitize or reject malformed angle-bracket sequences before template rendering, or that enforce per-request rendering timeouts are not at practical risk. The CVSS 4.0 vector (PR:N/UI:N) confirms that no authentication or user interaction is required when the rendering endpoint is network-accessible. |
| Impact | The CVSS 4.0 score of 8.7 with AV:N/AC:L/AT:N/PR:N/UI:N accurately captures the exploitation ease - the attack is fully automatable, requiring only a two-character string to trigger an infinite loop in any exposed rendering endpoint. EPSS data is absent from the available intelligence, so exploitation probability cannot be quantified beyond the CVSS signal. No CISA KEV listing is recorded, and no independently confirmed external POC exists beyond the reproduction test cases included in patch PR #917, indicating that widespread opportunistic exploitation has not yet been observed. The impact is strictly an availability loss with no confidentiality or integrity consequences, which limits blast radius to service disruption; systems that validate or sanitize template input before rendering, or that run LiquidJS in isolated worker threads with timeouts, substantially reduce practical risk. The single-character fix already shipped in 10.27.1 makes remediation low-effort and low-risk, arguing for prompt patching over complex mitigations. |
| Exploit ScenarioDerived | An attacker submits a crafted Liquid template string such as |
Get an e-mail when this CVE is exploited, patched or re-scored. Free account.
Alert meAnalysisAIv1 – Aug 19, 2026
Infinite-loop denial of service in LiquidJS affects the strip_html filter across versions 10.26.0 through 10.27.0, allowing any caller who can supply template input to permanently block rendering with a string as short as two characters. The CVSS 4.0 score of 8.7 (AV:N/AC:L/PR:N/UI:N/VA:H) reflects that no authentication or special configuration is needed when the rendering endpoint accepts external input. The issue is fixed in version 10.27.1 via a one-character patch; no public exploit code beyond the patch test cases has been confirmed, and no CISA KEV listing is recorded.
RemediationAI
Upgrade LiquidJS to version 10.27.1 or later, which resolves the issue via the fix in commit 5c3522f33928aae66f0fe85c36e1d9015c768fe2 (PR #917); the release is available at https://github.com/harttle/liquidjs/releases/tag/v10.27.1 and the security advisory at https://github.com/harttle/liquidjs/security/advisories/GHSA-m7fp-h3p4-hr49. If immediate upgrading is not feasible, the most targeted compensating control is to validate or reject user-supplied strings containing a '<' character without a corresponding '>' before they reach the strip_html filter - this eliminates the triggering condition with minimal application impact. A second option is to wrap LiquidJS rendering in a per-request timeout (e.g., via a worker thread with an abort signal), which bounds the DoS window at the cost of added latency overhead and potential false-positive timeouts on legitimately complex templates. Disabling the strip_html filter entirely is a third option if the feature is not business-critical, removing the attack surface at the cost of that filtering capability.
Affected VersionsENISA
Affected Packages
Source: OSV (Open Source Vulnerabilities)
Affects your stack
Affects 1 package in npm
Checking this CVE against your own stacks and servers is part of the Basic plan and up.
Technical ContextAI · show details
LiquidJS (CPE: cpe:2.3:a:harttle:liquidjs:*:*:*:*:*:*:*:*) is a pure-JavaScript template engine compatible with Shopify Liquid and GitHub Pages. The flaw (CWE-835: Loop with Unreachable Exit Condition) resides in the strip_html filter in src/filters/html.ts. When the filter encounters a '<' character with no subsequent '>', it advances the internal 'lt' pointer past the unclosed tag while the loop index 'i' remains unchanged. The stall guard condition 'i === lt' never triggers an exit because i is strictly less than lt at that point, so the loop reprocesses the same state indefinitely. The PR #917 fix (commit 5c3522f) changes the guard from strict equality to 'i <= lt', enabling the function to exit cleanly and return the remaining string slice. The PR diff also adds documentation clarifying that strip_html is a string scanner, not an HTML5 parser or sanitizer.
Know when Liquidjs gets its next vulnerability
- Watch products and get an email when something new is published
- Check this CVE against your own stack and servers
- Exploit and PoC references, threat intelligence from 22 sources
No credit card · 7-day full trial
Severity by source
CVSS:4.0/AV:N/AC:L/AT:N/PR:N/UI:N/VC:N/VI:N/VA:H/SC:N/SI:N/SA:N
Network-reachable with no authentication or interaction needed; infinite loop yields high availability impact only, with no scope change or confidentiality/integrity effects.
Primary rating from Vendor (GitHub_M).
CVSS VectorVendor: GitHub_M
Lifecycle Timeline
2DescriptionCVE.org
LiquidJS is a Shopify / GitHub Pages compatible template engine in pure JavaScript. From 10.26.0 until 10.27.1, the strip_html filter in src/filters/html.ts can enter an infinite loop when an input string contains <, includes at least one preceding character, and has no later >. In strip_html, the search for the next opener advances lt while the loop index remains unchanged when the closer search returns -1, and the equality-only stall guard does not exit because the loop index is less than lt. Reprocessing the same state indefinitely blocks template rendering and can cause denial of service with an input as short as a<. This issue is fixed in version 10.27.1.
Blast Radius
ecosystem impact- 14 npm packages depend on liquidjs (7 direct, 7 indirect)
Ecosystem-wide dependent count for version 10.26.0.
Executive ViewAI
LiquidJS, a template rendering library used in web applications, contains a denial-of-service vulnerability affecting versions 10.26.0-10.27.0 that permanently blocks rendering with minimal input. Any system using LiquidJS to process user-supplied templates can be completely disabled by an external attacker. Organizations must urgently identify affected deployments and prioritize remediation to restore service availability.
Apply vendor patch.
Threat Intelligence Overview
How this decision was reached
The engine reads each signal below and applies a fixed list of rules from top to bottom. The first rule that matches sets the recommended action – like a statement, every line is shown.
What every action level means
SSVC AssessmentENISA
Priority Score
Attack Technique
Denial of Service attacks render applications or systems unavailable by overwhelming resources or triggering failure conditions.
Unbounded memory allocation in LiquidJS pop filter (prior to 10.27.1) allows remote attackers to exhaust server memory b
Memory accounting bypass in LiquidJS prior to 10.27.2 enables remote denial of service by exhausting V8 heap or process
The package liquidjs before 10.0.0 are vulnerable to Information Exposure when ownPropertyOnly parameter is set to False
liquidjs is a Shopify / GitHub Pages compatible template engine in pure JavaScript. versions up to 10.25.0 is affected b
Information disclosure in LiquidJS versions prior to 10.27.2 lets an attacker read prototype-inherited array elements th
EUVD-2026-63089
GHSA-m7fp-h3p4-hr49
NVD
CVE.org
EPSS
Exploit-DB