CVE-2026-76845
ŚrednieCVSS 6.5Prawdopodobieństwo exploitacji (EPSS)
Niskie ryzykoPercentyl 6 - wyżej niż 6% wszystkich znanych CVE
Streszczenie
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.
Ocena ryzyka
Atakujący, który może utworzyć dowiązanie symboliczne w współdzielonym, ponownie używanym lub przewidywalnym katalogu wyodrębniania, może nadpisać dowolny plik, do którego proces wyodrębniający ma prawo zapisu, co może prowadzić do naruszenia integralności systemu.
Rekomendacja
Należy zaktualizować adm-zip do wersji, która zawiera poprawkę, oraz unikać wyodrębniania archiwów w katalogach, gdzie mogą istnieć dowiązania symboliczne.
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-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 0.5.9 through 0.6.0 follows symbolic links at the extraction destination. Utils.sanitize in util/utils.js enforces containment by comparing only the string form of an archive entry name against the resolved extraction root, and Utils.writeFileTo opens the computed destination with fs.openSync(path, "w", 0o666), which resolves symbolic links and carries neither O_NOFOLLOW nor a pre-write fs.lstatSync check. When a path component at the destination already exists as a symbolic link pointing outside the extraction root, extractAllTo, extractAllToAsync and extractEntryTo write the entry contents through that link and then chmod its target, placing attacker-controlled content in a file outside the root without any traversal sequence appearing in the archive. Reaching the write requires overwrite to be enabled, because the preceding fs.existsSync check also resolves the link and otherwise declines. An attacker able to create a symbolic link inside a shared, reused or predictable extraction directory, such as a temporary directory or a continuous integration workspace, can overwrite any file the extracting process is permitted to write.
Dane podatności pochodzą z NVD (NIST) · CISA KEV · EPSS

