Skip to content
KitploitKITPLOIT
ToolsExploitsBlog
Log in
Einreichen
ToolsExploitsBlog
Einreichen

Hacking-, PenTest- und Cybersicherheits-Tools für Ihr Sicherheitsarsenal!

Kitploit ist ein Verzeichnis von Hacking-, Cybersicherheits- und Pentesting-Tools. Entdecken Sie die neuesten Projekt-Updates, um Schwachstellen zu finden, Systeme zu analysieren, Tests zu automatisieren und Ihre Sicherheit zu stärken.

FeedsKontaktDatenschutz© 2026 Kitploit

Tool-Verzeichnis

Kategorien

Alle Kategorien anzeigen
Loading categories
CVE-2026-65320-fastcore — Dokumentiert CVE-2026-65320, einen Tar-Slip-Pfad-Traversal in fastcore's untar_dir(), mit einem harmlosen Proof-of-Concept, der beliebiges Schreiben von Dateien und Codeausführung demonstriert. | Kitploit
Tools/GitHubGitHub/rahulreddykarne/cve-2026-65320-fastcore
SchwachstellenanalyseCode-AnalyseExploitationWebanwendungs-ExploitationPapers & ForschungLernen & Bildung
GitHubrahulreddykarne/cve-2026-65320-fastcore

CVE-2026-65320-fastcore

Dokumentiert CVE-2026-65320, einen Tar-Slip-Pfad-Traversal in fastcore's untar_dir(), mit einem harmlosen Proof-of-Concept, der beliebiges Schreiben von Dateien und Codeausführung demonstriert.

Repository anzeigen
13vor 24 TagenNoch nicht geprüft

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

CVE-2026-65320: Path Traversal (Tar Slip) in fastcore über untar_dir()

Schweregrad: Kritisch, CVSS 3.1 9.8

Vektor (v3.1): CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

Betroffen: fastcore <= 2.2.30

Behoben in: Zum Zeitpunkt der Erstellung nicht behoben

CWE: CWE-22 (Improper Limitation of a Pathname to a Restricted Directory, 'Path Traversal')

Komponente: fastcore.xtras.untar_dir() → fastcore.xtras._unpack() → shutil.unpack_archive()

Hochrisiko-Laufzeitumgebung: Python < 3.14 (Python 3.14 macht den sicheren data-Tar-Filter zum Standard)

Gemeldet von: Rahul Karne

CNA: VulnCheck


Zusammenfassung

fastcore.xtras.untar_dir(fname, dest) ist ein dokumentierter Helfer, der ein Archiv „nach dest" entpackt.

Intern übergibt er das Archiv an shutil.unpack_archive() der Standardbibliothek ohne Extraktionsfilter, ohne Validierung der Pfade der Archivelemente und ohne jegliche Containment-Prüfung nach der Extraktion.

Infolgedessen kann ein TAR-Archiv, dessen Elemente ../-Traversierungssequenzen oder absolute Pfade enthalten, Dateien außerhalb des Verzeichnisses schreiben, in das der Aufrufer fastcore angewiesen hat zu extrahieren.

Ein Aufrufer, der vernünftigerweise erwartet, dass untar_dir(fname, dest) alles auf dest beschränkt, erhält stattdessen beliebiges Dateischreiben überall dort, wo der Prozess schreiben kann.


Auswirkung

Beliebiges Dateischreiben unter der Berechtigung des Prozesses, der untar_dir() aufruft.

Je nachdem, was überschrieben wird, kann dies zu Folgendem führen:

  • Codeausführung — Überschreiben einer Python-Datei, die die Anwendung später importiert, wie etwa ein Plugin, ein Startup-Hook oder ein importierbares Modul, oder Ablegen einer Datei an einem automatisch geladenen Ort.
  • Daten-/Konfigurationsmanipulation — Überschreiben von Konfigurationsdateien, Anmeldeinformationen oder Anwendungsdaten.
  • Denial of Service — Beschädigen von Dateien, von denen der Dienst abhängt.

Der Proof of Concept demonstriert die vollständige Kette Schreiben → Import → Codeausführung von Anfang bis Ende, vollständig innerhalb eines harmlosen Demo-Verzeichnisses.


Reichweite

fastcore ist eine grundlegende Abhängigkeit im gesamten fast.ai-Ökosystem, einschließlich:

  • fastai
  • nbdev
  • ghapi
  • Andere verwandte Pakete

Es wird zig Millionen Mal pro Monat heruntergeladen.

untar_dir() ist das Extraktionsprimitiv hinter dem üblichen Workflow „ein Archiv herunterladen, dann entpacken", der demselben allgemeinen Muster wie fastais untar_data folgt.

Jeder Codepfad, der untar_dir() ein Archiv zuführt, dessen Inhalt nicht vollständig vertrauenswürdig ist, ist exponiert.


Technisches Detail

Der verwundbare Code befindet sich in fastcore/xtras.py:

def _unpack(fname, out):
    import shutil
    shutil.unpack_archive(str(fname), str(out))   # <-- no filter, no validation
    ls = out.ls()
    return ls[0] if len(ls) == 1 else out


def untar_dir(fname, dest, rename=False, overwrite=False, uid=-1, gid=-1):
    "untar `file` into `dest` ..."
    import tempfile, shutil
    dest = Path(dest)

    with tempfile.TemporaryDirectory() as d:
        out = Path(d) / remove_suffix(Path(fname).stem, '.tar')
        out.mkdir()

        ...

        src = _unpack(fname, out)      # extraction escapes `out` here

        ...

        shutil.move(str(src), dest)

        ...

        return dest

