Update dependency liquidjs to v10.25.7 [SECURITY]#673
Open
renovate[bot] wants to merge 1 commit intomasterfrom
Open
Update dependency liquidjs to v10.25.7 [SECURITY]#673renovate[bot] wants to merge 1 commit intomasterfrom
renovate[bot] wants to merge 1 commit intomasterfrom
Conversation
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
This PR contains the following updates:
10.25.6→10.25.7liquidjs has a Denial of Service via circular block reference in layout
CVE-2026-41311 / GHSA-4rc3-7j7w-m548
More information
Details
Summary
A circular block reference in
{% layout %}/{% block %}causes an infinite recursive loop, consuming all available memory (~4GB) and crashing the Node.js process withFATAL ERROR: JavaScript heap out of memory. This allows any user who can submit a Liquid template to perform a Denial of Service attack.Details
In
src/tags/block.ts, during OUTPUT mode, each block looks up its render function fromctx.getRegister('blocks')[this.block]. When a block with nameais nested inside another block also namedain a child template, the inner block finds the outer block's render function and calls it. The outer block's templates contain the inner block again, creating infinite recursion with no termination condition.Relevant code (
src/tags/block.ts,getBlockRendermethod):When
renderChildexists (same-name block found), it callsrenderChildwhich re-renders templates containing the nested block, which again findsrenderChild, and so on — infinite loop.PoC
1. Create a layout file (
layout.html):2. Create a template that uses the layout:
{% layout "layout" %} {% block a %}outer-a {% block a %}inner-a{% endblock %}{% endblock %} {% block b %}content-b{% endblock %} {% block c %}content-c{% endblock %}3. Render:
The anonymous block variant also triggers the same issue:
{% layout "parent" %} {%block%}A{%block%}B{%endblock%}{%endblock%}Impact
Denial of Service (DoS). Any application that accepts user-provided or user-influenced Liquid templates — such as CMS platforms, email template builders, multi-tenant SaaS products, or static site generators with untrusted input — can be crashed by a single malicious template. The attack requires no authentication beyond the ability to submit a template, and no special configuration. The Node.js process is killed by the OS due to memory exhaustion, causing complete service disruption.
Severity
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:HReferences
This data is provided by the GitHub Advisory Database (CC-BY 4.0).
Release Notes
harttle/liquidjs (liquidjs)
v10.25.7Compare Source
Bug Fixes
Configuration
📅 Schedule: (UTC)
🚦 Automerge: Disabled by config. Please merge this manually once you are satisfied.
♻ Rebasing: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox.
🔕 Ignore: Close this PR and you won't be reminded about this update again.
This PR was generated by Mend Renovate. View the repository job log.