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.

··Feeds·Kontakt·Datenschutz·© 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
vor 1 TagNoch 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:

root@kitploit:~
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:

root@kitploit:~
<tempdir>/<random>/<archive-stem>/

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

root@kitploit:~
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:

root@kitploit:~
../../../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:

root@kitploit:~
../../../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:

root@kitploit:~
--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.

  2. Erstellt ein Demonstrationslayout mit:

    • Einem beabsichtigten Extraktionsstamm
    • Einem separaten Anwendungsverzeichnis:
      root@kitploit:~
      service_app/plugins/
      
  3. Erstellt:

root@kitploit:~
attacker_supplied_upload.tar

mit Archivelementen, die darauf ausgelegt sind, außerhalb des beabsichtigten Extraktionsstamms zu zeigen, einschließlich Traversierungselementen und:

root@kitploit:~
service_app/plugins/startup_hook.py
  1. Ruft einen simulierten Upload-Handler auf:
root@kitploit:~
def auto_extract_uploaded_archive(received_archive):
    return untar_dir(
        received_archive,
        intended_root,
        overwrite=True
    )
  1. Überprüft, dass Dateien außerhalb des beabsichtigten Extraktionsverzeichnisses geschrieben wurden.

  2. Simuliert einen Dienst-Neustart durch Importieren der vom Archiv geschriebenen:

root@kitploit:~
startup_hook.py

Der harmlose Startup-Hook erstellt:

root@kitploit:~
SERVICE_RELOAD_MARKER

Dies demonstriert die vollständige Kette:

root@kitploit:~
Attacker-controlled archive
        ↓
Path traversal during extraction
        ↓
Arbitrary file write
        ↓
Write into importable / auto-loaded location
        ↓
Application loads attacker-controlled file
        ↓
Code execution

Einrichtung

Installieren Sie das betroffene Paket:

root@kitploit:~
pip install fastcore

Das Problem wurde bestätigt mit:

root@kitploit:~
fastcore 2.2.30

Die Demonstration kann entweder gegen Folgendes ausgeführt werden:

  • Eine per pip installierte Kopie von fastcore
  • Einen lokal extrahierten Quellbaum, der über --source ausgewählt wird

Alle PoC-Schreibvorgänge bleiben innerhalb des über --demo-root angegebenen Verzeichnisses.


Ausführen

Bereinigen Sie vorherige PoC-Ausgaben:

root@kitploit:~
python poc_fastcore_cna_demo.py --demo-root ./poc_fastcore --clean

Führen Sie die Demonstration aus:

root@kitploit:~
python poc_fastcore_cna_demo.py \
  --demo-root ./poc_fastcore \
  --source latest \
  --no-pause

Erwartete Ausgabe

Beispiel einer gekürzten Ausgabe:

root@kitploit:~
fastcore version:  2.2.30

Outside marker exists after extraction? True
Is outside marker inside intended extraction root? False

Relative traversal marker exists after extraction? True
Is relative traversal marker inside intended extraction root? False

Service plugin file exists after extraction? True
Service reload marker exists? True

POC WORKED: fastcore extracted attacker-controlled tar members outside the intended root.

Behebung

Für fastcore-Maintainer

1. Sichere TAR-Extraktionsfilterung verwenden

Verwenden Sie unter unterstützten Python-Versionen einen sicheren Extraktionsfilter wie:

root@kitploit:~
filter="data"

mit shutil.unpack_archive() oder der entsprechenden tarfile-Extraktionsoperation.


2. Archivelemente vor der Extraktion validieren

Jedes Archivelement sollte vor der Extraktion geprüft werden.

Lehnen Sie ab:

  • Absolute Pfade
  • Windows-Laufwerksbuchstaben-Pfade
  • UNC-Pfade
  • Pfade, die .. enthalten
  • Unsichere symbolische Links
  • Unsichere Hardlinks

Linkziele sollten ebenfalls aufgelöst und vor der Extraktion validiert werden.


3. Extraktions-Containment erzwingen

Lösen Sie jeden Zielpfad vor dem Schreiben auf und überprüfen Sie, dass er unterhalb des beabsichtigten Extraktionsstamms bleibt.

Konzeptionell:

root@kitploit:~
resolved_member_path
        ↓
must remain inside
        ↓
resolved_extraction_root

Die Extraktion sollte fehlschlagen, wenn das aufgelöste Ziel den Extraktionsstamm verlässt.


4. Regressionstests hinzufügen

Regressionstests sollten mindestens abdecken:

root@kitploit:~
../ traversal
absolute paths
Windows drive-letter paths
UNC paths
symbolic links
hard links

5. Sicherheitserwartungen dokumentieren

Dokumentieren Sie klar, ob untar_dir() dafür gedacht ist, nicht vertrauenswürdige Archive sicher zu verarbeiten.

Wenn unsichere Extraktion absichtlich unterstützt wird, sollte das sichere Verhalten dennoch der Standard sein.

Unsicheres Verhalten sollte ein explizites Opt-in erfordern, anstatt Archivinhalten stillschweigend zu vertrauen.


