Podatność w bibliotece Handlebars.js (wersje 4.0.0–4.7.8) umożliwia zdalne wykonanie kodu (RCE) przez przekazanie spreparowanego obiektu AST do funkcji `Handlebars.compile()`. Zagrożenie jest krytyczne, ponieważ nie wymaga uwierzytelnienia ani interakcji użytkownika.
▸ Pokaż oryginał (EN)
Handlebars provides the power necessary to let users build semantic templates. In versions 4.0.0 through 4.7.8, `Handlebars.compile()` accepts a pre-parsed AST object in addition to a template string. The `value` field of a `NumberLiteral` AST node is emitted directly into the generated JavaScript without quoting or sanitization. An attacker who can supply a crafted AST to `compile()` can therefore inject and execute arbitrary JavaScript, leading to Remote Code Execution on the server. Version 4.7.9 fixes the issue. Some workarounds are available. Validate input type before calling `Handlebars.compile()`; ensure the argument is always a `string`, never a plain object or JSON-deserialized value. Use the Handlebars runtime-only build (`handlebars/runtime`) on the server if templates are pre-compiled at build time; `compile()` will be unavailable.
Funkcja `Handlebars.compile()` akceptuje nie tylko ciąg znaków szablonu, ale również wstępnie przetworzony obiekt AST (Abstract Syntax Tree). Wartość pola `value` węzła AST typu `NumberLiteral` jest wstawiana bezpośrednio do generowanego kodu JavaScript bez żadnego cytowania ani sanityzacji. Atakujący, który jest w stanie dostarczyć spreparowany obiekt AST do funkcji `compile()` — np. przez deserializację danych JSON — może wstrzyknąć dowolny kod JavaScript, który zostanie następnie wykonany po stronie serwera.
Atakujący może wykonać dowolny kod JavaScript na serwerze (RCE), co potencjalnie prowadzi do pełnego przejęcia kontroli nad systemem, wycieku danych lub naruszenia integralności aplikacji.
Należy zaktualizować bibliotekę Handlebars.js do wersji 4.7.9, która naprawia podatność. Jako obejście można: (1) walidować typ argumentu przed wywołaniem `Handlebars.compile()` — upewnić się, że jest to zawsze ciąg znaków (`string`), nigdy obiekt ani wartość uzyskana przez deserializację JSON; (2) na serwerze stosować wersję runtime-only (`handlebars/runtime`), jeśli szablony są kompilowane na etapie budowania — funkcja `compile()` będzie wówczas niedostępna.
Handlebars.js (pakiet `handlebars`) w wersjach od 4.0.0 do 4.7.8 włącznie.
Podatność dotyczy wyłącznie scenariuszy, w których aplikacja przekazuje do `Handlebars.compile()` dane kontrolowane przez użytkownika w postaci obiektu (np. po deserializacji JSON). Użycie wyłącznie literałów tekstowych jako szablonów nie naraża aplikacji na tę podatność.
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:HHandlebarsjs Handlebars
APPHandlebarsjs4.0.0 – 4.7.9 (bez)
Powiązane podatności
Handlebars provides the power necessary to let users build semantic templates. In versions 4.0.0 through 4.7.8...
Handlebars provides the power necessary to let users build semantic templates. In versions 4.0.0 through 4.7.8...
Handlebars provides the power necessary to let users build semantic templates. In versions 4.0.0 through 4.7.8...
Handlebars provides the power necessary to let users build semantic templates. In versions 4.0.0 through 4.7.8...
Handlebars before 3.0.8 and 4.x before 4.5.3 is vulnerable to Arbitrary Code Execution. The lookup helper fail...