Cyber Resilience

CVE-2026-35525

Liquidjs ≤ 10.25.3

Public PoC
Published
08 April 2026
Modified
24 July 2026
Patch / advisory
CVSS Score v4 8.2
Click a component to see what it means
Raw vectorCVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:N/VA:N/SC:N/SI:N/SA:N/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
EPSS Score 0.0040 33th percentile
Risk Priority 43 floored blend · peak EPSS

CVSS and EPSS are reproduced from their sources (NVD, FIRST EPSS). Risk Priority is our own derived reading, not an NVD score.

Summary

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

Operationally, exploitation aligns with the MITRE ATT&CK technique Path Interception (T1034); ranked at the 33th 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 map to AC-3 (Access Enforcement) and AC-4 (Information Flow Enforcement) — see the control section below for these in your framework.

Deeper analysis AI-assisted summary

Synthesised by an AI model from the NVD description and linked references — a reading aid, not an authoritative source.

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).

OWASP Top 10 for Web (2025)

EU & UK References

Vulnerability Data

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.

CWE(s)

Related Threats

MITRE ATT&CK Enterprise Techniques

T1034 Path Interception Persistence
**This technique has been deprecated.
Derived from this CVE’s CWE(s) via the direct CWE→ATT&CK cross-walk.

CVEs Like This One

CVE-2026-30952Same product: Liquidjs Liquidjs
CVE-2026-41311Same product: Liquidjs Liquidjs
CVE-2026-39412Same product: Liquidjs Liquidjs
CVE-2026-33287Same product: Liquidjs Liquidjs
CVE-2026-34166Same product: Liquidjs Liquidjs
CVE-2026-39859Same product: Liquidjs Liquidjs
CVE-2026-33285Same product: Liquidjs Liquidjs
CVE-2026-43570Shared CWE-61
CVE-2026-40354Shared CWE-61
CVE-2025-43853Shared CWE-61

Affected Assets

liquidjs
liquidjs
≤ 10.25.3

Mitigating Controls

Control response

Prevent
Stop it (NIST 800-53)

Detect
Catch it (NIST detect / respond)

Harden
Shrink the surface (DISA STIG)
  • 2 hardening rules · 2 OS baselines
Validate
Prove the fix (OWASP ASVS)
  • V5.2.5

Mitigating Controls (NIST 800-53 r5) AI

Access enforcement must resolve the actual target of any file reference and apply authorizations to it, directly stopping symlink traversal to unauthorized objects.

Information-flow enforcement on file operations must follow the resolved target rather than the link name, blocking unauthorized data movement via symlinks.

Least-privilege restrictions on the directories that may contain links or targets reduce the set of files an attacker can reach even if a symlink is followed.

Mitigating Controls (NIST CSF 2.0) AI

Derived directly from the weakness types (CWEs) cited in the NVD entry via our AI-authored CWE→CSF cross-walk (authority under review) — links open the control.

ID.RA-01 partial match
prevents

Vulnerability identification can discover existing symlink issues but does not prevent or remediate them in code.

PR.AA-05 partial match
prevents

Least-privilege access policies can limit damage from symlink attacks but do not address the coding flaw itself.

PR.PS-06 partial match
prevents

Secure SDLC practices directly prevent introduction of symlink-following flaws in file-handling code.

Mitigating Controls (ISO/IEC 27001:2022 Annex A) AI

Derived directly from the weakness types (CWEs) cited in the NVD entry via our AI-authored CWE→ISO cross-walk (authority under review) — links open the control.

prevents

Secure-architecture principles require safe file-handling and canonicalization, directly addressing symlink attacks.

prevents

Secure-coding standards mandate explicit symlink checks and safe open patterns, fully mitigating CWE-61.

finds

Security testing can detect symlink-following vulnerabilities before deployment, covering most of the weakness.

mitigates

Access-control rules can restrict which files a process may open, reducing symlink-following risk but not eliminating the underlying path-resolution flaw.

Hardening callouts derived

Configuration rules from DISA STIG baselines that bear on weaknesses of the type cited by this CVE. Each rule is shown with the relationship its mapping actually records, against the CWE it was authored against. Derived via CVE→CWE over `controls_xwalks` (higher-evidence rows only; rows rated `none` are excluded).

Oracle Linux 8 (1 rule)
  • V-248577 OL 8 must enable kernel parameters to enforce Discretionary Access Control (DAC) on symlinks. prevents CWE-61

References