untar_dir() erstellt ein internes temporäres Extraktionsverzeichnis:

<tempdir>/<random>/<archive-stem>/

Anschließend ruft es _unpack() auf, das das Archiv direkt weiterleitet an:

shutil.unpack_archive()

Bei TAR-Archiven ruft dies letztlich tarfile.extractall() auf.

Unter Python < 3.14 ist das Standard-Extraktionsverhalten fully_trusted, was bedeutet, dass Traversierungselemente berücksichtigt werden können.

Beispielsweise wird ein Archivelement wie:

../../../some/other/dir/file

relativ zum Extraktionsverzeichnis geschrieben und kann dieses daher verlassen.

Nichts in fastcore:

  • Übergibt filter="data", wo unterstützt.
  • Lehnt absolute Pfade ab.
  • Lehnt Laufwerksbuchstaben-Pfade ab.
  • Lehnt UNC-Pfade ab.
  • Lehnt ..-Pfadkomponenten ab.
  • Lehnt Symlink- oder Hardlink-Elemente ab.
  • Überprüft, dass jeder extrahierte Pfad unterhalb des beabsichtigten Extraktionsstamms geblieben ist, bevor Erfolg zurückgegeben wird.

Grundursache

untar_dir() behandelt shutil.unpack_archive() so, als wäre es ein sicherer, sandboxed Archiv-Extraktor.

Das ist es nicht.

Die Dokumentation der Python-Standardbibliothek warnt davor, dass das Extrahieren nicht vertrauenswürdiger Archive Dateien außerhalb des angeforderten Ziels erstellen kann, und empfiehlt eine sichere Extraktionsfilterung für TAR-Archive.

fastcore übergibt weder einen geeigneten Extraktionsfilter noch implementiert es eine äquivalente Containment-Absicherung für die unterstützten Python-Versionen.

Es warnt Aufrufer von untar_dir() auch nicht vor diesem sicherheitsrelevanten Verhalten.


Warum speziell der TAR-Pfad

TAR-Elemente können beliebige Pfadzeichenketten enthalten.

Unter betroffenen Python-Versionen neutralisiert tarfile.extractall() standardmäßig nicht automatisch ..-Traversierungssequenzen.

Das Schreiben eines Traversierungselements relativ zum temporären Extraktionsverzeichnis von fastcore reicht daher aus, um dieses Verzeichnis zu verlassen und überall dorthin zu schreiben, wo der Prozess Schreibberechtigung hat.

Ein zuverlässiges Primitiv ist die relative Traversierung wie:

../../../target/file

Dies ist die Technik, die im Proof of Concept verwendet wird.


Bereitstellung über das Netzwerk

Die gefährliche Eingabe sind die Archivinhalte, nicht der vom Entwickler gewählte Zielpfad.

Archive werden häufig von externen oder halbvertrauenswürdigen Orten bezogen, einschließlich:

  • Modell-Bundles
  • Datensatz-Archive
  • Plugin-Bundles
  • CI/CD-Artefakte
  • Benutzer-Uploads
  • Partner-Uploads
  • Remote-HTTP-Downloads

Jeder Dienst oder jedes Tool, das ein Archiv aus einer nicht vertrauenswürdigen oder halbvertrauenswürdigen Quelle herunterlädt und anschließend mit untar_dir() verarbeitet, kann daher erreichbar sein.

Der PoC enthält außerdem eine Variante, die das präparierte Archiv von einem angreiferkontrollierten HTTP-Endpunkt bereitstellt, um diesen Bereitstellungspfad zu demonstrieren.


Ausbeutungsvoraussetzungen

Eine erfolgreiche Ausbeutung erfordert:

  1. Die Anwendung ruft fastcore.xtras.untar_dir() mit einem Archiv auf, dessen Inhalt vom Angreifer beeinflusst wird, wie etwa ein hochgeladenes, heruntergeladenes oder anderweitig nicht vertrauenswürdiges Archiv.

  2. Die Laufzeitumgebung verwendet Python < 3.14 oder eine andere Konfiguration, in der ein sicherer TAR-Extraktionsfilter nicht erzwungen wird.

  3. Für die Eskalation vom beliebigen Dateischreiben zur Codeausführung importiert oder lädt der Prozess später eine Datei von einem durch die Traversierung erreichbaren Ort, wie etwa:

    • Ein Plugin-Verzeichnis
    • Ein importierbares Python-Modul
    • Ein Startup-Hook
    • Ein anderer automatisch geladener Dateispeicherort

Beliebiges Dateischreiben und Konfigurations-/Datenänderung erfordern nur die Bedingungen 1 und 2.


Proof of Concept

poc_fastcore_cna_demo.py ruft die echte fastcore.xtras.untar_dir()-API auf.

Die Demonstration ist absichtlich harmlos.

Jede vom PoC erstellte Datei bleibt innerhalb eines einzigen Demo-Verzeichnisses, das über Folgendes angegeben wird:

--demo-root

Der PoC ändert keine echten Systemdateien und greift nicht auf Cloud-Dienste oder Anmeldeinformationen zu.

Was der PoC tut

  1. Gibt die Umgebungsdetails und den verwundbaren Quellcode für _unpack() und untar_dir() aus.
Tool herunterladen