Skip to content

NPM 12 Pone Fin a la Scriptpocalypse

Durante años, un simple `npm install` podía desatar ataques a la cadena de suministro en su máquina. NPM 12 finalmente cierra esa puerta al deshabilitar la ejecución automática de scripts por defecto.

Theo Brandt
Hero image for: NPM 12 Pone Fin a la Scriptpocalypse

Resumen / Puntos clave

  • Durante años, un simple `npm install` podía desatar ataques a la cadena de suministro en su máquina.
  • NPM 12 finalmente cierra esa puerta al deshabilitar la ejecución automática de scripts por defecto.

El Fin de la Ejecución de Código sin Restricciones

`npm 12` finalmente cierra la puerta al salvaje oeste de la instalación de paquetes, poniendo fin a una era peligrosa donde `npm install` funcionaba como un libre para todos silencioso para la ejecución de código. Durante años, los scripts `pre-install` y `post-install`, junto con sus contrapartes `install`, se ejecutaban automáticamente para cada dependencia, transformando una tarea rutinaria en el vector principal para insidiosos ataques a la cadena de suministro. Este comportamiento predeterminado convirtió una simple descarga de paquete en una apuesta de alto riesgo.

Un modelo de confianza implícita sustentaba todo el ecosistema JavaScript, permitiendo que cualquier paquete ejecutara código arbitrario durante la instalación sin el consentimiento explícito del usuario. Los atacantes explotaron magistralmente este punto ciego. El gusano Shai-Hulud de auto-propagación, por ejemplo, comprometió cientos de paquetes para exfiltrar credenciales y propagarse de forma autónoma, mientras que su variante "Mini Shai-Hulud" de mayo de 2026 tuvo como objetivo proyectos prominentes como `TanStack` explotando GitHub Actions.

La comunidad debatió esta vulnerabilidad crítica durante años, atrapada entre las urgentes necesidades de seguridad y el inmenso desafío de mantener la compatibilidad con versiones anteriores en un ecosistema vasto y dependiente de scripts. Ahora, `npm 12` corta este nudo gordiano. Deshabilita la ejecución automática de scripts por defecto, forzando un flujo de aprobación explícito a través de `npm approve-scripts`. Este cambio largamente esperado de la confianza implícita a la lista blanca explícita finalmente prioriza la seguridad, marcando el comienzo de un futuro más seguro, aunque ligeramente menos conveniente.

Su Nuevo Guardián: `npm approve-scripts`

`npm install` en la versión 12 ya no ejecuta ciegamente código arbitrario de sus dependencias. Los días de los scripts `pre-install`, `install` y `post-install` ejecutándose por defecto han terminado definitivamente, poniendo fin a un vector crítico para ataques a la cadena de suministro como Shai-Hulud y los recientes compromisos de TanStack. Este bloqueo general se extiende incluso a las compilaciones nativas esenciales de `node-gyp` y a los scripts `prepare` obtenidos de dependencias de Git, archivo o enlace, neutralizando eficazmente cualquier ejecución de código inesperada antes de que comience.

Presentamos `npm approve-scripts`, su nuevo guardián. Este comando introduce un flujo de trabajo explícito y auditable, que permite a los desarrolladores revisar cada script y habilitar selectivamente solo aquellos en los que realmente confían. Una vez aprobados, `npm` almacena estos permisos directamente dentro de su archivo `package.json`, creando un registro transparente y con control de versiones del código permitido que se ejecuta durante la instalación. Esto reemplaza la peligrosa automatización anterior con un consentimiento deliberado e informado.

Esto no es simplemente un nuevo comando; es un cambio filosófico profundo para todo el ecosistema JavaScript. `npm` se mueve decisivamente de un modelo de confianza implícita – donde cualquier dependencia podía ejecutar cualquier cosa – a uno de lista blanca explícita. Los desarrolladores recuperan el control absoluto y granular sobre qué código se ejecuta precisamente en sus máquinas, transformando `npm install` de una posible responsabilidad en una operación deliberada y segura. La scriptpocalypse no termina con un gemido, sino con un "No" firme y auditable.

Asegurando Más Vectores de Ataque

Si bien los scripts `pre-install` y `post-install` fueron los vectores más llamativos para los ataques a la cadena de suministro, los adversarios astutos nunca pusieron todos sus huevos en la misma canasta. También aprovecharon vías menos obvias, como las Git dependencies directas y los tarballs de URL remotos, para introducir código malicioso en proyectos desprevenidos. Los atacantes explotaron famosamente estos métodos en incidentes como la variante Mini Shai-Hulud que atacó paquetes bajo el espacio de nombres TanStack, a menudo inyectando archivos `.npmrc` maliciosos a través de estas rutas indirectas.

