CVE-2026-35525 LiquidJS has a root restriction bypass for partial and layout loading through symlinked templates
Attackers can bypass template root restrictions via symlinks to read arbitrary files outside the allowed directory in LiquidJS.
- Exploited in the wild
- Not known
- Login needed
- Not needed
- Attackable
- Over the internet
- Victim action needed
- Not needed
- Fix
- Available
What is CVE-2026-35525?
CVE-2026-35525 is a high-severity path traversal vulnerability in harttle liquidjs, published on 8 Apr 2026. An attacker can exploit it over the internet without logging in, with no action from the victim.
Official description
LiquidJS is a Shopify / GitHub Pages compatible template engine in pure JavaScript. Prior to 10.25.3, for {% include %}, {% render %}, and {% layout %}, LiquidJS checks whether the candidate path is inside the configured partials or layouts roots before reading it. That check is path-based, not realpath-based. Because of that, a file like partials/link.liquid passes the directory containment check as long as its pathname is under the allowed root. If link.liquid is actually a symlink to a file outside the allowed root, the filesystem follows the symlink when the file is opened and LiquidJS renders the external target. So the restriction is applied to the path string that was requested, not to the file that is actually read. This matters in environments where an attacker can place templates or otherwise influence files under a trusted template root, including uploaded themes, extracted archives, mounted content, or repository-controlled template trees. This vulnerability is fixed in 10.25.3.
Weakness: CWE-61
Which versions are affected by CVE-2026-35525?
2 open source packages ship an affected version, including liquidjs. It affects 1 product.
| Package | Affected | Fixed in |
|---|---|---|
liquidjs npm | All versions | 10.25.3 |
liquidjs npm | All versions | 10.25.3 |
Products include Liquidjs Liquidjs.
How do I fix CVE-2026-35525?
Upgrade liquidjs to 10.25.3 or later.
Upgrade, and resolve every user-supplied path against an allowed base folder before opening it. More about Path traversal.
Is CVE-2026-35525 being exploited?
It is not confirmed as exploited in the wild, but public exploit code for CVE-2026-35525 exists.
Other vulnerabilities in harttle liquidjs
- CVE-2026-30952 liquidjs has a path traversal fallback vulnerability
- CVE-2026-41311 LiquidJS is vulnerable to Denial of Service via circular block reference in layout
- CVE-2026-33285 LiquidJS: memoryLimit Bypass through Negative Range Values Leads to Process Crash
- CVE-2026-33287 LiquidJS has Exponential Memory Amplification through its replace_first Filter $& Pattern
- CVE-2026-39859 LiquidJS has a renderFile() / parseFile() bypass configured root and allow arbitrary file read
Sources
Also known as CLEANSTART-2026-HT72658, GHSA-56p5-8mhr-2fph, MINI-3mqq-vm6m-mq32, MINI-mhgv-94r8-gj9m.