
Prueba de concepto que demuestra un path traversal mediante hardlinks en el paquete npm tar, permitiendo sobrescribir archivos fuera del directorio de extracción mediante archivos manipulados.
Investigación: Joshua van Rijswijk
Este repositorio contiene una Prueba de Concepto (PoC) para CVE-2026-29786, una vulnerabilidad en el paquete npm tar que permite que un archivo manipulado cree un enlace duro (hardlink) que apunta fuera del directorio de extracción previsto.
El problema ocurre cuando un archivo tar contiene un destino de enlace relativo a la unidad como C:../target.txt. Debido al orden en que la librería realiza la validación y la normalización de rutas durante la extracción, la protección contra recorridos de directorio puede ser omitida.
Después de la normalización, la ruta se convierte en ../target.txt, lo que permite que el destino del enlace escape del directorio de extracción configurado.
Cuando se escribe en el archivo extraído, el archivo externo se modifica porque ambas rutas hacen referencia al mismo enlace duro.
La vulnerabilidad ocurre en la lógica de extracción responsable de manejar rutas absolutas (Unpack[STRIPABSOLUTEPATH]).
La detección de recorridos de directorio se realiza antes de eliminar las rutas absolutas.
Ejemplo de valor de cabecera malicioso
linkpath: C:../target.txt
Comportamiento del procesamiento:
La ruta se divide en segmentos para la detección de recorridos.
La comprobación de recorridos busca segmentos "..".
Debido a que el segmento aparece como "C:..", la comprobación no se activa.
La función stripAbsolutePath() elimina posteriormente el prefijo de la unidad (C:).
La ruta resultante se convierte en:
../target.txt
Esto permite que la ruta escape de la raíz de extracción prevista.
Un atacante puede sobrescribir archivos fuera del directorio de extracción con los privilegios del proceso que realiza la extracción.
Los escenarios potenciales del mundo real incluyen:
• Herramientas CLI que extraen archivos tar no confiables • Canalizaciones de compilación que procesan artefactos de terceros • Servicios que importan archivos tar proporcionados por el usuario • Gestores de paquetes o sistemas de plugins que descomprimen archivos
npm install [email protected]
node poc.cjs
El script genera un archivo tar malicioso y demuestra que escribir en el archivo extraído resulta en la sobrescritura de un archivo fuera del directorio de extracción.