CVE-2025-62495
WysokieCVSS 8.8Prawdopodobieństwo exploitacji (EPSS)
Niskie ryzykoPercentyl 38 - wyżej niż 38% wszystkich znanych CVE
Streszczenie
Podatność typu integer overflow w silniku wyrażeń regularnych QuickJS (libregexp) z powodu niespójnej reprezentacji rozmiaru bufora bajtkodu. Duże lub złożone wyrażenie regularne może spowodować przepełnienie rozmiaru i zapis poza granicami bufora.
Ocena ryzyka
Może prowadzić do uszkodzenia pamięci, awarii lub potencjalnego wykonania kodu w aplikacjach używających QuickJS do przetwarzania niezaufanych wyrażeń regularnych.
Rekomendacja
Zaktualizuj QuickJS do wersji z poprawką. Ogranicz możliwość dostarczania złożonych wyrażeń regularnych przez niezaufanych użytkowników.
Inne podatności w QuickJS
Zobacz wszystkie- CVE-2026-88378Krytyczne
QuickJS commit 04be24600 zawiera podatność na zapis poza zakresem sterty w JS_ReadFunctionTag().
- CVE-2025-12745Średnie
W QuickJS do wersji eb2c89087def1829ed99630cb14b549d7a98408c funkcja js_array_buffer_slice w pliku quickjs.c powoduje nadmierne odczytanie bufora (buffer over-read). Atak wymaga lokalnego wykonania, a exploit jest publicznie dostępny.
- CVE-2025-62496Wysokie
Podatność w silniku QuickJS podczas tworzenia BigInt z ciągu znaków o bardzo dużej liczbie cyfr. Obliczenie liczby bitów powoduje przepełnienie liczb całkowitych, co prowadzi do zaniżenia rozmiaru bufora i zapisu poza granicami sterty (heap out-of-bounds write).
- CVE-2025-62494Wysokie
W silniku QuickJS występuje podatność typu type confusion podczas obsługi operacji dodawania ciągów (+). Podczas konwersji prawego operandu może zostać wywołany callback, który zmienia typ lewego operandu, co prowadzi do niezgodności typów i potencjalnego dostępu poza granicami pamięci.
- CVE-2025-62493Średnie
Podatność w silniku QuickJS w funkcji konwersji BigInt na string (js_bigint_to_string1) wynika z błędnego obliczenia liczby cyfr potrzebnych do reprezentacji, co prowadzi do odczytu pamięci poza zaalokowaną strukturą BigInt. W pewnych przypadkach brzegowych pętla konwersji odczytuje dane z sąsiedniego limb, powodując out-of-bounds read.
- CVE-2025-62492Średnie
W silniku QuickJS występuje błąd precyzji arytmetyki zmiennoprzecinkowej w implementacji TypedArray.prototype.indexOf() przy ujemnym argumencie fromIndex. Gdy wartość jest bardzo mała (np. -1e-20), dodanie długości tablicy może stracić precyzję i dać indeks równy długości, powodując odczyt poza granicami bufora o jeden element. Może to prowadzić do ujawnienia informacji z sąsiedniej pamięci.
- CVE-2025-62491Wysokie
W bibliotece standardowej silnika QuickJS występuje use-after-free podczas iteracji po liście odrzuconych obietnic (rejected_promise_list). Złośliwy getter właściwości obiektu Error może wywołać catch() na tej samej obietnicy, co usuwa i zwalnia bieżący wpis listy, a pętla dalej używa zwolnionego wskaźnika.
- CVE-2025-62490Wysokie
W funkcji js_print_object w QuickJS drukowanie tablicy najpierw pobiera długość, a następnie iteruje po niej, mimo że drukowanie wartości nie jest wolne od efektów ubocznych. Callback zdefiniowany przez atakującego może zmienić rozmiar tablicy podczas js_print_value, powodując użycie po zwolnieniu; podobny problem występuje przy drukowaniu obiektów Map i Set.
Oryginalny opis (angielski, źródło NVD)
An integer overflow vulnerability exists in the QuickJS regular expression engine (libregexp) due to an inconsistent representation of the bytecode buffer size. * The regular expression bytecode is stored in a DynBuf structure, which correctly uses a $\text{size}\_\text{t}$ (an unsigned type, typically 64-bit) for its size member. * However, several functions, such as re_emit_op_u32 and other internal parsing routines, incorrectly cast or store this DynBuf $\text{size}\_\text{t}$ value into a signed int (typically 32-bit). * When a large or complex regular expression (such as those generated by a recursive pattern in a Proof-of-Concept) causes the bytecode size to exceed $2^{31}$ bytes (the maximum positive value for a signed 32-bit integer), the size value wraps around, resulting in a negative integer when stored in the int variable (Integer Overflow). * This negative value is subsequently used in offset calculations. For example, within functions like re_parse_disjunction, the negative size is used to compute an offset (pos) for patching a jump instruction. * This negative offset is then incorrectly added to the buffer pointer (s->byte\_code.buf + pos), leading to an out-of-bounds write on the first line of the snippet below: put_u32(s->byte_code.buf + pos, len);
Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS

