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ć:

PlikRola
7zFM.exemenedżer plików — to okno, które widzi użytkownik
7zG.exeokienka postępu i dialogi wywoływane z menu kontekstowego
7z.exewiersz poleceń; całą pracę zleca bibliotece 7z.dll
7z.dllwłaściwy silnik: obsługa formatów, kompresja, szyfrowanie
7-zip.dllrozszerzenie powłoki Eksploratora (menu „7-Zip” pod prawym przyciskiem)
7za.exe, 7zr.exesamodzielne 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 bkcrack robią 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:

  1. 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). Plik Wyniki_kontroli_Kowalski_PESEL.xlsx mówi sam za siebie, nawet jeśli jego treść jest bezpieczna. W ZIP nazw plików nie da się zaszyfrować w ogóle.
  2. ZIP z ZipCrypto. Użytkownik widzi pole „Hasło” i zakłada, że dane są chronione. Przy ZipCrypto ta ochrona jest iluzoryczna.
  3. 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.
  4. 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.

IdentyfikatorCzego dotyczyNaprawione w
CVE-2016-2334przepełnienie sterty przy obrazach HFS+ (Cisco Talos)16.00
CVE-2016-2335odczyt poza buforem przy obrazach UDF16.00
CVE-2018-5996uszkodzenie pamięci w dekompresji RAR/PPMd18.00
CVE-2018-10115błąd przy archiwach RAR typu solid, możliwe wykonanie kodu18.05
CVE-2022-29072zgłoszone podniesienie uprawnień przez plik pomocy; autor kwestionuje, że to podatność 7-Zipasporne
CVE-2023-31102niedopełnienie liczby całkowitej w Ppmd7 (Zero Day Initiative)23.00
CVE-2023-40481zapis poza buforem przy obrazach SquashFS23.00
CVE-2024-11477niedopełnienie liczby całkowitej w dekompresji Zstandard, możliwe wykonanie kodu24.07
CVE-2025-0411obejście Mark-of-the-Web, wykorzystywane w atakach24.09
CVE-2025-11001, CVE-2025-11002dowiązania symboliczne w ZIP pozwalające zapisać plik poza katalogiem docelowym25.00
CVE-2025-55188zapis dowolnego pliku przez dowiązania symboliczne25.01
CVE-2026-48092 … 48112osiem błędów pamięci w obsłudze obrazów SquashFS, NTFS, UEFI, UDF, WIM i archiwów Ar26.01
CVE-2026-14266przepełnienie sterty przy dekompresji XZ, możliwe zdalne wykonanie kodu26.02
CVE-2026-58052drugie obejście Mark-of-the-Web, tym razem przez archiwum RAR5; publiczny kod dowodowy26.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.dll i 7za.exe leżą 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.org nie 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.exe i 7z.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-ZipPeaZip
AutorIgor Pawłow (Rosja)Giorgio Tani (Włochy)
JęzykC++, C, asemblerFree Pascal (interfejs i format PEA)
Silnik 7z/ZIPwłasny7-Zip, dołączony do programu
Własny format7zPEA
SzyfrowanieAES-256-CBC bez uwierzytelnieniaw 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
Interfejsprosty, klasycznyrozbudowany, z podglądem i narzędziami
SystemyWindows, 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:

  1. 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.
  2. 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.
  3. 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.
  4. 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.
  5. Ł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.org i 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.exe i 7zr.exe w 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

← Wszystkie artykuły SecTech