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-2025-4138-4517-POC — CVE-2025-4138 / CVE-2025-4517 — Python tarfile PATH_MAX Symlink Filter Bypass | Kitploit
Tools/GitHubGitHub/desertdemons/cve-2025-4138-4517-poc
Privilege EscalationPayload-GenerierungSchwachstellenanalyseExploitationPenetrationstestsLernen & BildungBinary-Exploitation
GitHubdesertdemons/cve-2025-4138-4517-poc

Beliebteste

Alle anzeigen →

Entdecken Sie die meistgenutzten Tools unserer Community.

Alle Tools erkunden

Durchsuchen Sie unsere Tool-Sammlung

Alle Tools anzeigen →
Teilen

CVE-2025-4138-4517-POC

CVE-2025-4138 / CVE-2025-4517 — Python tarfile PATH_MAX Symlink Filter Bypass

Repository anzeigen
17216vor 3 MonatenNoch nicht geprüft

CVE-2025-4138 CVE-2025-4517 CVSS 9.4 Python Affected

CVE-2025-4138 / CVE-2025-4517
Python tarfile-Filterumgehung via PATH_MAX-Symlink-Escape

Beliebiger Dateischreibzugriff durch Extraktion mit filter="data" / filter="tar"

Typ CWE-22 Plattform Sprache Lizenz Sterne Forks Letzter Commit


Inhaltsverzeichnis

  • Übersicht
  • Schwachstellendetails
  • Funktionsweise
  • Betroffene Versionen
  • Betroffenes Codemuster
  • Installation
  • Verwendung
    • Schnellstart – SSH-Key-Injection
    • Vordefinierte Angriffe
    • Benutzerdefiniertes Ziel
  • Proof of Concept – Sichere Überprüfung
  • Technische Tiefe
    • PATH_MAX und os.path.realpath()
    • Symlink-Kettenkonstruktion
    • Filterumgehungsmechanismus
    • Ausbeutungsstufen
  • Angriffsszenarien aus der Praxis
  • Erkennung
  • Minderung
  • Verwandte CVEs
  • Zeitplan
  • Referenzen
  • Danksagungen
  • Haftungsausschluss
  • Lizenz

Übersicht

Eine kritische Schwachstelle im tarfile-Modul von Python ermöglicht es einem Angreifer, Extraktionsfilter ("data" und "tar") zu umgehen und beliebige Dateien außerhalb des vorgesehenen Extraktionsverzeichnisses zu schreiben. Wenn ein privilegierter Prozess (z. B. ein Root-Level-Backup-Skript, eine CI/CD-Pipeline oder ein Paketinstallationsprogramm) ein vom Angreifer kontrolliertes Tar-Archiv mit dem vermeintlich sicheren Parameter filter="data" extrahiert, erreicht dieser Exploit vollständigen beliebigen Dateischreibzugriff als dieser privilegierte Benutzer – typischerweise mit Eskalation zu Root.

Die Ursache ist eine Verhaltenseigentümlichkeit von os.path.realpath(): Es beendet die Auflösung von Symlinks stillschweigend, sobald der vollständig aufgelöste Pfad PATH_MAX (4096 Bytes unter Linux, 1024 unter macOS) überschreitet. Der tarfile-Filter verlässt sich für Sicherheitsprüfungen auf realpath(), aber der Kernel löst Symlinks während der Extraktion unabhängig auf – dies erzeugt eine TOCTOU-Lücke (Time-of-Check-to-Time-of-Use), die das Verlassen des Verzeichnisses ermöglicht.


Schwachstellendetails

FeldWert
CVE-IDsCVE-2025-4138, CVE-2025-4517
CVSS v3.19.4 (Kritisch) — AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:L
CWECWE-22 — Unzureichende Einschränkung eines Pfadnamens auf ein eingeschränktes Verzeichnis
SchwachstellentypPfad-Traversal via Symlink / Filterumgehung
AuswirkungBeliebiger Dateischreibzugriff → Privilegieneskalation, Sandbox-Escape, Datenmanipulation
AngriffsvektorAusliefern eines schädlichen Tar-Archivs an jede Anwendung, die tarfile.extractall() mit Filtern verwendet
BetroffenPython 3.12.0 – 3.12.10, 3.13.0 – 3.13.3
Behoben inPython 3.9.23, 3.10.18, 3.11.13, 3.12.11, 3.13.4
PatchCPython PR #135037
AdvisoryGHSA-hgqp-3mmf-7h8f
MelderCaleb Brown — Google Sicherheitsforschung

Funktionsweise```

                ┌───────────────────────────────────────────┐
                │         Malicious Tar Structure            │
                └───────────────────────────────────────────┘

Stage 1 ── Build symlink chain that inflates the resolved path past PATH_MAX

ddd...ddd/              (directory, 247 chars)
a  →  ddd...ddd         (symlink,   1 char name → 247 char dir)
ddd...ddd/ddd...ddd/    (nested directory)
b  →  ddd...ddd         (symlink)
...  ×16 levels

Short path (symlinks):   a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p       ~31 chars
Resolved path (dirs):    ddd…/ddd…/ddd…/ddd…/ddd…/ddd…/…      ~3968 chars
                                                           ↑ nearing PATH_MAX

Stage 2 ── Final symlink exceeds PATH_MAX → realpath() stops resolving

a/b/c/…/p/lll…lll  →  ../../../../../../../../../../../../../../../../..
                        (16 levels of ".." — traverses back to extraction root)

┌─────────────────────────────────────────────────────────────────┐
│  os.path.realpath()  CANNOT expand this  →  filter says "OK" ✓ │
│  Linux kernel         DOES follow chain  →  actually escapes ✗ │
└─────────────────────────────────────────────────────────────────┘

Stage 3 ── Escape symlink resolves to arbitrary filesystem path

escape  →  <overflow_link>/../../../../../../../root

Stage 4 ── Create intermediate directories through the escape

escape/.ssh/            (directory, mode 0700 — created by tar extraction)

Stage 5 ── Write payload through the escaped symlink

escape/.ssh/authorized_keys  →  writes to /root/.ssh/authorized_keys  🔓
---

## Betroffene Versionen

| Python-Zweig | Verwundbarer Bereich | Behobene Version | Status |
|:--|:--|:--|:--|
| 3.13 | 3.13.0 – 3.13.3 | **3.13.4** | ✅ Behoben |
| 3.12 | 3.12.0 – 3.12.10 | **3.12.11** | ✅ Behoben |
| 3.11 | 3.11.4 – 3.11.12 | **3.11.13** | ✅ Behoben |
| 3.10 | 3.10.12 – 3.10.17 | **3.10.18** | ✅ Behoben |
| 3.9 | 3.9.17 – 3.9.22 | **3.9.23** | ✅ Behoben |
| 3.8 | 3.8.17 – 3.8.20 | — | ❌ Ende der Lebensdauer |
| 3.14+ | Standardfilter auf `"data"` geändert | Aktuelle prüfen | ⚠️ Höheres Risiko |

> **Hinweis:** Python 3.14+ hat den Standardwert des `filter`-Parameters von keiner Filterung zu `"data"` geändert, was bedeutet, dass Anwendungen, die zuvor keinen Filter hatten (und daher bereits unsicher waren), jetzt standardmäßig den angreifbaren Filter verwenden.

---

## Betroffenes Codemuster

Jede Anwendung, die dies auf einer angreifbaren Python-Version tut, ist ausnutzbar:
Tool herunterladen