npm Scripts Inseguros
Los npm scripts que obtienen y ejecutan código remoto, o que incrustan secrets como argumentos de shell, son un riesgo de supply chain y exposición de credenciales.
Cómo Funciona
Los npm scripts corren con los mismos permisos que el usuario del desarrollador o del sistema CI. Un script que hace curl https://servidor-remoto/setup.sh | bash ejecuta código remoto arbitrario. Los scripts con secrets incrustados (--token=sk_prod_abc123) exponen esos valores en listados de procesos y logs de CI.
// MAL: scripts que obtienen código remoto o incrustan secrets
{
"scripts": {
"setup": "curl https://externo.com/setup.sh | bash",
"deploy": "deploy-tool --api-key=sk_prod_secreto123 --env=production"
}
}// BIEN: scripts usan herramientas locales y referencian variables de entorno
{
"scripts": {
"setup": "node scripts/setup.js",
"deploy": "deploy-tool --api-key=$DEPLOY_API_KEY --env=production"
// DEPLOY_API_KEY se establece en los secrets de CI, no hardcodeado
}
}Ejemplo Real
Los incidentes de exposición de logs de CI/CD frecuentemente revelan secrets incrustados en argumentos de npm scripts. Las herramientas de listado de procesos en Linux también muestran argumentos completos de línea de comandos, lo que significa que un secret pasado como --token=valor es visible para cualquier proceso en la misma máquina.
Cómo Prevenirlo
- Nunca incrustes secrets como argumentos de línea de comandos — siempre usa variables de entorno
- Evita pipear URLs remotas a bash en npm scripts — ven el script localmente en su lugar
- Audita todos los npm scripts con 'npm run-script' y revisa cualquiera que haga llamadas de red
- Usa el enmascaramiento de secrets de CI para prevenir que los secrets aparezcan en logs aunque se logueen accidentalmente
Tecnologías Afectadas
Data Hogo detecta esta vulnerabilidad automáticamente.
Escanea Tu Repo GratisVulnerabilidades Relacionadas
Sin Archivo .env.example
lowSin un archivo .env.example, los nuevos colaboradores no saben qué variables de entorno se requieren, lo que lleva a soluciones inseguras como hardcodear valores.
Sin Linting de Seguridad
lowSin reglas de ESLint orientadas a seguridad, vulnerabilidades comunes como sinks XSS, dangerouslySetInnerHTML y uso de eval() pasan desapercibidas en code review.
Sin Git Hooks de Seguridad
lowSin hooks de pre-commit que escaneen en busca de secrets y problemas de seguridad, los desarrolladores pueden accidentalmente pushear API keys y contraseñas al repositorio.
.gitignore Inadecuado
mediumUn .gitignore que no cubre archivos .env, artefactos de build y configuraciones de IDE puede llevar a que secrets o datos sensibles sean accidentalmente commiteados.