Vulnerabilidad en NPM que permite la sobrescritura de archivos en el sistema

La compañía GitHub ha revelado detalles sobre siete vulnerabilidades en los paquetes tar y @npmcli/arborist, que proporcionan funciones para trabajar con archivos tar y calcular el árbol de dependencias en Node.js. Las vulnerabilidades permiten sobrescribir archivos fuera del directorio raíz al descomprimir un archivo especialmente diseñado, según lo permitan los permisos actuales. Estos problemas permiten ejecutar código arbitrario en el sistema, por ejemplo, al añadir comandos en ~/ .bashrc o ~/ .profile cuando un usuario sin privilegios ejecuta la operación, o al reemplazar archivos del sistema al ejecutarse con derechos de root.

El peligro de las vulnerabilidades se agrava por el hecho de que el código problemático se utiliza en el gestor de paquetes npm durante operaciones con paquetes npm, lo que permite emprender un ataque contra los usuarios al alojar un paquete npm diseñado especialmente en un repositorio, cuyo procesamiento hará que se ejecute el código de un atacante en el sistema. El ataque es posible incluso al instalar paquetes en modo "--ignore-scripts", que desactiva la ejecución de scripts integrados. En total, npm se ve afectado por cuatro vulnerabilidades (CVE-2021-32804, CVE-2021-37713, CVE-2021-39134 y CVE-2021-39135) de siete. Los primeros dos problemas se refieren al paquete tar, y los otros dos al paquete @npmcli/arborist.

La vulnerabilidad más grave, CVE-2021-32804, se debe a que, al limpiar las rutas absolutas especificadas en el archivo tar, no se manejan correctamente los caracteres repetidos "/" — se elimina solo el primer carácter, mientras que los demás se conservan. Por ejemplo, la ruta "/home/user/.bashrc" se transformará en "home/user/.bashrc", mientras que la ruta "//home/user/.bashrc" se convertirá en "/home/user/.bashrc". La segunda vulnerabilidad, CVE-2021-37713, se manifiesta solo en la plataforma Windows y está relacionada con la limpieza incorrecta de rutas relativas que incluyen un carácter de disco no separado ("C:some\path") y una secuencia para regresar al directorio anterior ("C:..\foo").

Las vulnerabilidades CVE-2021-39134 y CVE-2021-39135 son específicas del módulo @npmcli/arborist. El primer problema se manifiesta solo en sistemas con un sistema de archivos que no distingue entre mayúsculas y minúsculas (macOS y Windows) y permite escribir archivos en cualquier parte del sistema de archivos, especificando en las dependencias dos módulos ‘»foo»: «file:/some/path»‘ y ‘FOO: «file:foo.tgz»‘, cuyo procesamiento resultará en la eliminación del contenido del directorio /some/path y la escritura en él del contenido de foo.tgz. El segundo problema permite sobrescribir archivos mediante la manipulación de enlaces simbólicos.

Las vulnerabilidades se han corregido en las versiones de Node.js 12.22.6 y 14.17.6, npm CLI 6.14.15 y 7.21.0, así como en versiones separadas del paquete tar 4.4.19, 5.0.11 y 6.1.10. Al recibir información sobre el problema a través de la iniciativa de «bug bounty», GitHub pagó a los investigadores $14500 y escaneó el contenido del repositorio, en el que no se encontraron intentos de explotación de las vulnerabilidades. Para protegerse contra los problemas mencionados, GitHub también estableció una prohibición sobre la publicación en el repositorio de paquetes NPM que incluyan enlaces simbólicos, enlaces duros y rutas absolutas.

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