SecTech ›
7-Zip i PeaZip pod lupą: kto za nimi stoi, jak działają i co mają w środku
Najpopularniejszy darmowy archiwizator ma jednego autora, kilkadziesiąt parserów napisanych w C++ i ani jednej automatycznej aktualizacji. Rozbieramy 7-Zipa na części i sprawdzamy, co naprawdę siedzi w PeaZipie, po który sięgają instytucje szukające zamiennika.
Autor: CybF1sh 11 min czytania
7-Zip jest na niemal każdym służbowym komputerze z Windows. Instaluje go informatyk „na wszelki wypadek”, dociąga go w swoim katalogu połowa programów, które muszą rozpakować paczkę z aktualizacją, i to nim użytkownicy „szyfrują” pliki przed wysłaniem mailem. Właśnie dlatego warto wiedzieć, skąd pochodzi, jak jest zbudowany i gdzie ma słabe punkty — a także co dokładnie dostaje ten, kto przesiada się na PeaZipa.
Kto stoi za 7-Zipem
7-Zip napisał i od samego początku rozwija Igor Pawłow (Igor Pavlov) — rosyjski programista. Pierwsza wersja ukazała się w 1999 roku, a program przez ponad ćwierć wieku pozostał w praktyce projektem jednej osoby. Nie stoi za nim firma, fundacja ani zespół z podziałem obowiązków: ten sam człowiek pisze kod, przyjmuje zgłoszenia błędów, wydaje wersje i publikuje je na stronie 7-zip.org.
Kilka cech tego modelu ma znaczenie dla bezpieczeństwa:
- Kod jest otwarty, ale proces nie. Źródła są publikowane jako archiwa przy kolejnych wydaniach, na licencji GNU LGPL (z dodatkowym ograniczeniem dla kodu dekompresji RAR, a fragmenty na licencji BSD). Nie ma jednak publicznego repozytorium z historią zmian, przeglądem kodu i listą osób, które zatwierdzają poprawki. Repozytoria 7-Zipa na GitHubie to kopie robione przez osoby trzecie.
- Silnik LZMA jest w domenie publicznej. LZMA SDK — biblioteka z algorytmami LZMA/LZMA2 i obsługą formatu 7z — trafiła do setek innych programów, instalatorów i systemów wbudowanych. Błąd w niej rozchodzi się więc daleko poza sam 7-Zip.
- Jeden punkt zaufania. Bezpieczeństwo milionów instalacji zależy od uczciwości, zdrowia i sytuacji jednej osoby w jednej jurysdykcji. To nie jest zarzut wobec autora — nikt nie wykazał, że w 7-Zipie jest celowo ukryta furtka — ale to dokładnie ten typ ryzyka, który analizuje się przy ocenie łańcucha dostaw.
Jak zbudowany jest 7-Zip
Pod prostym okienkiem kryje się dość rozbudowana architektura. Program składa się z kilku plików, które łatwo pomylić:
| Plik | Rola |
|---|---|
7zFM.exe | menedżer plików — to okno, które widzi użytkownik |
7zG.exe | okienka postępu i dialogi wywoływane z menu kontekstowego |
7z.exe | wiersz poleceń; całą pracę zleca bibliotece 7z.dll |
7z.dll | właściwy silnik: obsługa formatów, kompresja, szyfrowanie |
7-zip.dll | rozszerzenie powłoki Eksploratora (menu „7-Zip” pod prawym przyciskiem) |
7za.exe, 7zr.exe | samodzielne wersje konsolowe bez DLL, często wklejane do cudzych skryptów i instalatorów |
Silnik jest napisany w C++ i C, a najgorętsze miejsca — dekoder LZMA, AES, CRC, SHA — mają dodatkowe wersje w asemblerze dla x86, x64 i ARM64. Wewnątrz działa system wtyczek w stylu COM: każdy format archiwum implementuje interfejsy odczytu i zapisu (IInArchive, IOutArchive), a każdy algorytm — interfejs kodera. Dzięki temu dopisanie nowego formatu nie rusza reszty programu.
Własny format 7z jest kontenerem: krótki nagłówek sygnatury na początku, potem spakowane strumienie danych, a na końcu nagłówek z opisem plików (często sam skompresowany). Pliki mogą być pakowane w trybie solid — jako jeden ciągły strumień — co daje świetny współczynnik kompresji, ale oznacza, że uszkodzenie jednego bajtu potrafi zniszczyć wszystko, co leży za nim. Do dyspozycji są metody LZMA, LZMA2 (wielowątkowa), PPMd, BZip2 i Deflate oraz filtry przygotowujące kod maszynowy do kompresji (BCJ, BCJ2, ARM64).
Najważniejsza rzecz z punktu widzenia bezpieczeństwa: 7-Zip tworzy kilka formatów (7z, ZIP, GZIP, BZIP2, XZ, TAR, WIM), ale czyta kilkadziesiąt — RAR, CAB, ISO, UDF, VHD/VHDX, obrazy NTFS i FAT, HFS, SquashFS, MSI, CHM, instalatory NSIS i wiele innych. Każdy z tych parserów to kod w języku bez ochrony pamięci, który przetwarza dane dostarczone przez obcą osobę. To właśnie tam, a nie w samym LZMA, znajdowano większość poważnych błędów.
Jak 7-Zip szyfruje
- Archiwa 7z: AES-256 w trybie CBC. Klucz powstaje z hasła przez 219 (524 288) iteracji SHA-256 z solą. To rozsądnie spowalnia zgadywanie haseł, ale nie jest nowoczesną funkcją odporną na karty graficzne, jak Argon2.
- Brak uwierzytelnienia szyfrogramu. 7z nie ma kodu MAC ani trybu AEAD. Integralność sprawdza CRC32 rozpakowanych danych — suma kontrolna, a nie kryptograficzny dowód, że nikt niczego nie zmienił.
- Archiwa ZIP: domyślną metodą jest stary ZipCrypto, łamany atakiem ze znanym tekstem jawnym (narzędzia typu
bkcrackrobią to w minuty, jeśli znany jest fragment choćby jednego pliku). AES-256 trzeba wybrać ręcznie.
Wycieki: co zdradza „zaszyfrowane” archiwum
Najczęstszy wyciek z udziałem 7-Zipa nie wymaga żadnego exploita. Wystarczą ustawienia domyślne:
- Nazwy plików zostają jawne. W archiwum 7z z hasłem lista plików — nazwy, rozmiary, daty modyfikacji — jest widoczna bez hasła, dopóki nie zaznaczy się „Szyfruj nazwy plików” (w wierszu poleceń:
-mhe=on). PlikWyniki_kontroli_Kowalski_PESEL.xlsxmówi sam za siebie, nawet jeśli jego treść jest bezpieczna. W ZIP nazw plików nie da się zaszyfrować w ogóle. - ZIP z ZipCrypto. Użytkownik widzi pole „Hasło” i zakłada, że dane są chronione. Przy ZipCrypto ta ochrona jest iluzoryczna.
- Hasło w tym samym kanale. Archiwum w załączniku, hasło w kolejnym mailu do tej samej skrzynki — to problem procedury, nie programu, ale 7-Zip w żaden sposób go nie utrudnia.
- Utrata znacznika „z internetu”. Windows oznacza pobrane pliki znacznikiem Mark-of-the-Web, dzięki któremu SmartScreen i Office ostrzegają przed ich otwarciem. Przez lata 7-Zip w ogóle nie przenosił go na rozpakowane pliki; od wersji 22.00 potrafi, ale trzeba to włączyć w ustawieniach. Podatność CVE-2025-0411 pozwalała go zgubić nawet przy włączonej ochronie — przez archiwum zagnieżdżone w archiwum.
Przypadek z życia: CVE-2025-0411 nie była teoretyczna. Według analizy Trend Micro jesienią 2024 roku grupy powiązane z Rosją wysyłały do ukraińskich instytucji rządowych i firm archiwa z podwójnym zagnieżdżeniem i nazwami udającymi dokumenty (z użyciem znaków homoglifów). Po rozpakowaniu podatnym 7-Zipem złośliwy plik tracił znacznik MotW i uruchamiał się bez ostrzeżenia, instalując SmokeLoader. Poprawka weszła w wersji 24.09.
Rok później ten sam mechanizm ochronny zawiódł ponownie, i to skuteczniej. CVE-2026-58052 — zgłoszone przez badacza o pseudonimie ashdfrkl za pośrednictwem VulnCheck i opublikowane 27 czerwca 2026 r. — wykorzystuje spreparowane archiwum RAR5. 7-Zip blokował w archiwum strumień o dokładnej nazwie Zone.Identifier, ale rekord RAR5 nazwany :Zone.Identifier:$DATA przez to sito przechodził, a system plików NTFS sprowadzał obie nazwy do tego samego strumienia — nadpisując świeżo nadany znacznik strefy internetowej wartością ZoneId=0. Drugi rekord, ::$DATA, podmieniał właściwą zawartość rozpakowanego pliku. Efekt: żadnego ostrzeżenia SmartScreen i plik, który pokazuje co innego, niż zapowiada jego nazwa. NVD wskazuje jako podatne wszystkie wersje do 26.01 włącznie, a poprawka trafiła dopiero do 26.03 z 3 września 2026 r. Kod dowodowy jest publiczny.
Najważniejsze podatności ostatniej dekady
Poniższa lista nie jest kompletna, ale pokazuje wzór: błędy siedzą głównie w parserach rzadziej używanych formatów, a skutkiem bywa wykonanie kodu przy samym otwarciu archiwum.
| Identyfikator | Czego dotyczy | Naprawione w |
|---|---|---|
| CVE-2016-2334 | przepełnienie sterty przy obrazach HFS+ (Cisco Talos) | 16.00 |
| CVE-2016-2335 | odczyt poza buforem przy obrazach UDF | 16.00 |
| CVE-2018-5996 | uszkodzenie pamięci w dekompresji RAR/PPMd | 18.00 |
| CVE-2018-10115 | błąd przy archiwach RAR typu solid, możliwe wykonanie kodu | 18.05 |
| CVE-2022-29072 | zgłoszone podniesienie uprawnień przez plik pomocy; autor kwestionuje, że to podatność 7-Zipa | sporne |
| CVE-2023-31102 | niedopełnienie liczby całkowitej w Ppmd7 (Zero Day Initiative) | 23.00 |
| CVE-2023-40481 | zapis poza buforem przy obrazach SquashFS | 23.00 |
| CVE-2024-11477 | niedopełnienie liczby całkowitej w dekompresji Zstandard, możliwe wykonanie kodu | 24.07 |
| CVE-2025-0411 | obejście Mark-of-the-Web, wykorzystywane w atakach | 24.09 |
| CVE-2025-11001, CVE-2025-11002 | dowiązania symboliczne w ZIP pozwalające zapisać plik poza katalogiem docelowym | 25.00 |
| CVE-2025-55188 | zapis dowolnego pliku przez dowiązania symboliczne | 25.01 |
| CVE-2026-48092 … 48112 | osiem błędów pamięci w obsłudze obrazów SquashFS, NTFS, UEFI, UDF, WIM i archiwów Ar | 26.01 |
| CVE-2026-14266 | przepełnienie sterty przy dekompresji XZ, możliwe zdalne wykonanie kodu | 26.02 |
| CVE-2026-58052 | drugie obejście Mark-of-the-Web, tym razem przez archiwum RAR5; publiczny kod dowodowy | 26.03 |
Same błędy nie są niczym wyjątkowym — mają je wszystkie archiwizatory. Problemem jest to, co dzieje się po wydaniu poprawki:
- 7-Zip nie aktualizuje się sam. Nie ma usługi aktualizacji ani nawet powiadomienia o nowej wersji. W typowej organizacji każdy komputer ma tę wersję, która była aktualna w dniu instalacji systemu — czasem sprzed kilku lat.
- Kopie w cudzych programach.
7z.dlli7za.exeleżą w katalogach dziesiątek aplikacji i skryptów. Aktualizacja „głównego” 7-Zipa ich nie dotyka, a inwentaryzacja takich kopii w praktyce się nie odbywa. - Brak podpisu cyfrowego. Instalatory z
7-zip.orgnie są podpisane certyfikatem Authenticode. Nie da się więc zbudować reguły AppLocker/WDAC typu „dopuść pliki tego wydawcy”, a użytkownik nie odróżni oryginału od podróbki po podpisie. - Podrobione strony. Jedynym oficjalnym adresem jest
7-zip.org. Domeny łudząco podobne do niego wielokrotnie służyły do rozprowadzania instalatorów z dołączonym złośliwym oprogramowaniem — a brak podpisu cyfrowego ułatwia takie podmiany.
PeaZip: jaki silnik ma naprawdę
PeaZip często pada jako „alternatywa dla 7-Zipa”. Tworzy go Giorgio Tani z Włoch, od 2006 roku, w języku Free Pascal ze środowiskiem Lazarus, na licencji LGPLv3. Działa na Windows, Linuksie i macOS, ma nowocześniejszy interfejs, wbudowane narzędzia do sum kontrolnych, bezpiecznego usuwania plików i porównywania katalogów.
Kluczowa rzecz, o której mało kto wie: PeaZip w dużej części jest nakładką graficzną. Sam wykonuje tylko obsługę swojego formatu PEA, a przy pozostałych formatach wywołuje zewnętrzne programy, które dostarcza razem ze sobą w podkatalogu res\bin:
- 7-Zip (
7z.exei7z.dll; na Linuksie 7-Zip dla Linuksa lub p7zip) — obsługuje 7z, ZIP, TAR, GZ, XZ, ISO, CAB, rozpakowywanie RAR i większość pozostałych formatów, - Brotli i Zstandard — referencyjne narzędzia tych algorytmów,
- FreeArc, ZPAQ i rodzina PAQ — formaty o bardzo wysokiej kompresji,
- UPX — pakowanie plików wykonywalnych.
Czyli: gdy w PeaZipie tworzysz albo otwierasz archiwum 7z czy ZIP, pracę wykonuje dokładnie ten sam kod co w 7-Zipie. Dziedziczy on wszystkie podatności 7-Zipa — i dostaje poprawki dopiero wtedy, gdy autor PeaZipa wyda nową wersję z nowszym 7z.dll. O tym, co to oznacza w praktyce, piszemy niżej.
Czym PeaZip realnie się różni
| 7-Zip | PeaZip | |
|---|---|---|
| Autor | Igor Pawłow (Rosja) | Giorgio Tani (Włochy) |
| Język | C++, C, asembler | Free Pascal (interfejs i format PEA) |
| Silnik 7z/ZIP | własny | 7-Zip, dołączony do programu |
| Własny format | 7z | PEA |
| Szyfrowanie | AES-256-CBC bez uwierzytelnienia | w PEA: AES, Twofish lub Serpent w trybie uwierzytelnionym (EAX), opcjonalnie kaskada trzech szyfrów i plik-klucz jako drugi składnik; w 7z/ZIP — to samo co 7-Zip |
| Interfejs | prosty, klasyczny | rozbudowany, z podglądem i narzędziami |
| Systemy | Windows, Linux (7-Zip dla Linuksa) | Windows, Linux, macOS |
Format PEA jest kryptograficznie lepiej przemyślany niż 7z — szyfrowanie z uwierzytelnieniem wykrywa każdą modyfikację archiwum, a nie tylko przypadkowe uszkodzenie. Tyle że archiwum PEA otworzy praktycznie wyłącznie PeaZip, więc do wymiany plików z kimkolwiek z zewnątrz i tak wraca się do 7z albo ZIP — czyli do 7-Zipa pod spodem.
Dlaczego polskie służby odeszły od 7-Zipa
Nie ma jednego publicznego rozporządzenia, które zakazywałoby 7-Zipa. Decyzje zapadają w wewnętrznych politykach bezpieczeństwa, wymaganiach zamawiających i listach dopuszczonego oprogramowania — dokumentach, których się nie publikuje. Z rozmów z klientami z sektora publicznego wynika jednak, że argumenty powtarzają się niemal dosłownie:
- Pochodzenie dostawcy. Od 2022 roku instytucje coraz uważniej oceniają oprogramowanie tworzone w Rosji i na Białorusi, a nowelizacja ustawy o krajowym systemie cyberbezpieczeństwa przewiduje mechanizm uznawania dostawców wysokiego ryzyka. Projekt jednej osoby w Rosji, bez firmy, z którą można podpisać umowę, i bez możliwości audytu procesu wydawniczego, nie przechodzi takiej oceny — niezależnie od jakości samego kodu.
- Realne ataki przez archiwizatory. CVE-2025-0411 była wykorzystywana przeciwko instytucjom państwowym sąsiedniego kraju. Dla polskich służb to nie abstrakcja, tylko opis ataku, który może trafić do nich jutro.
- Brak kontroli nad wersjami. Program bez mechanizmu aktualizacji i bez podpisu cyfrowego trudno wdrożyć centralnie, pilnować jego wersji i blokować podróbki regułami AppLocker/WDAC.
- Kryptografia nie spełnia wymagań. AES-CBC bez uwierzytelnienia, jawne nazwy plików przy ustawieniach domyślnych i ZipCrypto w ZIP to zestaw, który nie przejdzie przeglądu. Do informacji niejawnych archiwizator i tak się nie nadaje: ich ochrona wymaga środków kryptograficznych z certyfikatem ABW albo SKW.
- Łańcuch dostaw i SBOM. Zamawiający coraz częściej żądają wykazu składników oprogramowania. 7-Zip wklejony do dziesięciu produktów w dziesięciu różnych wersjach to pozycja, której nikt nie chce tłumaczyć audytorowi.
Zamiennikiem, po który najczęściej sięgnięto, jest PeaZip. Z punktu widzenia takiej polityki to wybór logiczny: autor z Unii Europejskiej, aktywnie rozwijane repozytorium na GitHubie, przewidywalne wydania i własny format z porządnym szyfrowaniem uwierzytelnionym. Instytucja dostaje dostawcę, którego da się opisać w dokumentacji.
Warto jednak wiedzieć, co się przy tym kupuje. Przy formatach 7z i ZIP pracę nadal wykonuje dołączony do PeaZipa silnik 7-Zipa, więc podatności w parserach zostają — zmienia się to, kto i kiedy dostarcza poprawkę. Dlatego przy PeaZipie warto pilnować dwóch rzeczy: żeby program był aktualny (bo wraz z nim aktualizuje się wbudowany 7z.dll) i żeby przy inwentaryzacji oprogramowania wpisać także to, co siedzi w jego podkatalogu res\bin. Pełną niezależność od kodu 7-Zipa daje dopiero format PEA — ale otworzy go u odbiorcy wyłącznie PeaZip.
Co robić w praktyce
Jeśli 7-Zip musi jeszcze zostać w organizacji:
- pobieraj go wyłącznie z
7-zip.orgi utrzymuj co najmniej wersję 26.03 z 3 września 2026 r. — w niej naprawiono ostatnie obejście Mark-of-the-Web, a wszystkie starsze mają znane, publicznie opisane podatności, - wdrażaj go centralnie i szukaj osieroconych kopii
7z.dll,7za.exei7zr.exew katalogach innych programów, - przy szyfrowaniu zawsze używaj formatu 7z z włączonym szyfrowaniem nazw (
-mhe=on); jeśli musi być ZIP — tylko AES-256, nigdy ZipCrypto, - w ustawieniach (Narzędzia → Opcje → 7-Zip) włącz przenoszenie strefy Zone.Identifier na rozpakowane pliki,
- hasło przekazuj innym kanałem niż samo archiwum — telefonicznie albo SMS-em.
Do samego rozpakowywania typowych archiwów wystarcza dziś Windows 11: od aktualizacji z jesieni 2023 roku Eksplorator otwiera 7z, RAR i TAR przez wbudowaną bibliotekę libarchive, bez instalowania czegokolwiek.
Uczciwie o konflikcie interesów: EvidSec rozwija własny archiwizator ElZip, powstały właśnie po tym, jak nasi klienci wycofali 7-Zipa. Ma własny silnik napisany w Rust z fragmentami w asemblerze, nie zawiera kodu 7-Zipa ani LZMA SDK, a jego aktualizacje są podpisane kluczem Ed25519 i sprawdzane przed instalacją. Piszemy o tym na końcu, żeby czytelnik wiedział, skąd nasze zainteresowanie tematem — powyższa analiza nie zależy od tego, czy ktoś wybierze nasz program.
Źródła
- Oficjalna strona 7-Zip i historia zmian: 7-zip.org, 7-zip.org/history.txt, licencja: 7-zip.org/license.txt
- LZMA SDK: 7-zip.org/sdk.html
- PeaZip: peazip.github.io
- Opisy podatności w bazie NVD: CVE-2026-58052, CVE-2025-0411, CVE-2025-11001, CVE-2025-55188, CVE-2024-11477, CVE-2018-10115
- Opis podatności Mark-of-the-Web w RAR5: zgłoszenie VulnCheck