CVE-2026-44645
ŚrednieCVSS 6.5Prawdopodobieństwo exploitacji (EPSS)
Niskie ryzykoPercentyl 23 — wyżej niż 23% wszystkich znanych CVE
Streszczenie
W wersjach 10.25.7 i poniżej silnika szablonów LiquidJS istnieje możliwość całkowitego obejścia opcji renderLimit poprzez użycie pustego tagu {% for %} lub {% tablerow %}. To pozwala na nieograniczone zużycie czasu renderowania, co może prowadzić do ataków typu DoS.
Ocena ryzyka
Organizacje korzystające z LiquidJS w wersjach 10.25.7 i poniżej mogą być narażone na ataki DoS, które mogą zablokować wątki pętli zdarzeń Node.js, co prowadzi do problemów z dostępnością aplikacji.
Rekomendacja
Zaleca się aktualizację do wersji 10.26.0 lub nowszej, aby zabezpieczyć się przed tym problemem oraz rozważyć dodatkowe mechanizmy ochrony przed atakami DoS.
Oryginalny opis (angielski, źródło NVD)
LiquidJS is a Shopify/GitHub Pages compatible template engine written in pure JavaScript. In versions 10.25.7 and below, the renderLimit option can be fully bypassed by a {% for %} (or {% tablerow %}) tag whose body is empty. The renderLimit option is documented in docs/source/tutorials/dos.md as the mechanism that "mitigates this by limiting the time consumed by each render() call." The per-iteration time check is reached only when the body contains at least one template node, so a template such as {%- for i in (1..N) -%}{%- endfor -%} iterates the full collection without ever consulting renderLimit. With a configured renderLimit of 50 ms, a single parseAndRenderSync call has been observed to consume 2.26 seconds (~45× over the limit) and scales linearly with N up to memoryLimit, allowing a low-privileged template author to wedge an event-loop thread for an attacker-chosen duration. Deployments that rely on a finite renderLimit for DoS protection (common in multi-tenant template-authoring environments) can still be forced by a single crafted template to monopolize a Node.js event-loop worker for attacker-controlled time, potentially stalling in-flight requests, with availability impact only. This issue has been fixed in version 10.26.0.

