CVE-2026-35525

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

Configuration 1 (hide)

cpe:2.3:a:liquidjs:liquidjs:*:*:*:*:*:node.js:*:*

History

24 Jul 2026, 21:10

Type Values Removed Values Added
Summary
  • (es) LiquidJS es un motor de plantillas compatible con Shopify / GitHub Pages en JavaScript puro. Antes de la versión 10.25.3, para {% include %}, {% render %} y {% layout %}, LiquidJS verifica si la ruta candidata está dentro de las raíces de parciales o diseños configuradas antes de leerla. Esa verificación se basa en la ruta, no en la ruta real. Debido a eso, un archivo como partials/link.liquid pasa la verificación de contención de directorio siempre que su nombre de ruta esté bajo la raíz permitida. Si link.liquid es en realidad un enlace simbólico a un archivo fuera de la raíz permitida, el sistema de archivos sigue el enlace simbólico cuando se abre el archivo y LiquidJS renderiza el objetivo externo. Así, la restricción se aplica a la cadena de ruta que fue solicitada, no al archivo que realmente se lee. Esto importa en entornos donde un atacante puede colocar plantillas o influir de otra manera en archivos bajo una raíz de plantilla de confianza, incluyendo temas subidos, archivos extraídos, contenido montado o árboles de plantillas controlados por repositorio. Esta vulnerabilidad se corrige en la versión 10.25.3.

10 Apr 2026, 21:19

Type Values Removed Values Added
References () https://github.com/harttle/liquidjs/pull/867 - () https://github.com/harttle/liquidjs/pull/867 - Issue Tracking
References () https://github.com/harttle/liquidjs/releases/tag/v10.25.3 - () https://github.com/harttle/liquidjs/releases/tag/v10.25.3 - Release Notes
References () https://github.com/harttle/liquidjs/security/advisories/GHSA-56p5-8mhr-2fph - () https://github.com/harttle/liquidjs/security/advisories/GHSA-56p5-8mhr-2fph - Exploit, Vendor Advisory
CPE cpe:2.3:a:liquidjs:liquidjs:*:*:*:*:*:node.js:*:*
CVSS v2 : unknown
v3 : unknown
v2 : unknown
v3 : 7.5
First Time Liquidjs
Liquidjs liquidjs

08 Apr 2026, 20:16

Type Values Removed Values Added
New CVE

Information

Published : 2026-04-08 20:16

Updated : 2026-07-24 21:10


NVD link : CVE-2026-35525

Mitre link : CVE-2026-35525

CVE.ORG link : CVE-2026-35525


JSON object : View

Products Affected

liquidjs

  • liquidjs
CWE
CWE-61

UNIX Symbolic Link (Symlink) Following