CVE-2026-39244
WysokieCVSS 7.5Prawdopodobieństwo exploitacji (EPSS)
Niskie ryzykoPercentyl 35 - wyżej niż 35% wszystkich znanych CVE
Streszczenie
Biblioteka adm-zip przed wersją 0.5.18 jest podatna na atak typu odmowa usługi (DoS) poprzez spreparowany plik ZIP z manipulowanym polem rozmiaru nieskompresowanego. Atakujący może utworzyć mały plik ZIP (ok. 120 bajtów) deklarujący rozmiar nieskompresowany na poziomie 4 GB, co prowadzi do alokacji pamięci o amplifikacji ponad 33 milionów do 1, powodując awarię procesu.
Ocena ryzyka
Organizacja narażona jest na bezpośrednie przerwanie działania aplikacji przetwarzającej niezaufane pliki ZIP za pomocą adm-zip. Atak może być przeprowadzony zdalnie bez uwierzytelniania, prowadząc do wyczerpania pamięci i awarii systemu.
Rekomendacja
Należy natychmiast zaktualizować bibliotekę adm-zip do wersji 0.5.18 lub nowszej. Jeśli aktualizacja nie jest możliwa, należy wdrożyć walidację rozmiaru nieskompresowanego przed przetwarzaniem plików ZIP.
Inne podatności w adm-zip
Zobacz wszystkie- CVE-2026-114105Średnie
W bibliotece adm-zip przed wersją 0.6.1 występuje podatność nieprawidłowego przypisania uprawnień, umożliwiająca ustawienie bitów setuid, setgid lub sticky na rozpakowywanych plikach, gdy włączona jest opcja keepOriginalPermission. Złośliwe atrybuty zewnętrzne zip są przekazywane bez maskowania do chmod.
- CVE-2026-114104Średnie
W bibliotece adm-zip przed wersją 0.6.1 występuje podatność niespójnego rozwiązywania wpisów, umożliwiająca obejście walidacji zawartości poprzez dostarczenie archiwów ZIP z zduplikowanymi nazwami wpisów. getEntry() zwraca ostatni duplikat, podczas gdy extractAllTo() zapisuje pierwszy.
- CVE-2026-114103Średnie
Biblioteka adm-zip w wersji 0.6.0 zawiera obejście zabezpieczenia przed bombą dekompresyjną. Atakujący mogą ominąć limit maxOutputLength, wykorzystując asynchroniczną ścieżkę getDataAsync() w methods/inflater.js i tworząc wpisy ZIP ze zafałszowanymi małymi rozmiarami oraz wysoce skompresowanymi danymi DEFLATE.
- CVE-2026-114102Wysokie
adm-zip w wersjach przed 0.6.1 zawiera podatność typu denial of service, która pozwala nieuwierzytelnionym atakującym na zawieszenie procesu Node.js poprzez złośliwy plik ZIP, ponieważ inflateAsync w methods/inflater.js nie ma nasłuchiwacza błędów strumienia zlib. Atakujący może dostarczyć ZIP z uszkodzonymi danymi DEFLATE przetwarzanymi przez readFileAsync, readAsTextAsync, extractAllToAsync lub getDataAsync, wywołując nieprzechwytywany wyjątek, który kończy wszystkie żądania w toku.
- CVE-2026-102282Wysokie
Biblioteka adm-zip przed wersją 0.6.1 stosuje uniksowe bity uprawnień z wpisu ZIP bezpośrednio do rozpakowanego pliku przez fs.chmodSync(), gdy keepOriginalPermission=true jest przekazane do extractAllTo()/extractEntryTo() — i nigdy nie filtruje bitów setuid/setgid/sticky. Złośliwy ZIP może utworzyć plik wykonywalny z mode 04755, co przy rozpakowywaniu jako root prowadzi do wykonania kodu atakującego z uprawnieniami roota.
- CVE-2026-77301Wysokie
Podatność w bibliotece adm-zip (JavaScript) przed wersją 0.6.1 dotyczy funkcji getData() w zipEntry.js, która ufa rozmiarowi nieskompresowanemu z centralnego katalogu i alokuje pamięć przed walidacją. Mały spreparowany plik ZIP może deklarować wielogigabajtowy rozmiar, powodując nadmierne zużycie pamięci przed zgłoszeniem błędu CRC. Aplikacje czytające wpisy z niezaufanych archiwów mogą zostać przerwane przez system lub doświadczyć wyczerpania pamięci.
- CVE-2026-92000Wysokie
adm-zip w wersjach od 0.5.14 do 0.6.0 nie stosuje limitów wyjścia dekompresji zlib, gdy wpisy ZIP deklarują zerowy rozmiar nieskompresowany. Atakujący mogą stworzyć złośliwe archiwa ZIP z wysoce kompresowalnymi wpisami deklarującymi zerowy rozmiar, co prowadzi do wyczerpania pamięci i odmowy usługi.
- CVE-2026-76845Średnie
adm-zip w wersjach 0.5.9 do 0.6.0 podąża za dowiązaniami symbolicznymi w miejscu wyodrębniania. Funkcja Utils.sanitize sprawdza tylko formę stringową nazwy wpisu archiwum, a Utils.writeFileTo otwiera ścieżkę docelową bez użycia O_NOFOLLOW ani wcześniejszego sprawdzenia fs.lstatSync. Jeśli składnik ścieżki w miejscu docelowym istnieje jako dowiązanie symboliczne wskazujące poza katalog wyodrębniania, extractAllTo, extractAllToAsync i extractEntryTo zapisują zawartość wpisu przez to dowiązanie, a następnie zmieniają jego cel, umieszczając zawartość kontrolowaną przez atakującego w pliku poza katalogiem. Osiągnięcie zapisu wymaga włączenia opcji overwrite, ponieważ poprzednie sprawdzenie fs.existsSync również rozwiązuje dowiązanie i w przeciwnym razie odmawia.
Oryginalny opis (angielski, źródło NVD)
adm-zip before 0.5.18 is vulnerable to denial of service via a crafted ZIP file with a manipulated uncompressed size header field. In zipEntry.js line 103, Buffer.alloc(_centralHeader.size) allocates memory based on the declared uncompressed size from the ZIP central directory header without validating it against the actual compressed data size or imposing any upper bound. The size value is read directly from the binary header at entryHeader.js line 266 with no bounds check. An attacker can craft a ~120-byte ZIP file that declares ~4GB uncompressed size, causing a memory allocation amplification ratio of over 33 million to 1. The allocation occurs before CRC validation, so the malicious payload cannot be rejected early. All extraction and read methods are affected: readFile(), readAsText(), extractEntryTo(), extractAllTo(), extractAllToAsync(), test(), and entry.getData(). Any application accepting untrusted ZIP files via adm-zip is vulnerable to immediate process crash.
Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS

