
PoC für CVE-2025-62518, der Tar-Archiv-Schmuggel über tokio-tar PAX-Header-Parsing demonstriert, bösartige Payloads und einen verwundbaren Extractor erstellt, um Supply-Chain-Injection zu zeigen.
Video: https://youtu.be/EYBB4BHsp9E
./outputmalicious.tar-Archiv mit einem Beispiel für geschmuggelten Inhalt; Kommentare erklären Schritt für Schritt und Block für Block, was getan wird.Verwenden Sie das bereitgestellte Reproduktion-Skript oder führen Sie es manuell durch
Führen Sie malicious-payload aus, um das Payload zu generieren
malicious.tarÜbergabe dieser Datei an unsere vulnerable-extract-App ergibt:
/vulnerable-extract$ ll output/
total 12
drwxrwxr-x 2 airinei airinei 4096 Jan 19 22:40 ./
drwxrwxr-x 5 airinei airinei 4096 Jan 19 22:40 ../
-rw-rw-r-- 1 airinei airinei 0 Jan 1 1970 benign_file.txt
-rw-rw-r-- 1 airinei airinei 18 Jan 1 1970 sh_profile_hijack
Während die Ausführung des von unserem Betriebssystem bereitgestellten tar-Dienstprogramms ((GNU tar) 1.35 in diesem Fall) Folgendes ergibt:
malicious-payload$ tar -tvf malicious.tar
---------- 0/0 1024 1970-01-01 02:00 benign_file.txt
Beachten Sie, dass es die Größe der Datei als 1024 ansieht
Alternativ extrahiert die Verwendung von astral-tokio-tar 0.5.6 anstelle des veralteten tokio-tar 0.3.1 das Archiv korrekt.
CVE-2025-62518 (TARmageddon) ist eine Sicherheitslücke, die in der Rust-Bibliothek tokio-tar gefunden wurde (Rust-Verwundbarkeit 😮). Es handelt sich um einen Logikfehler in der Art und Weise, wie die Header des tar-Formats geparst werden, der es einem Angreifer ermöglicht, Dateien einzuschleusen.
Der Fehler liegt in der Logik zur Verarbeitung von PAX-Erweiterten Headern. In einem TAR-Archiv gibt es verschiedene Header-Typen:
USTAR: Der Standardheader mit Dateiname, Berechtigungen und Größe.PAX (Typ x): Ein Erweiterungsheader, der verwendet wird, um Metadaten (wie eine sehr große Dateigröße) für die nächste Datei im Archiv bereitzustellen.Wenn ein PAX-Header vorhanden ist, muss ein Parser die tatsächliche Dateigröße ermitteln, indem er die PAX-Metadaten gegenüber dem Standard-USTAR-Header priorisiert.
Aber WARUM gibt es 2 Header-Typen, die Prioritäten für das zu haben scheinen, was wie dasselbe aussieht? Weil das TAR-Format alt ist (standardisiert in 1988), und USTAR seine Grenzen hat (Größe bis zu 8GB, Dateiname bis zu 256 Zeichen). Das ist ein Problem, daher wurde der PAX-Header in 2001 hinzugefügt, um größere Dateien und längere Dateinamen zu ermöglichen.
In anfälligen Versionen von tokio-tar übernimmt der Parser korrekt die Größe aus dem PAX-Header für den Dateiinhaltsleser, verwendet aber fälschlicherweise die Größe aus dem USTAR-Header, um zu bestimmen, wo der nächste Datei-Header beginnt.
Der Kern des Problems ist eine Zeigerinkongruenz (Pointer Mismatch). Wenn die anfällige Bibliothek eine Datei verarbeitet, verwendet sie zwei verschiedene interne "Köpfe", um den Stream zu lesen:
In einem normalen Archiv stimmen diese beiden Köpfe überein. In TARmageddon zwingen wir sie zum Widerspruch. Indem wir die PAX-Größe auf 1024 und die USTAR-Größe auf 0 setzen, erzeugen wir ein Paradoxon:
benign_file.txt ab.0 im USTAR-Header und denkt: "Ich bin bereits am Ende der Datei." Er bleibt genau dort, wo er ist.Folglich behandelt der Parserkopf die Daten innerhalb des 1024-Byte-Blocks als den nächsten Befehlssatz. Wenn diese Daten wie ein gültiger TAR-Header aussehen, wird die Bibliothek eine zweite Datei "entdecken" und extrahieren, die technisch gesehen gemäß der globalen Struktur des Archivs nicht existiert.
Das Schmuggel-Payload:
Das Payload wird als eine Sequenz von 512-Byte-Blöcken erstellt. Hier ist das Layout, das im malicious-payload-Generator verwendet wird:
| Block | Rolle | Beschreibung |
|---|---|---|
| 1 & 2 | PAX-Metadaten | Behauptet, dass die nächste Datei 1024 Bytes lang ist. |
| 3 | Basis-Header | benign.txt. Setzt entscheidend die Größe auf 0. |
| 4 | Geschmuggelter Header | backdoor.sh. Versteckt im "Daten"-Bereich. |
| 5 | Geschmuggelte Daten | Der schädliche Inhalt (z.B. Shell-Aliase). |
| 6 & 7 | EOF | Standard-Nullblock-Terminierung. |
Da Standardwerkzeuge (wie GNU tar) die PAX-Größe korrekt befolgen, sehen sie Block 4 und 5 als harmlose Binärdaten, die zu benign_file.txt gehören. Sie "führen" den Header in Block 4 niemals aus.
Wie kann diese Crate mit einer Sicherheitslücke ausgenutzt werden, warum ist es von Bedeutung, dass eine Datei in ein Archiv eingeschmuggelt wird?
Ein Angreifer schmuggelt schädliche Dateien in ein Build-System. Das Extrahieren dieser Dateien, entweder für die Entwicklung oder auf einer CI-Maschine, kann legitime Build-Dateien überschreiben, diese Maschine kompromittieren und sogar das Build-System dazu verleiten, schädliche Dateien zu signieren.
Ein Scanner inspiziert ein .tar, scannt es nur im korrekten Modus, unerwünschte Dateien könnten bei der Extraktion vorhanden sein, wurden aber nicht gescannt.
Inspiriert von diesem Writeup