CVE-2026-74783
WysokieCVSS 7.5Prawdopodobieństwo exploitacji (EPSS)
Niskie ryzykoPercentyl 40 - wyżej niż 40% wszystkich znanych CVE
Streszczenie
Scriban w wersjach od 6.6.0 do 7.2.0 zawiera nieegzekwowany mechanizm ExpressionDepthLimit, który nie zatrzymuje rekurencyjnego parsowania głęboko zagnieżdżonych wyrażeń. Atakujący mogą dostarczyć szablony z głęboko zagnieżdżonymi nawiasami, inicjalizatorami tablic, inicjalizatorami obiektów lub operatorami jednoargumentowymi, aby wywołać nieprzechwytywalny wyjątek StackOverflowException, który natychmiast kończy proces hosta.
Ocena ryzyka
Atakujący może spowodować natychmiastową awarię aplikacji, co prowadzi do przerwania działania usługi i potencjalnej utraty danych.
Rekomendacja
Zaktualizuj Scriban do wersji 7.2.1 lub nowszej, która zawiera poprawkę egzekwującą limit głębokości wyrażeń.
Inne podatności w Scriban
Zobacz wszystkie- CVE-2026-74790Krytyczne
Scriban przed wersją 7.0.0 przechowuje w pamięci podręcznej obiekty TypedObjectAccessor tylko według typu, bez uwzględniania zmian MemberFilter. Pozwala to na ponowne użycie instancji TemplateContext i ujawnienie członków, które powinny być ukryte, co umożliwia atakującemu dostęp do filtrowanych właściwości i pól po zaostrzeniu filtrów.
- CVE-2026-73061Krytyczne
Scriban przed wersją 7.2.2 zawiera podatność na obejście modyfikatorów dostępu w TypedObjectAccessor, co pozwala kodowi szablonu na zapis właściwości obiektów CLR bez sprawdzania widoczności setterów. Atakujący mogą modyfikować właściwości z prywatnymi, wewnętrznymi lub init-only setterami oraz przeprowadzać masowe przypisania na właściwościach z publicznymi setterami, trwale zmieniając obiekty hosta po renderowaniu szablonu.
- CVE-2026-74795Wysokie
Scriban przed wersją 6.6.0 zawiera podatność na niekontrolowaną rekurencję w parserze rekurencyjnym. Parser nie egzekwuje domyślnego limitu głębokości wyrażeń (ExpressionDepthLimit jest domyślnie null/wyłączony), więc atakujący kontrolujący dane wejściowe szablonu może dostarczyć głęboko zagnieżdżony szablon (np. tysiące zagnieżdżonych nawiasów), co wyczerpuje stos wątku i powoduje StackOverflowException. Ponieważ wyjątek StackOverflowException nie może być przechwycony w .NET, prowadzi to do natychmiastowego, nieodwracalnego zakończenia procesu, co skutkuje odmową usługi.
- CVE-2026-74794Wysokie
Scriban przed wersją 6.6.0 zawiera podatność na nieskończoną rekurencję podczas renderowania obiektów, gdy właściwość ObjectRecursionLimit jest domyślnie nieograniczona. Atakujący mogą dostarczyć obiekty z cyklicznymi referencjami do kontekstu szablonu, wyczerpując stos i wywołując nieprzechwytywalny StackOverflowException, który kończy proces hostujący.
- CVE-2026-74792Wysokie
Scriban przed wersją 7.0.0 (dotknięte wersje <= 6.6.0) zawiera podatność na przepełnienie stosu w parsowaniu zagnieżdżonych inicjalizatorów tablic. Głęboko zagnieżdżone inicjalizatory tablic rekurencyjnie przechodzą przez ścieżkę (ParseArrayInitializer → ParseExpression → ParseArrayInitializer), która nie jest objęta licznikiem ExpressionDepthLimit dodanym w poprawce dla GHSA-wgh7-7m3c-fx25. Atakujący, który może dostarczyć niezaufane dane do Template.Parse, może wywołać nieprzechwytywalny StackOverflowException, natychmiast kończący proces, nawet przy domyślnym włączonym ExpressionDepthLimit.
- CVE-2026-74791Wysokie
Scriban przed wersją 7.0.0 nie czyści słownika CachedTemplates podczas wywołania TemplateContext.Reset(), co pozwala na utrzymywanie się buforowanych szablonów w ponownie używanych kontekstach. Atakujący mogą wykorzystać zależne od żądania implementacje ITemplateLoader, aby uzyskać dostęp do wcześniej autoryzowanych treści szablonów z wcześniejszych renderowań bez ponownego wywoływania TemplateLoader.Load().
- CVE-2026-74789Wysokie
Scriban przed wersją 7.0.0 (dotknięte <= 6.6.0) stosuje ograniczenie LoopLimit tylko do instrukcji pętli skryptowych, a nie do kosztownych iteracji wykonywanych wewnątrz wbudowanych operatorów i funkcji. W rezultacie pojedyncze wyrażenie, takie jak {{ 1..1000000 | array.size }} lub wyrażenie amplifikujące pamięć, takie jak {{ 'A' * 200000000 }}, może wymusić duże zużycie CPU lub pamięci nawet przy skonfigurowanym bardzo małym LoopLimit, co prowadzi do odmowy usługi.
- CVE-2026-74788Wysokie
Scriban przed wersją 7.0.0 (dotknięte wersje <= 6.6.0) zawiera podatność na niekontrolowaną alokację pamięci w funkcjach szablonu string.pad_left i string.pad_right, które nie walidują parametru width przed delegowaniem do .NET String.PadLeft/PadRight. Gdy aplikacja udostępnia Scriban niezaufanym danym wejściowym, atakujący może podać bardzo dużą wartość width (np. 500 000 000), co powoduje alokację ~1GB pamięci w jednym wywołaniu, prowadząc do OutOfMemoryException i odmowy usługi. Limit LimitToString nie zapobiega temu, ponieważ jest egzekwowany dopiero po pełnej alokacji stringa.
- CVE-2026-74787Wysokie
Scriban przed wersją 7.0.0 zawiera podatność na niekontrolowaną rekurencję w funkcji wbudowanej object.to_json, która nie ma limitów głębokości ani wykrywania cyklicznych referencji. Atakujący mogą tworzyć szablony z obiektami odwołującymi się do siebie, co powoduje nieograniczoną rekurencję i wyjątek StackOverflowException, który kończy proces .NET.
- CVE-2026-74786Średnie
Scriban przed wersją 7.0.0 (dotknięte wersje <= 6.6.0) zawiera podatność na odmowę usługi, w której limit bezpieczeństwa LimitToString (domyślnie 1MB) może zostać ominięty, ponieważ ObjectToString resetuje licznik długości (_currentToStringLength) przy każdym wywołaniu najwyższego poziomu, a StringBuilderOutput nie egzekwuje skumulowanego limitu rozmiaru wyjścia. Atakujący, który może dostarczyć szablon, może wielokrotnie renderować ciąg bliski limitowi w pętli, przydzielając około 1GB pamięci i powodując warunek braku pamięci, który powoduje awarię aplikacji hostującej.
Oryginalny opis (angielski, źródło NVD)
Scriban versions 6.6.0 through 7.2.0 contain a non-enforcing ExpressionDepthLimit guard that fails to stop recursive descent parsing of deeply nested expressions. Attackers can supply templates with deeply nested parentheses, array initializers, object initializers, or unary operators to trigger an uncatchable StackOverflowException that immediately terminates the host process.
Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS

