CVE-2026-35525: CWE-61: UNIX Symbolic Link (Symlink) Following in harttle liquidjs
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.
AI Analysis
Technical Summary
LiquidJS versions before 10.25.3 perform path-based checks for template inclusion directives ({% include %}, {% render %}, {% layout %}) to ensure files are within configured partials or layouts roots. However, these checks do not resolve symbolic links (realpath), allowing a symlink inside the allowed root to point to a file outside it. When LiquidJS opens the file, it follows the symlink and renders the external file, bypassing directory restrictions. This can be exploited in environments where attackers can place or influence template files under trusted roots, such as uploaded themes or repository-controlled templates. The vulnerability is tracked as CWE-61 (Improper Restriction of Symbolic Links).
Potential Impact
An attacker with the ability to place or influence template files within allowed directories can cause LiquidJS to render arbitrary files outside those directories by leveraging symbolic links. This may lead to unauthorized disclosure of sensitive files or unintended template rendering. The CVSS 4.0 score is 8.2 (high severity), indicating network attack vector, low attack complexity, no privileges required, no user interaction, but high impact on confidentiality. No known exploits in the wild are reported.
Mitigation Recommendations
The vulnerability is fixed in LiquidJS version 10.25.3. Users should upgrade to version 10.25.3 or later to resolve this issue. Since no official vendor advisory or patch link is provided, verify the upgrade from the official project repository or release notes. Until upgraded, restrict the ability of untrusted users to place or modify template files or symbolic links under the trusted template roots to mitigate exploitation risk.
CVE-2026-35525: CWE-61: UNIX Symbolic Link (Symlink) Following in harttle liquidjs
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.
AI-Powered Analysis
Machine-generated threat intelligence
Technical Analysis
LiquidJS versions before 10.25.3 perform path-based checks for template inclusion directives ({% include %}, {% render %}, {% layout %}) to ensure files are within configured partials or layouts roots. However, these checks do not resolve symbolic links (realpath), allowing a symlink inside the allowed root to point to a file outside it. When LiquidJS opens the file, it follows the symlink and renders the external file, bypassing directory restrictions. This can be exploited in environments where attackers can place or influence template files under trusted roots, such as uploaded themes or repository-controlled templates. The vulnerability is tracked as CWE-61 (Improper Restriction of Symbolic Links).
Potential Impact
An attacker with the ability to place or influence template files within allowed directories can cause LiquidJS to render arbitrary files outside those directories by leveraging symbolic links. This may lead to unauthorized disclosure of sensitive files or unintended template rendering. The CVSS 4.0 score is 8.2 (high severity), indicating network attack vector, low attack complexity, no privileges required, no user interaction, but high impact on confidentiality. No known exploits in the wild are reported.
Mitigation Recommendations
The vulnerability is fixed in LiquidJS version 10.25.3. Users should upgrade to version 10.25.3 or later to resolve this issue. Since no official vendor advisory or patch link is provided, verify the upgrade from the official project repository or release notes. Until upgraded, restrict the ability of untrusted users to place or modify template files or symbolic links under the trusted template roots to mitigate exploitation risk.
Technical Details
- Data Version
- 5.2
- Assigner Short Name
- GitHub_M
- Date Reserved
- 2026-04-03T02:15:39.281Z
- Cvss Version
- 4.0
- State
- PUBLISHED
- Remediation Level
- null
Threat ID: 69d6b1991cc7ad14daa7cb9a
Added to database: 4/8/2026, 7:50:49 PM
Last enriched: 4/8/2026, 8:06:49 PM
Last updated: 4/9/2026, 7:51:07 AM
Views: 5
Community Reviews
0 reviewsCrowdsource mitigation strategies, share intel context, and vote on the most helpful responses. Sign in to add your voice and help keep defenders ahead.
Want to contribute mitigation steps or threat intel context? Sign in or create an account to join the community discussion.
Actions
Updates to AI analysis require Pro Console access. Upgrade inside Console → Billing.
Need more coverage?
Upgrade to Pro Console for AI refresh and higher limits.
For incident response and remediation, OffSeq services can help resolve threats faster.
Latest Threats
Check if your credentials are on the dark web
Instant breach scanning across billions of leaked records. Free tier available.