CVE-2026-74790
KrytyczneCVSS 9.1Prawdopodobieństwo exploitacji (EPSS)
Niskie ryzykoPercentyl 21 - wyżej niż 21% wszystkich znanych CVE
Streszczenie
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.
Ocena ryzyka
Ryzyko obejścia polityk sandboxa w aplikacjach wielodostępnych, co może prowadzić do nieautoryzowanego dostępu do danych lub funkcji.
Rekomendacja
Zaktualizuj Scriban do wersji 7.0.0 lub nowszej, aby wyeliminować problem z cache'owaniem TypedObjectAccessor.
Inne podatności w Scriban
Zobacz wszystkie- 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.
- CVE-2026-74785Średnie
Scriban przed wersją 7.0.0 zawiera trzy odrębne podatności na odmowę usługi w ocenie wyrażeń, które omijają istniejące zabezpieczenia poprzez nieograniczone mnożenie ciągów, niekontrolowane operacje przesunięcia BigInteger oraz ominięcie LoopLimit przez wyliczanie zakresów w funkcjach wbudowanych. Atakujący, którzy mogą dostarczać szablony, mogą powodować wyjątki braku pamięci lub wyczerpanie procesora, zwykle kończąc cały proces hosta.
Oryginalny opis (angielski, źródło NVD)
Scriban before 7.0.0 caches TypedObjectAccessor by Type only without considering MemberFilter changes, allowing reused TemplateContext instances to expose members that should be hidden. Attackers can access filtered properties and fields by reusing a TemplateContext after tightening its MemberFilter, bypassing sandbox policies across requests or tenants.
Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS

