CVE-2023-34454
ŚrednieCVSS 5.9Prawdopodobieństwo exploitacji (EPSS)
Podwyższone ryzykoPercentyl 70 - wyżej niż 70% wszystkich znanych CVE
Streszczenie
W bibliotece snappy-java występuje problem z niekontrolowanymi mnożeniami, co może prowadzić do przepełnienia całkowitego w wersjach przed 1.1.10.1. Funkcja `compress(char[] input)` nie sprawdza długości tablicy, co może skutkować błędami krytycznymi.
Ocena ryzyka
Organizacje mogą napotkać nieodwracalne błędy krytyczne, które mogą prowadzić do awarii aplikacji korzystających z tej biblioteki. Potencjalne problemy z alokacją pamięci mogą prowadzić do naruszenia dostępu.
Rekomendacja
Zaleca się aktualizację do wersji 1.1.10.1 lub nowszej, aby usunąć tę podatność. Należy również przeprowadzić audyt kodu, aby upewnić się, że długości tablic są odpowiednio sprawdzane przed ich użyciem.
Inne podatności w snappy-java
Zobacz wszystkie- CVE-2026-116590Średnie
snappy-java to port Java szybkiego kompresora/dekompresora snappy opracowanego przez Google. W wersjach przed 1.1.10.9 funkcja Snappy.arrayCopy(Object src, int offset, int byteLength, Object dest, int destOffset) przekazuje zakresy podane przez wywołującego do natywnego memcpy bez walidacji którejkolwiek tablicy, co pozwala na ujemne lub zbyt duże wartości byteLength i offset powodujące odczyt lub zapis poza granicami tablicy i awarię JVM. Metody SnappyOutputStream.rawWrite i SnappyInputStream.rawRead, w tym ich metody zapisu i odczytu tablic typowanych, przekazują zakresy kontrolowane przez wywołującego przez ten prymityw, a obliczenia rozmiaru bajtów tablic typowanych mogą powodować przepełnienie int. Problem naprawiono w wersji 1.1.10.9.
- CVE-2026-108106Wysokie
Xerial snappy-java przed wersją 1.1.10.9 zawiera podatność nieograniczonej alokacji pamięci, która pozwala atakującym wyczerpać pamięć JVM poprzez zadeklarowanie dużej długości nieskompresowanych danych w skompresowanym wejściu. Atakujący może dostarczyć kilka spreparowanych bajtów do Snappy.uncompress, uncompressString, SnappyInputStream lub SnappyFramedInputStream, aby wymusić alokacje do 2 GB, powodując OutOfMemoryError i odmowę usługi.
- CVE-2026-108104Średnie
Biblioteka Xerial snappy-java od wersji 1.1.7.4 do 1.1.10.10 zawiera podatność podwójnego zwolnienia w SnappyFramedInputStream, która zwraca bufory z puli dwukrotnie, gdy alokacja zastępcza zawiedzie. Atakujący mogą dostarczyć dane ramkowe z dużym zadeklarowanym rozmiarem fragmentu, aby wywołać OutOfMemoryError, powodując współdzielone tablice, które ujawniają lub nadpisują zdekompresowane dane innych strumieni.
- CVE-2026-93452Wysokie
snappy-java do wersji 1.1.10.8 zawiera podatność na przepełnienie bufora w funkcji Snappy.compress(ByteBuffer, ByteBuffer), która zapisuje poza koniec bufora docelowego. Atakujący mogą dostarczyć niekompresowalne dane przekraczające pozostałą pojemność bufora docelowego, co powoduje uszkodzenie pamięci poza stertą i zakończenie działania JVM.
- CVE-2026-93451Średnie
snappy-java do wersji 1.1.10.8 zawiera podatność przepełnienia bufora w metodach Snappy.uncompress*Array, które alokują tablice wyjściowe, dzieląc nieskompresowaną długość przez rozmiar elementu, ale przekazują niepodzieloną długość do kodu natywnego. Atakujący kontrolujący skompresowane dane wejściowe mogą spowodować zapis poza granicami tablicy, uszkadzając pamięć sterty.
- CVE-2026-90559Wysokie
snappy-java w wersjach do 1.1.10.8 zawiera podatność zapisu poza granicami w metodzie Snappy.uncompress(ByteBuffer, ByteBuffer), ponieważ pojemność bufora docelowego nie jest walidowana względem rozmiaru zdekompresowanych danych. Atakujący może dostarczyć prawidłowe skompresowane dane, które dekompresują się do większego rozmiaru niż bufor docelowy, powodując zapisy poza granicami bufora i zakończenie pracy JVM.
- CVE-2023-34455Wysokie
W bibliotece snappy-java występuje błąd związany z niekontrolowaną długością fragmentu, który może prowadzić do krytycznego błędu w wersjach przed 1.1.10.1. Funkcja hasNextChunk nie sprawdza poprawności zmiennej chunkSize, co może skutkować wyjątkiem NegativeArraySizeException lub OutOfMemoryError.
- CVE-2023-34453Średnie
W bibliotece snappy-java występuje podatność związana z niekontrolowanymi mnożeniami, co może prowadzić do przepełnienia całkowitego w wersjach przed 1.1.10.1. Funkcja `shuffle(int[] input)` może spowodować krytyczny błąd, gdy długość tablicy nie jest odpowiednio sprawdzana.
Oryginalny opis (angielski, źródło NVD)
snappy-java is a fast compressor/decompressor for Java. Due to unchecked multiplications, an integer overflow may occur in versions prior to 1.1.10.1, causing an unrecoverable fatal error. The function `compress(char[] input)` in the file `Snappy.java` receives an array of characters and compresses it. It does so by multiplying the length by 2 and passing it to the rawCompress` function. Since the length is not tested, the multiplication by two can cause an integer overflow and become negative. The rawCompress function then uses the received length and passes it to the natively compiled maxCompressedLength function, using the returned value to allocate a byte array. Since the maxCompressedLength function treats the length as an unsigned integer, it doesn’t care that it is negative, and it returns a valid value, which is casted to a signed integer by the Java engine. If the result is negative, a `java.lang.NegativeArraySizeException` exception will be raised while trying to allocate the array `buf`. On the other side, if the result is positive, the `buf` array will successfully be allocated, but its size might be too small to use for the compression, causing a fatal Access Violation error. The same issue exists also when using the `compress` functions that receive double, float, int, long and short, each using a different multiplier that may cause the same issue. The issue most likely won’t occur when using a byte array, since creating a byte array of size 0x80000000 (or any other negative value) is impossible in the first place. Version 1.1.10.1 contains a patch for this issue.
Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS

