
CVE-2025-4138 - Python Beliebiges Dateischreiben außerhalb des Extraktionsverzeichnisses
filter="data" UmgehungBeliebiger Dateischreibvorgang außerhalb des Extraktionsverzeichnisses über eine PATH_MAX-Symlink-Kette.
Reporter: Caleb Brown (Google)
Der tarfile-Datenfilter von Python validiert Symlink-Ziele mit os.path.realpath(). Wenn der aufgelöste Pfad PATH_MAX (4096 Bytes unter Linux) überschreitet, stoppt realpath() stillschweigend die Auflösung und hängt die verbleibenden Komponenten – einschließlich ../ – als wörtliche Zeichenketten an. Der Filter sieht einen sicheren Pfad; der Kernel folgt der tatsächlichen Traversierung.
Der Exploit erstellt ein Tar mit vier Stufen:
a→ddd..., b→ddd...). Bläht den aufgelösten Pfad auf ~3968 Bytes auf.../ × 16 am Ende der Kette. realpath() läuft über und kann es nicht auflösen. Der Kernel geht zurück zum Extraktionsstamm./ und hinunter zum Zielverzeichnis.ssh-keygen -t ed25519 -f /tmp/key -N ""
python3 CVE-2025-4138_tarfile_filter_bypass.py \
-o evil.tar \
-t /root/.ssh/authorized_keys \
-p /tmp/key.pub \
-m 0600
| Flag | Beschreibung |
|---|---|
-o | Ausgabe-Tar-Pfad |
-t | Absoluter Pfad der Datei, die auf dem Ziel geschrieben werden soll |
-p | Lokale Datei, die als Payload-Inhalt verwendet werden soll |
-m | Oktale Dateiberechtigungen (Standard: 0644) |
Nur für autorisierte Sicherheitstests und CTF-Nutzung.