CVE-2025-62492
ŚrednieCVSS 6.5Prawdopodobieństwo exploitacji (EPSS)
Niskie ryzykoPercentyl 32 - wyżej niż 32% wszystkich znanych CVE
Streszczenie
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.
Ocena ryzyka
Atakujący może wywołać odczyt poza granicami bufora, potencjalnie ujawniając zawartość sąsiedniej pamięci. Zakres odczytu jest mały (jeden element), ale może naruszyć poufność danych.
Rekomendacja
Zaktualizuj QuickJS do wersji zawierającej poprawkę lub unikaj przekazywania skrajnie małych ujemnych wartości fromIndex. Monitoruj aplikacje wykorzystujące QuickJS do przetwarzania niezaufanych danych.
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-62495Wysokie
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.
- 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-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)
A vulnerability stemming from floating-point arithmetic precision errors exists in the QuickJS engine's implementation of TypedArray.prototype.indexOf() when a negative fromIndex argument is supplied. * The fromIndex argument (read as a double variable, $d$) is used to calculate the starting position for the search. * If d is negative, the index is calculated relative to the end of the array by adding the array's length (len) to d: $$d_{new} = d + \text{len}$$ * Due to the inherent limitations of floating-point arithmetic, if the negative value $d$ is extremely small (e.g., $-1 \times 10^{-20}$), the addition $d + \text{len}$ can result in a loss of precision, yielding an outcome that is exactly equal to $\text{len}$. * The result is then converted to an integer index $k$: $k = \text{len}$. * The search function proceeds to read array elements starting from index $k$. Since valid indices are $0$ to $\text{len}-1$, starting the read at index $\text{len}$ is one element past the end of the array. This allows an attacker to cause an Out-of-Bounds Read of one element immediately following the buffer. While the scope of this read is small (one element), it can potentially lead to Information Disclosure of adjacent memory contents, depending on the execution environment.
Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS

