
CVE-2025-4138 - Python Scrittura arbitraria di file al di fuori della directory di estrazione
filter="data" di Python tarfileScrittura arbitraria di file al di fuori della directory di estrazione tramite una catena di symlink PATH_MAX.
Segnalazione: Caleb Brown (Google)
Il filtro dati tarfile di Python valida le destinazioni dei symlink usando os.path.realpath(). Quando il percorso risolto supera PATH_MAX (4096 byte su Linux), realpath() smette silenziosamente di risolvere e aggiunge i componenti rimanenti — incluso ../ — come stringhe letterali. Il filtro vede un percorso sicuro; il kernel esegue l'attraversamento reale.
L'exploit costruisce un tar in quattro fasi:
a→ddd..., b→ddd...). Porta il percorso risolto a ~3968 byte.../ × 16 alla fine della catena. realpath() va in overflow e non riesce a risolverlo. Il kernel risale fino alla radice di estrazione./, e scende fino alla directory di destinazione.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 | Descrizione |
|---|---|
Solo per test di sicurezza autorizzati e utilizzo in CTF.
-o| Percorso del tar di output |
-t | Percorso assoluto del file da scrivere sul target |
-p | File locale da usare come contenuto del payload |
-m | Permessi ottali del file (predefinito: 0644) |