In der auf Rust geschriebenen Bibliothek async-tar, die Funktionen zum Lesen und Schreiben von tar-Archiven bereitstellt, wurde eine Schwachstelle (CVE-2025-62518, Codename TARmageddon) entdeckt, die es bei der Entpackung eines speziell gestalteten tar-Archivs ermöglicht, nicht nur die darin enthaltenen Dateien, sondern auch Dateien aus einem eingebetteten tar-Archiv zu extrahieren. Die Schwachstelle kann verwendet werden, um Archivüberprüfungssysteme zu umgehen und Dateien zu entpacken, bei denen keine Überprüfung durchgeführt wurde.
Die Schwachstelle tritt auch in Forks der Bibliothek async-tar auf, wie tokio-tar, krata-tokio-tar und astral-tokio-tar, sowie in darauf basierenden Tools, beispielsweise im Paketmanager uv, der als hochleistungsfähiger Ersatz für 'pip' für Projekte in Python entwickelt wird. Zu den beliebten Projekten, die verwundbare Bibliotheken verwenden, zählen auch das Testcontainers-Toolkit zum Starten von Docker-Containern und das WebAssembly-Laufzeit-Framework wasmCloud. In den letzten 90 Tagen verzeichnet die Bibliothek async-tar im Repository crates.is 1,3 Millionen Downloads, tokio-tar 2,2 Millionen, testcontainers 2,9 Millionen.
Die Schwachstelle wird durch eine falsche Positionierung bei der Analyse verschiedener Größenwerte in den ustar- und PAX-Headern verursacht. In tar-Archiven im PAX-Format werden für jede Datei innerhalb des Archivs zwei Header angegeben — der klassische ustar-Header und der erweiterte PAX-Header. Das Problem entsteht, da die betroffenen Bibliotheken beim Entpacken von Dateien anstelle der Berechnung des Offsets basierend auf der Größe im erweiterten PAX-Header die Größe aus dem veralteten ustar-Header verwendeten. Bei einem Nullwert in der Größe des ustar-Headers wurde der folgende Inhalt der Datei als gültiger Block von TAR-Headern für die nächste Datei behandelt.


Um einen Angriff durchzuführen, genügt es, ein TAR-Archiv zu erstellen, bei dem im ustar-Header eine Nullgröße angegeben ist, und im Header für das PAX-Format die aktuelle Größe, wodurch der Inhalt der Datei mit einem anderen tar-Archiv als Teil des Hauptarchivs behandelt wird. Ein Codebeispiel zur Erstellung solcher Archive ist auf GitHub veröffentlicht. Die Schwachstelle wurde in den Versionen tokio-tar 0.5.6 und uv 0.9.5 behoben. Für die übrigen Bibliotheken wurden bisher keine Patches veröffentlicht, aber für astral-tokio-tar, async-tar und krata-tokio-tar wurden separate Patches vorbereitet.
Die Schwachstellen in den Bibliotheken wurden auf eine Gefährdungsstufe von 8,1 von 10 eingestuft, da das Problem zur Überschreibung von entpackten Dateien genutzt werden kann (in verwundbaren Implementierungen werden nicht die Dateien entpackt, die im Archiv sichtbar waren). Dabei wird die Schwachstelle im Paketmanager uv als ungefährlich eingestuft, da, wenn ein Angreifer den Inhalt des ursprünglichen Archivs beeinflussen kann, es keinen Sinn macht, den Angriff zu komplizieren und die Schwachstelle über ein verschachteltes Archiv auszunutzen, wenn der Code bereits über Build-Skripte im Hauptarchiv ausgeführt werden kann.
Die Forscher, die die Schwachstelle entdeckt haben, haben mehrere hypothetische Angriffsszenarien vorgeschlagen, die es ermöglichen, Sicherheitsprüfungen zu umgehen und die Ausführung von Code durch das Ersetzen von Konfigurationsdateien oder durch Eingriffe in den Build-Prozess zu erreichen. Es wird angenommen, dass das eingereichte Archiv die automatisierte Prüfung durch einen Sicherheits-Scanner und eine manuelle Überprüfung besteht, wobei der Prüfer möglicherweise auf ein seltsames verschachteltes Archiv mit anderen Dateien nicht achtet, und beim Entpacken mit Rust-Bibliotheken wird dann ein anderes Inhalt als erwartet aus dem Archiv extrahiert.
Zum Beispiel könnte ein Angreifer ein modifiziertes Archiv in das PyPI-Repository hochladen, das die Überprüfung auf Basis der Analyse des Inhalts des Hauptarchivs besteht, das die legitime Datei pyproject.toml enthält. Bei der Verarbeitung dieses Pakets mit dem Tool uv wird die legitime pyproject.toml durch eine bösartige Version aus dem verschachtelten Archiv ersetzt, die Befehle enthält, die beim Build auf dem Rechner des Entwicklers oder im Continuous Integration-System ausgeführt werden. Ebenso kann das Überschreiben von Containern erreicht werden, wenn das Container-Image mit dem Testcontainers-Toolkit extrahiert wird.
Quelle: opennet.ru
