Volver al Blog
Herramientas de Desarrollo 9 de julio de 2026 4 min read

npm v12 llega este mes y bloquea los scripts de instalación que alimentaron un año de ataques a la cadena de suministro

El mayor rediseño de seguridad de npm en 16 años desactiva por defecto los scripts preinstall/install/postinstall y las dependencias remotas o de Git. Esto es lo que hay que ejecutar antes de que la actualización rompa tu build.

npm v12 llega este mes y bloquea los scripts de instalación que alimentaron un año de ataques a la cadena de suministro

npm v12 llega este mes con el rediseño de seguridad más significativo del gestor de paquetes en sus 16 años de historia — y cambia el comportamiento por defecto de formas que romperán builds que no estén preparados.

Tres valores por defecto se invierten. Primero, npm install ya no ejecutará los scripts preinstall, install o postinstall de las dependencias a menos que los permitas explícitamente. Segundo, ya no resolverá dependencias de Git sin la bandera --allow-git. Tercero, ya no descargará dependencias desde URLs remotas —tarballs HTTPS incluidos— sin --allow-remote. Las tres superficies de ataque se han explotado en campañas reales durante el último año.

El detonante es una serie de incidentes de cadena de suministro que GitHub ya no está dispuesto a tolerar. Un compromiso en septiembre de 2025 afectó a 18 paquetes importantes —incluidos debug y chalk, con 2.600 millones de descargas semanales combinadas— exactamente mediante este tipo de abuso de scripts de instalación. Un compromiso de Axios en marzo de 2026 usó hooks de postinstall para robar credenciales. Solo en 2025 se publicaron aproximadamente 455.000 paquetes maliciosos en el ecosistema. Los scripts de instalación, que ejecutan código arbitrario en cuanto termina npm install, han sido el hilo común.

npm 11.16.0 y versiones posteriores ya incluyen el nuevo comportamiento detrás de avisos, así que puedes auditar antes de que llegue el cambio disruptivo. Ejecuta npm approve-scripts --allow-scripts-pending para ver cuáles de tus dependencias incluyen actualmente scripts de instalación. Revisa cada una —no apruebes en bloque— y confirma el package.json actualizado para que la lista de permitidos viaje con tu repositorio. Si mantienes un paquete que legítimamente necesita un paso de instalación (bindings nativos, por ejemplo), documenta ese requisito en tu README ahora, y plantéate distribuir binarios precompilados con prebuild o node-pre-gyp en lugar de depender de la compilación en postinstall.

El riesgo práctico para la mayoría de equipos no es la malicia, es la rotura silenciosa: cualquier pipeline de CI o build de Docker que dependa de que un script de instalación se ejecute sin avisar fallará de golpe el día que llegue v12, no con un aviso sino con un módulo nativo ausente o un build incompleto. Audita ahora, no en julio cuando la actualización realmente se despliegue. Para monorepos con decenas de dependencias transitivas que tiran de Git o registros privados, reserva tiempo real para esto — el modelo de opt-in bandera por bandera significa que cada dependencia remota o de Git necesita una decisión explícita, no solo las que tú mismo escribiste.

Fuentes

npm Cadena de suministro JavaScript Seguridad