
Proof-of-Concept, das eine Hardlink-Pfad-Traversal im npm-Paket `tar` demonstriert und das Überschreiben von Dateien außerhalb des Extraktionsverzeichnisses über manipulierte Archive ermöglicht.
Forschung: Joshua van Rijswijk
Dieses Repository enthält einen Proof of Concept (PoC) für CVE-2026-29786, eine Schwachstelle im npm-Paket tar, die es einem manipulierten Archiv ermöglicht, einen Hardlink zu erstellen, der außerhalb des vorgesehenen Extraktionsverzeichnisses zeigt.
Das Problem tritt auf, wenn ein Tar-Archiv ein laufwerksrelatives Link-Ziel wie C:../target.txt enthält. Aufgrund der Reihenfolge, in der die Bibliothek während der Extraktion Validierung und Pfadnormalisierung durchführt, kann der Traversal-Schutz umgangen werden.
Nach der Normalisierung wird der Pfad zu ../target.txt, wodurch das Link-Ziel das konfigurierte Extraktionsverzeichnis verlassen kann.
Wenn in die extrahierte Datei geschrieben wird, wird die externe Datei verändert, da beide Pfade auf denselben Hardlink verweisen.
Die Schwachstelle tritt in der Extraktionslogik auf, die für die Verarbeitung absoluter Pfade zuständig ist (Unpack[STRIPABSOLUTEPATH]).
Die Traversal-Erkennung wird vor dem Entfernen absoluter Pfade durchgeführt.
Beispiel für einen bösartigen Header-Wert
linkpath: C:../target.txt
Verarbeitungsverhalten:
Der Pfad wird für die Traversal-Erkennung in Segmente aufgeteilt.
Die Traversal-Prüfung sucht nach ".."-Segmenten.
Da das Segment als "C:.." erscheint, wird die Prüfung nicht ausgelöst.
Die Funktion stripAbsolutePath() entfernt später das Laufwerkspräfix (C:).
Der resultierende Pfad wird zu:
../target.txt
Dadurch kann der Pfad das vorgesehene Extraktionsverzeichnis verlassen.
Ein Angreifer kann Dateien außerhalb des Extraktionsverzeichnisses mit den Rechten des Prozesses überschreiben, der die Extraktion durchführt.
Mögliche reale Szenarien umfassen:
• CLI-Tools, die nicht vertrauenswürdige Tar-Archive extrahieren • Build-Pipelines, die Drittanbieter-Artefakte verarbeiten • Dienste, die benutzergelieferte Tar-Dateien importieren • Paketmanager oder Plugin-Systeme, die Archive entpacken
npm install [email protected]
node poc.cjs
Das Skript generiert ein bösartiges Tar-Archiv und demonstriert, dass das Schreiben in die extrahierte Datei dazu führt, dass eine Datei außerhalb des Extraktionsverzeichnisses überschrieben wird.