npm 12 cierra estas puertas secundarias con un mandato simple y explícito. Los desarrolladores ahora deben usar `--allow-git` para resolver las dependencias basadas en Git y `--allow-remote` al instalar paquetes desde tarballs basados en URL. Esto no es solo un inconveniente; es un punto de fricción crítico diseñado para forzar decisiones conscientes, eliminando la confianza implícita en fuentes externas y reduciendo significativamente la superficie de ataque.

Nadie podrá alegar ignorancia cuando npm 12 se lance en julio; las advertencias sobre estos breaking changes han estado activas desde npm v11.16.0+. Este período de gracia ofrece una amplia oportunidad para que los equipos auditen sus pipelines de compilación y actualicen las declaraciones de dependencia, evitando interrupciones repentinas. Para obtener más detalles sobre los próximos cambios, consulte el Upcoming breaking changes for npm v12 - GitHub Changelog.

¿Un Paso Necesario, Pero Es Suficiente?

Finalmente, npm reconoce la realidad. La ejecución de scripts sin restricciones, un vector principal para los ataques a la cadena de suministro, termina con npm 12 después de años de explotación generalizada. Este cambio largamente esperado hacia la aprobación explícita de scripts, que finalmente se pone al día con alternativas más conscientes de la seguridad, transforma `npm install` de un ejercicio de confianza ingenuo en una operación vigilada. Es una evolución necesaria, aunque llega en julio de 2026, años después de que sonaran las primeras alarmas.

Incluso con estos cambios bienvenidos, la batalla por la integridad de la cadena de suministro continúa. Muchos expertos en seguridad, incluido yo mismo, simplemente abogamos por pnpm, que cuenta con valores predeterminados superiores como el bloqueo de subdependencias exóticas y el retraso en la adopción de nuevos paquetes. La postura proactiva de pnpm, que durante mucho tiempo ha defendido una postura más restrictiva y segura de forma predeterminada, ofrece una alternativa convincente para proyectos que exigen protección inmediata y robusta.

Estas actualizaciones reducen significativamente la superficie de ataque, limitando los vectores de scripts `pre-install` y `post-install` que impulsaron incidentes como Shai-Hulud y el compromiso de TanStack. El bloqueo explícito de las Git dependencies y los tarballs remotos cierra aún más las rutas de ataque conocidas. Sin embargo, los atacantes son implacablemente adaptables. Espere un giro hacia otras vulnerabilidades, quizás explotando archivos `.npmrc` maliciosos, configuraciones erróneas de CI/CD o ingeniería social sofisticada. La vigilancia del desarrollador, escudriñando cada dependencia y proceso de compilación, sigue siendo el cortafuegos definitivo e indispensable en este panorama de amenazas en evolución.

Preguntas Frecuentes

¿Cuál es el cambio más grande en NPM 12?

El cambio más significativo es que `npm install` ya no ejecutará automáticamente los scripts pre-install, install o post-install para las dependencias. Los usuarios ahora deben aprobarlos explícitamente.

¿Cómo ejecuto scripts para dependencias de confianza en NPM 12?

Debe usar el nuevo comando `npm approve-scripts`. Esto le pedirá que apruebe los scripts de sus dependencias, y sus selecciones se guardarán en su package.json.

¿Por qué NPM está haciendo estos cambios de seguridad ahora?

Estos cambios son una respuesta directa a una ola de sofisticados supply chain attacks, como el gusano Shai-Hulud, que explotaron la automatic script execution para robar credenciales y propagar malware.

¿Otros package managers como PNPM o Yarn ya son así de seguros?

Sí, otros package managers como PNPM y Yarn ya han implementado comportamientos similares de security-by-default behaviors, como el bloqueo de automatic install scripts, desde hace algún tiempo.

Found this useful? Share it.

One short daily email of tools worth shipping. No drip funnel.

one email a day · unsubscribe in two clicks · no third-party tracking

🚀Descubre más

Mantente a la vanguardia de la IA

Descubre las mejores herramientas de IA, agentes y servidores MCP seleccionados por Stork.AI.

P.S. ¿Construiste algo que vale la pena usar? Publícalo en Stork