
GitHub ha anunciado que la versión 12 de npm tendrá «cambios importantes». Una de ellas es desactivar los scripts de instalación de forma predeterminada para combatir las amenazas a la cadena de suministro de software.
Este cambio tiene como objetivo contrarrestar las técnicas de ataque que abusan del comando «npm install» y utilizan ganchos del ciclo de vida de npm para desencadenar la ejecución de código malicioso. «Npm install» se utiliza para descargar e instalar todas las dependencias necesarias para su proyecto Node.js. Se espera que la versión 12 se lance el próximo mes.
GitHub describió 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» y dijo que el comando «npm install» ejecuta scripts desde cualquier dependencia transitiva, lo que permite que un único paquete comprometido en cualquier parte del árbol de dependencias pueda ejecutar potencialmente código arbitrario en una máquina de desarrollador o ejecutor de CI.
Al bloquear este comportamiento, la idea es requerir la aprobación explícita del usuario antes de que la ejecución del código comience automáticamente durante la «instalación de npm», en lugar de ser confiable de forma predeterminada. «Al optar por ejecutar un script se cierra su ruta, dejando la ruta al paquete confiable a un comando de distancia», dice GitHub.
Los cambios son los siguientes.
npm install ya no ejecuta scripts de preinstalación, instalación o postinstalación desde dependencias a menos que el proyecto lo permita explícitamente. npm install ya no resuelve las dependencias de Git, ya sea directa o transitivamente, a menos que se permita explícitamente con –allow-git. npm install ya no resuelve dependencias de URL remotas como archivos tar https a menos que se permita explícitamente con –allow-remote.
«Esto incluye compilaciones nativas de node-gyp (es decir, los paquetes que tienen un enlace.gyp y ningún script de instalación explícito seguirán bloqueados ya que npm realizará una reconstrucción implícita de node-gyp)», dijo la subsidiaria propiedad de Microsoft sobre el cambio en el comportamiento predeterminado de «allowScripts». «Las dependencias de preparación de scripts, archivos y enlaces de git también están bloqueadas».
Establecer de forma predeterminada ‘–allow-git’ en ‘none’ cierra la ruta de ejecución del código donde el archivo de configuración .npmrc de las dependencias de Git utilizadas podría anular el ejecutable de Git, incluso si usa –ignore-scripts (un indicador que evita que los paquetes especificados en el 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, realizando una instalación normal y revisando las advertencias que aparezcan.
«Utilice npm Approve-scripts –allow-scripts-pending para ver qué paquetes contienen sus scripts, aprobar aquellos en los que confía y confirmar el paquete.json actualizado», agregó. «Luego, cuando actualices, sólo seguirán ejecutándose los scripts que autorices. Si los dejas sin autorización, todo se detendrá».
A principios de este año, npm también introdujo la «edad mínima de liberación». Esta es una configuración que le indica a npm que rechace las versiones de paquetes publicadas con menos de la cantidad de días especificada como protección contra paquetes maliciosos recientemente publicados.
Source link