Vorübergehende Anleitung für Benutzer

Bis ein paketweiter Fix veröffentlicht wird:

  • Bevorzugen Sie Python 3.14+, wo anwendbar.
  • Übergeben Sie nicht vertrauenswürdige Archive nicht direkt an untar_dir().
  • Validieren Sie alle Archivelemente vor der Extraktion.
  • Stellen Sie sicher, dass extrahierte Pfade das beabsichtigte Zielverzeichnis nicht verlassen können.
  • Behandeln Sie remote heruntergeladene oder vom Benutzer bereitgestellte Archive als angreiferkontrollierte Eingabe.

CVSS-Überlegungen

Der zugrunde liegende technische Defekt ist eine Schwachstelle für beliebiges Dateischreiben, die durch Archiv-Pfad-Traversierung verursacht wird.

Die endgültige Schwere hängt jedoch von der Bereitstellungsumgebung und davon ab, wie untar_dir() exponiert ist.

Netzwerkexponiertes Dienstszenario

Ein repräsentativer Vektor kann sich annähern an:

root@kitploit:~
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

Ergebnis:

root@kitploit:~
9.8 — Critical

Entwickler-/CLI-Szenario

Wenn die Ausbeutung stattdessen erfordert, dass ein Entwickler ein Archiv manuell herunterlädt und extrahiert, können Benutzerinteraktion und Angriffskomplexität höher sein.

Der resultierende CVSS-Score wäre daher wesentlich niedriger.


Einschränkungen

Bei der Bewertung des Problems sollten zwei wichtige Faktoren berücksichtigt werden.

Bestehende Schwachstellenklasse

Dies ist ein Fall der seit Langem bekannten Klasse unsicherer TAR-Extraktion, die mit Folgendem verbunden ist:

root@kitploit:~
CVE-2007-4559

Moderne Python-Versionen haben ein sichereres Archiv-Extraktionsverhalten eingeführt.

Python 3.14 macht den sicheren data-Extraktionsfilter zum Standard.

Daher ist die primär betroffene Umgebung Python < 3.14.

Diese Laufzeitumgebungen sind jedoch weiterhin weit verbreitet.

Anforderung nicht vertrauenswürdiger Archive

Die Schwachstelle wird ausbeutbar, wenn ein Aufrufer untar_dir() ein Archiv übergibt, dessen Inhalt angreiferkontrolliert oder anderweitig nicht vertrauenswürdig ist.

Dieser Bericht behandelt daher den Inhalt des Archivs als die nicht vertrauenswürdige Sicherheitsgrenze.

Ein robuster Archiv-Extraktionshelfer sollte sicher fehlschlagen, unabhängig davon, wie das Archiv beschafft wurde.


Offenlegungszeitplan

Ersetzen Sie die Platzhalterdaten unten durch die tatsächlichen Offenlegungsdaten.

  • YYYY-MM-DD — Schwachstelle an die Maintainer gemeldet.
  • YYYY-MM-DD — Herstellerantwort / Bestätigung / keine Antwort.
  • 2026-09-26 — Bestätigt, dass in der neuesten Version (2.2.30) weiterhin nicht behoben; Extraktionscode blieb unverändert.

Danksagung

Entdeckt und gemeldet von Rahul Karne.


Referenzen

  • fastcore untar_dir()-Dokumentation
    https://fastcore.fast.ai/xtras.html

  • fastcore xtras.py-Quellcode
    https://github.com/AnswerDotAI/fastcore/blob/main/fastcore/xtras.py

  • fastcore auf PyPI
    https://pypi.org/project/fastcore/

  • Python shutil.unpack_archive()-Dokumentation
    https://docs.python.org/3/library/shutil.html#shutil.unpack_archive

  • Python tarfile-Extraktionsfilter
    https://docs.python.org/3/library/tarfile.html#extraction-filters

  • PEP 706 — Filter für tarfile.extractall
    https://peps.python.org/pep-0706/

  • CWE-22 — Improper Limitation of a Pathname to a Restricted Directory
    https://cwe.mitre.org/data/definitions/22.html

  • CVE-2007-4559 — Klasse unsicherer TAR-Extraktion
    https://nvd.nist.gov/vuln/detail/CVE-2007-4559


Über

Dieses Repository dokumentiert einen Sicherheitsbefund aus einer koordinierten Offenlegung und stellt einen harmlosen, in sich geschlossenen Proof of Concept bereit.

Der PoC schreibt nur innerhalb des vom Benutzer angegebenen --demo-root-Verzeichnisses und führt keine destruktiven Aktionen aus.

Jede im Rahmen der Demonstration enthaltene Netzwerkfunktionalität ist auf eine optionale lokale Demonstration beschränkt.

Dieses Material wird für defensive Sicherheitsforschung und Bildungszwecke bereitgestellt.


Presse

Medienanfragen: [email protected]. Vollständiger PoC (Angreifer-Server, Traversierungsarchiv, Opferanwendung) und zusätzliche technische Details auf Anfrage erhältlich.

Tool herunterladen