GitHub deshabilitará los scripts de instalación de npm de forma predeterminada para detener los ataques a la cadena de suministro
GitHub tiene anunciado lo que dijo son «cambios importantes» que llegarán a la versión 12 de npm, uno de los cuales desactiva los scripts de instalación de forma predeterminada para combatir las amenazas a la cadena de suministro de software.
Los cambios tienen como objetivo combatir las técnicas de ataque que abusan del comando «npm install» para desencadenar la ejecución de código malicioso utilizando ganchos del ciclo de vida de npm. «Npm install» se utiliza para descargar e instalar todas las dependencias necesarias para un proyecto Node.js. La versión 12 está prevista para su lanzamiento el próximo mes.
Al describir los scripts del ciclo de vida en el momento de la instalación como la «superficie de ejecución de código más grande en el ecosistema npm», GitHub dicho el comando «npm install» ejecuta scripts de cada dependencia transitiva, como resultado de lo cual un único paquete comprometido en cualquier parte del árbol de dependencias puede ejecutar código arbitrario en una máquina de desarrollo o en un ejecutor de CI.
Al bloquear tales comportamientos, la idea es requerir la aprobación explícita del usuario antes de que la ejecución del código se inicie automáticamente durante la «instalación npm», en lugar de ser confiable de forma predeterminada. «Hacer la opción de ejecución de script cierra ese camino y lo mantiene a un comando de distancia para los paquetes en los que confía», dijo GitHub.
Los cambios se enumeran a continuación:
- npm install ya no ejecutará scripts de preinstalación, instalación o postinstalación desde dependencias a menos que estén permitidos explícitamente en el proyecto.
- npm install ya no resolverá las dependencias de Git, ya sean directas o transitivas, a menos que se permita explícitamente a través de –allow-git.
- npm install ya no resolverá dependencias de URL remotas, como archivos tar https, a menos que se permita explícitamente a través de –allow-remote.
«Esto incluye compilaciones nativas de node-gyp (es decir, un paquete con un enlace.gyp y sin un script de instalación explícito aún se bloquea, porque npm ejecuta una reconstrucción implícita de node-gyp)», dijo la subsidiaria propiedad de Microsoft sobre los cambios en el comportamiento predeterminado de «allowScripts». «Preparar scripts desde git, las dependencias de archivos y enlaces se bloquean de la misma manera».
Al establecer «–allow-git» en «none» de forma predeterminada, la configuración cierra una ruta de ejecución de código donde el archivo de configuración .npmrc de una dependencia de Git utilizado podría anular el ejecutable de Git, incluso con –ignorar-scriptsuna marca que evita que los paquetes especificados en un archivo package.json ejecuten automáticamente scripts de ciclo de vida integrados durante el proceso de instalación.
GitHub recomienda que los desarrolladores se preparen para estos cambios actualizando a npm 11.16.0 o posterior, ejecutando la instalación normal y revisando las advertencias mostradas.
«Utilice npm aprobar-scripts –allow-scripts-pending para ver qué paquetes tienen scripts, aprobar aquellos en los que confía y confirmar el paquete.json actualizado», agregó. «Después de eso, sólo los scripts que usted aprobó seguirán ejecutándose una vez que actualice. Todo lo que deje sin aprobar se detendrá».
A principios de este año, npm también introdujo «min-release-age», una configuración que le dice a npm que rechace cualquier versión de paquete publicada menos de un número específico de días como protección contra paquetes maliciosos recientemente publicados.



