CVE-2026-45357: LiquidJS has a memory and render limit bypass via unbounded width padding in `date` filter (strftime)
(updated )
The date filter’s strftime implementation parses width specifiers like %9999999d and forwards the captured width unchecked into pad()/padStart() in src/util/underscore.ts. The pad loop performs unbounded string concatenation without consulting the Context’s memoryLimit or renderLimit, so a single small template ({{ x | date: '%5000000d' }}) produces megabytes of output and unbounded CPU. The memoryLimit and renderLimit options the docs (src/liquid-options.ts:87-92) advertise as DoS controls — and which the docstring explicitly mentions for strftime — are entirely bypassed.
References
- github.com/advisories/GHSA-hh27-hf48-9f5q
- github.com/harttle/liquidjs/blob/v10.26.0/CHANGELOG.md
- github.com/harttle/liquidjs/commit/3129d46dc95efa357b00e5a57ee1af80a13d72ed
- github.com/harttle/liquidjs/releases/tag/v10.26.0
- github.com/harttle/liquidjs/security/advisories/GHSA-hh27-hf48-9f5q
- nvd.nist.gov/vuln/detail/CVE-2026-45357
Code Behaviors & Features
Detect and mitigate CVE-2026-45357 with GitLab Dependency Scanning
Secure your software supply chain by verifying that all open source dependencies used in your projects contain no disclosed vulnerabilities. Dependency Scanning using SBOM also detects vulnerabilities from proprietary advisories that this site does not include. Learn more about Dependency Scanning using SBOM →