Cyber Posture

CVE-2026-35525

HighPublic PoC

Published: 08 April 2026

Published
08 April 2026
Modified
10 April 2026
KEV Added
Patch
CVSS Score 7.5 CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N
EPSS Score 0.0005 17.0th percentile
Risk Priority 15 60% EPSS · 20% KEV · 20% CVSS

Summary

CVE-2026-35525 is a high-severity UNIX Symbolic Link (Symlink) Following (CWE-61) vulnerability in Liquidjs Liquidjs. Its CVSS base score is 7.5 (High).

Operationally, exploitation aligns with the MITRE ATT&CK technique Data from Local System (T1005); ranked at the 17.0th percentile by exploit likelihood (below the median); it is not currently listed in the CISA KEV catalog; a public proof-of-concept is referenced.

The strongest mitigations our analysis identified are NIST 800-53 AC-6 (Least Privilege) and CM-5 (Access Restrictions for Change).

Threat & Defense at a Glance

What attackers do: exploitation maps to Data from Local System (T1005) and 1 other technique. What defenders deploy: see the NIST 800-53 controls recommended below.
Threat & Defense Details

Mitigating Controls (NIST 800-53 r5)AI

prevent

Directly mitigates the vulnerability by requiring timely remediation through patching LiquidJS to version 10.25.3 or later, which fixes the path-based symlink bypass.

prevent

Enforces least privilege for the template rendering process, preventing access to sensitive files outside the trusted root even if a symlink is followed.

prevent

Restricts access to change trusted template root directories, blocking attackers from placing symlinks via uploaded themes, archives, or repository controls.

MITRE ATT&CK Enterprise TechniquesAI

T1005 Data from Local System Collection
Adversaries may search local system sources, such as file systems, configuration files, local databases, virtual machine files, or process memory, to find files of interest and sensitive data prior to Exfiltration.
T1190 Exploit Public-Facing Application Initial Access
Adversaries may attempt to exploit a weakness in an Internet-facing host or system to initially access a network.
Why these techniques?

Vulnerability enables arbitrary local file reads via symlink bypass in template includes (T1005); exploitable over network in public-facing template engine contexts (T1190).

Confidence: HIGH · MITRE ATT&CK Enterprise v18.1

NVD 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…

more

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.

Deeper analysisAI

CVE-2026-35525 is a vulnerability in LiquidJS, a Shopify- and GitHub Pages-compatible template engine implemented in pure JavaScript. Versions prior to 10.25.3 are affected due to improper path validation in the {% include %}, {% render %}, and {% layout %} tags. LiquidJS performs a path-based check to ensure candidate paths are within configured partials or layouts roots before reading files, but this does not use realpath resolution. As a result, a symlink like partials/link.liquid—whose pathname appears under the allowed root—can bypass the check, allowing the engine to follow the symlink and render content from an external file outside the trusted root.

An attacker can exploit this in environments where they can place or influence files under a trusted template root, such as uploaded themes, extracted archives, mounted content, or repository-controlled template trees. No privileges are required (PR:N), and exploitation is straightforward over the network with low complexity (AV:N/AC:L). Successful exploitation enables high confidentiality impact (C:H), as the engine reads and renders arbitrary external files, potentially leaking sensitive data without integrity or availability disruption.

The vulnerability is fixed in LiquidJS version 10.25.3, as detailed in the project's security advisory (GHSA-56p5-8mhr-2fph), release notes, and associated pull request. Security practitioners should upgrade to 10.25.3 or later to mitigate the issue, which is rated 7.5 (High) under CVSS:3.1 and mapped to CWE-61 (symlink issues).

Details

CWE(s)

Affected Products

liquidjs
liquidjs
≤ 10.25.3

CVEs Like This One

CVE-2026-39412Same product: Liquidjs Liquidjs
CVE-2026-39859Same product: Liquidjs Liquidjs
CVE-2026-30952Same product: Liquidjs Liquidjs
CVE-2026-33285Same product: Liquidjs Liquidjs
CVE-2026-33287Same product: Liquidjs Liquidjs
CVE-2026-33711Shared CWE-61
CVE-2026-27489Shared CWE-61
CVE-2026-23986Shared CWE-61
CVE-2025-55345Shared CWE-61
CVE-2026-21916Shared CWE-61

References