CVE-2026-114129
ŚrednieCVSS 6.2Prawdopodobieństwo exploitacji (EPSS)
Niskie ryzykoPercentyl 17 - wyżej niż 17% wszystkich znanych CVE
Streszczenie
W bibliotece stream-json od wersji 2.0.0 do 3.7.0 komponent FlexAssembler przy każdej operacji na kontenerze łączy pełny stos kluczy, co przy głęboko zagnieżdżonym dokumencie powoduje kwadratowe zużycie CPU. Problem występuje przed decyzją o dopasowaniu reguły, więc atakujący nie musi znać schematu; dotyczy to konsumentów używających filtrów ścieżek (string lub regex).
Ocena ryzyka
Złośliwy, głęboko zagnieżdżony dokument JSON może zablokować całą pracę współbieżną w procesie jednogwątkowym, powodując odmowę usługi.
Rekomendacja
Zaktualizuj stream-json do wersji 3.7.0 lub nowszej, która wprowadza domyślne ograniczenie maksymalnej głębokości.
Inne podatności w stream-json
Zobacz wszystkie- CVE-2026-104183Średnie
stream-json to mikro-biblioteka komponentów strumieniowych do przetwarzania JSON i JSONC o minimalnym zużyciu pamięci. Przed wersją 3.6.0, Assembler materializuje właściwości obiektów przez zwykłe przypisanie, więc klucz wejściowy o nazwie __proto__ wywołuje dziedziczony setter i powoduje zastąpienie prototypu przetwarzanego obiektu zamiast utworzenia własnej właściwości danych. Aplikacje, które podejmują decyzje autoryzacyjne lub funkcjonalne na podstawie dziedziczonych wartości, mogą korzystać z właściwości kontrolowanych przez atakującego, a null prototype może zakłócić działanie kodu oczekującego metod Object.prototype. Badacz traktuje parsowanie niezaufanego JSON jako część kontraktu projektu, podczas gdy opiekun stwierdza, że udokumentowane wejścia to lokalnie posiadane zrzuty, eksporty lub logi i charakteryzuje wektor ataku jako lokalny. Globalny Object.prototype nie jest zanieczyszczony. Problem został naprawiony w wersji 3.6.0.
- CVE-2026-104182Średnie
stream-json to mikro-biblioteka komponentów strumieniowych do przetwarzania JSON i JSONC o minimalnym zużyciu pamięci. Przed wersją 3.6.0, parser JSONC w stream-json/jsonc/parser.js i weryfikator w stream-json/jsonc/verifier.js wznawiają skanowanie terminatora komentarza od otwierającego ukośnika, gdy komentarz blokowy lub liniowy obejmuje wiele fragmentów wejścia, zachowując jednocześnie zgromadzony bufor komentarza. Dostarczenie dużego prawidłowego komentarza w wielu małych fragmentach powoduje kwadratową złożoność obliczeniową i może zablokować pętlę zdarzeń Node.js. Opiekun charakteryzuje wektor ataku jako lokalny, ponieważ udokumentowane wejście JSONC jest lokalnie posiadaną lub kontrolowaną przez użytkownika konfiguracją, a nie danymi przeznaczonymi dla otwartego internetu. Zakres dotyczy tylko JSONC, nie obejmuje zwykłego parsera JSON, który przetwarza i odrzuca zużyte dane łańcuchowe i liczbowe. Problem został naprawiony w wersji 3.6.0.
- CVE-2026-71429Średnie
stream-json to mikro-biblioteka komponentów strumieniowych do przetwarzania JSON i JSONC, która przed wersją 3.5.0 w filtrach ścieżek pick, ignore, filter i replace w src/core/filters/filter-base.js przelicza pełny ciąg ścieżki ze stosu zagnieżdżenia dla każdego tokena podlegającego sprawdzeniu. Ponieważ długość stosu równa się bieżącej głębokości zagnieżdżenia, a token sprawdzany jest emitowany na każdym poziomie, dokument o głębokości D kosztuje O(D²) zamiast O(D). Problem jest wywoływany przez głębokość zagnieżdżenia, a nie objętość bajtów, więc aplikacja przesyłająca niezaufany JSON przez filtr string lub RegExp może zablokować pętlę zdarzeń Node.js i spowodować denial of service przy użyciu małego, głęboko zagnieżdżonego dokumentu. Streamery streamArray, streamObject i streamValues nie są dotknięte, ponieważ używają stałoczasowego gettera asm.depth. Problem naprawiono w wersji 3.5.0.
Oryginalny opis (angielski, źródło NVD)
stream-json is a micro-library of stream components for processing JSON and JSONC with a minimal memory footprint. From 2.0.0 until 3.7.0, FlexAssembler compiles string and regular-expression path filters into matchers that join the full key stack on every container start. Because the key stack grows with unbounded object or array nesting, a document nested to depth D causes D joins whose cost grows with the current depth, resulting in quadratic CPU consumption on the single-threaded event loop. The join occurs before the rule match decision, so the attacker does not need to know the target schema. Consumers using only function filters or no rules are not affected. A crafted nested document can stall all concurrent work in a process that feeds it to an affected FlexAssembler. This issue is fixed in 3.7.0, which adds a default maximum depth.
Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS

