CVE-2026-102282
WysokieCVSS 7.1Prawdopodobieństwo exploitacji (EPSS)
Niskie ryzykoPercentyl 4 - wyżej niż 4% wszystkich znanych CVE
Streszczenie
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.
Ocena ryzyka
Atakujący może dostarczyć spreparowane archiwum ZIP, które po rozpakowaniu jako root tworzy plik setuid, umożliwiając późniejsze wykonanie kodu z uprawnieniami roota przez mniej uprzywilejowanego użytkownika. W środowiskach Docker, CI i instalacjach uprzywilejowanych ryzyko eskalacji uprawnień jest krytyczne.
Rekomendacja
Zaktualizować adm-zip do wersji 0.6.1. Do czasu aktualizacji unikać używania keepOriginalPermission=true lub filtrować bity setuid/setgid/sticky przed rozpakowaniem.
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-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.
- CVE-2026-39244Wysokie
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.
Oryginalny opis (angielski, źródło NVD)
adm-zip is a JavaScript library for creating and extracting ZIP archives in Node.js. Prior to 0.6.1, adm-zip applies the Unix permission bits stored in a zip entry directly to the extracted file via `fs.chmodSync()` when `keepOriginalPermission=true` is passed to `extractAllTo()`/`extractEntryTo()` — and it never filters the setuid/setgid/sticky bits out of those bits. A zip crafted by an attacker can therefore produce an extracted binary with mode `04755`. When extraction runs as root (the default posture in Docker builds, CI runners, and privileged install steps — the exact environments where this flag is used), the resulting root-owned setuid file is executed later by a lesser-privileged user, turning the attacker's code into a root execution. Version 0.6.1 fixes the issue.
Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS

