Instalar paquetes sin riesgo

Cada vez que instalas un paquete de npm, descargas código de alguien más. Varios ataques recientes, como el gusano Shai-Hulud, se aprovecharon de eso: una versión nueva y maliciosa de un paquete corría su propio código en cuanto alguien la instalaba, y desde ahí se propagaba a más paquetes.

Este repo trae dos defensas: un .npmrc con configuración de npm y reglas para que Kiro las respete. Opcionalmente puedes sumar una tercera, el MCP de Socket.

Qué hace el .npmrc del repo

npm lee .npmrc cuando corres cualquier comando dentro de la carpeta del repo. Estas son sus líneas, con su número de línea:

Línea Qué hace
línea 7 Ningún paquete corre código (preinstall, install, postinstall) al instalarse
línea 11 No instala versiones publicadas hace menos de 7 días
línea 14 package.json guarda la versión exacta, sin ^ ni ~
línea 18 No acepta dependencias que vengan de un repo de git
línea 19 No acepta dependencias que vengan de una URL suelta
línea 22 Falla si tu Node o tu npm no cumplen lo que pide el repo

La más importante es min-release-age. Casi todos los paquetes maliciosos se detectan y se retiran en horas, así que esperar 7 días te deja fuera de la ventana en la que son peligrosos. Existe desde npm 11.10, por eso el prework te pide actualizar npm: en una versión más vieja, npm ignora la línea y sigues sin protección. npm run verify 0 comprueba que tu npm la lea.

Cómo instalar

Para instalar lo que ya está en el repo, usa npm ci. Instala exactamente lo que dice package-lock.json, sin resolver versiones nuevas:

npm ci

Si de verdad tienes que agregar un paquete, escribe las banderas completas aunque el .npmrc ya las traiga, para que se vean en el comando y queden en tu historial:

npm install nombre-del-paquete@1.2.3 --save-exact \
  --ignore-scripts --min-release-age=7

Usa siempre una versión exacta. Si npm rechaza una versión por ser muy nueva, usa una anterior o espera unos días, pero no bajes los 7 días.

Qué le pides a Kiro

El repo trae .kiro/steering/npm-seguro.md (con número de línea aquí). Kiro lo lee siempre, y le dice que:

  • instale con npm ci y escriba las banderas completas al agregar un paquete;
  • te avise qué paquete va a agregar y para qué, antes de instalarlo;
  • revise el paquete con Socket si está conectado;
  • nunca apague las protecciones del .npmrc, ni use --force, ni instale desde git o URLs, ni corra npx con paquetes que no estén en el repo.

Si un error de instalación parece resolverse apagando una de esas protecciones, no lo hagas. Pega el error en el chat y pídele a Kiro que te explique la causa.

npm audit avisa de 2 vulnerabilidades moderadas

Hoy npm audit marca minimatch, que viene dentro de aws-cdk-lib. No hay versión corregida, y ese código solo corre en tu laptop cuando CDK genera la plantilla de CloudFormation, no en tus Lambdas. No corras npm audit fix --force: no lo arregla y puede romper el proyecto.

MCP de Socket, opcional

Socket califica cada versión de un paquete de npm en supply chain, calidad, mantenimiento, vulnerabilidades y licencia, y avisa de alertas como scripts de instalación sospechosos. Su MCP oficial le deja a Kiro consultar esas calificaciones antes de instalar algo, como una segunda opinión sin salir del chat.

No lo necesitas para el workshop, y Kiro mismo puede instalarlo.

Te toca: pídele a Kiro que agregue el MCP de Socket (opcional)

Agrega el MCP remoto de Socket a .kiro/settings/mcp.json de este
workspace. Nombre: socket-mcp. URL: https://mcp.socket.dev/
No pongas headers ni API keys: el servidor usa OAuth y Kiro abre el
navegador para que inicie sesión. No instales paquetes.

Si prefieres escribirlo tú, el archivo .kiro/settings/mcp.json queda así:

{
  "mcpServers": {
    "socket-mcp": {
      "url": "https://mcp.socket.dev/"
    }
  }
}

Cuando Kiro abra el navegador, inicia sesión en Socket y autoriza el acceso. Después pregúntale, por ejemplo:

Revisa con Socket el score de aws-cdk-lib en la versión que usa
este repo.

Qué esperar:

  • Socket recibe los nombres y las versiones de los paquetes que consultas, no tu código.
  • Un score alto no garantiza que un paquete sea seguro, y uno bajo no es un veredicto: es una señal más. El de supply chain de aws-cdk-lib salió en 48 cuando se armó este workshop. Es el paquete oficial de AWS para CDK y no hay alternativa, así que aquí se usa.
  • Con Socket conectado, Kiro revisa cada paquete nuevo que quiera agregar y te cuenta los scores y las alertas antes de instalarlo.
Kiro no abre el navegador o dice que no se pudo conectar

Pídele a Kiro que te muestre el error completo del servidor socket-mcp y copia el mensaje. Si dice que falta iniciar sesión, pídele que se conecte otra vez. Lo demás del workshop funciona igual sin este MCP.