GitHub desactiva scripts de instalación npm por defecto en v12 para frenar ataques a la cadena de suministro
npm v12, previsto para julio 2026, bloqueará por defecto los scripts preinstall, install y postinstall — el vector de ataque más explotado en el ecosistema JavaScript — junto con dependencias de Git y URLs remotas no autorizadas.
GitHub anunció que npm versión 12, prevista para lanzamiento en julio de 2026, introducirá cambios estructurales de seguridad que afectarán a prácticamente todos los proyectos del ecosistema JavaScript. El cambio más significativo: los scripts de instalación quedarán desactivados por defecto, eliminando el principal vector de ataque usado en campañas de compromiso de cadena de suministro de software.
El problema que resuelve
En el ecosistema npm, los scripts de ciclo de vida (preinstall, install, postinstall) se ejecutan automáticamente durante la instalación de cualquier paquete. GitHub describe estos scripts como "la superficie de ejecución de código más grande en el ecosistema npm": un solo paquete comprometido en cualquier punto del árbol de dependencias transitivas puede ejecutar código arbitrario en la máquina del desarrollador o en el runner de CI/CD, sin ningún aviso.
Esta capacidad ha sido explotada repetidamente en ataques de alto perfil contra la cadena de suministro de software, donde atacantes inyectan código malicioso en paquetes populares (o crean paquetes imitadores) que al instalarse ejecutan payloads que roban credenciales, establecen accesos persistentes o exfiltran datos de entornos de desarrollo.
Cambios específicos en npm v12
Los tres cambios principales son:
1. Scripts de instalación desactivados por defecto
Los scripts preinstall, install, postinstall y las compilaciones implícitas de node-gyp (para paquetes con binding.gyp) quedarán bloqueados a menos que el proyecto los autorice explícitamente. Los desarrolladores que necesiten estos scripts deberán habilitarlos con un mecanismo de allowlist.
2. Dependencias de Git bloqueadas por defecto
npm no resolverá dependencias especificadas como repositorios Git (directas o transitivas) a menos que se use el flag --allow-git. Esta restricción cierra un vector secundario usado para distribuir código malicioso que evita los controles del registro público de npm.
3. URLs remotas bloqueadas por defecto
Las dependencias especificadas como URLs remotas (tarballs HTTPS, por ejemplo) tampoco se resolverán sin autorización explícita mediante --allow-remote.
Impacto en proyectos existentes
El impacto práctico depende de si el proyecto usa paquetes que requieren compilación nativa o scripts de configuración post-instalación. Proyectos que dependen de módulos con extensiones C/C++ (como bcrypt, canvas, sharp, módulos de base de datos nativos, etc.) verán interrupciones en sus flujos de instalación si no se adaptan antes del lanzamiento de v12.
GitHub hizo disponibles las nuevas restricciones en modo advertencia desde npm 11.16.0, lo que significa que los equipos pueden empezar a preparar sus proyectos ahora, antes del cambio que quiebre la compatibilidad en v12.
Qué deben hacer los equipos de desarrollo
- Actualizar a npm 11.16.0 o superior para ver las advertencias sobre scripts y dependencias que serán bloqueados en v12.
- Auditar el árbol de dependencias en busca de paquetes que usen scripts de instalación o dependencias de Git/URL.
- Definir una allowlist explícita de los scripts legítimos que el proyecto realmente necesita ejecutar durante la instalación.
- Revisar pipelines de CI/CD para asegurar compatibilidad con las nuevas restricciones antes de que v12 sea la versión por defecto en entornos de build.
El cambio es disruptivo a corto plazo, pero representa un avance significativo en la postura de seguridad por defecto de uno de los ecosistemas de paquetes más grandes del mundo, con más de 2 millones de paquetes y miles de millones de descargas mensuales.
Fuente: GitHub Changelog · The Hacker News · BleepingComputer