@theoptimalpartner/npm-security-kit 1.0.1 → 2.0.0-beta.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md ADDED
@@ -0,0 +1,44 @@
1
+ # Changelog
2
+
3
+ Cambios del paquete `@theoptimalpartner/npm-security-kit`. Formato basado en
4
+ [Keep a Changelog](https://keepachangelog.com/es-ES/1.1.0/); versiones con [SemVer](https://semver.org/lang/es/).
5
+
6
+ ## [2.0.0] - sin publicar
7
+
8
+ Reescritura completa. La v2 es una CLI de Node sin dependencias que corre en el pipeline **antes de `npm ci`**.
9
+ Sale primero como `2.0.0-beta.0`, con el dist-tag `beta`.
10
+
11
+ ### BREAKING
12
+
13
+ - Un solo comando, `npm-security-kit`, con los subcomandos `check` e `init`. Se quitan los `bin`
14
+ `npm-security-install`, `npm-security-check`, `npm-security-setup-husky` y `npm-security-integrate-pipeline`.
15
+ - Se quita la blacklist de 175 paquetes, `src/index.js` (`isMalicious`, `matchesMaliciousPattern`) y
16
+ `.security/config.json`: los advisories del registro de npm ya cubren esos paquetes, y la lista solo miraba las
17
+ dependencias directas, después de instalar.
18
+ - Se quitan `check-malicious-packages.sh` y `security-check.sh` (se cortaba en el paso 2), husky y sus hooks, la
19
+ plantilla de `bitbucket-pipelines.yml` (pisaba el pipeline del proyecto) y el `SECURITY.md` generado.
20
+ - Se quitan AUTOMATION_GUIDE, QUICK_START, EXAMPLES, NPM_SECURITY_KIT_SUMMARY y NPM_SECURITY_PROTOCOL. Quedan
21
+ el README (uso) y este CHANGELOG.
22
+ - Requiere Node ≥ 18.3.
23
+
24
+ ### Agregado
25
+
26
+ - `check`: malware (CWE-506) en todo el árbol y con cualquier severidad; vulnerabilidades `critical` en producción;
27
+ versión de Node contra el calendario de nodejs.org; claves del `.npmrc`, `engines.npm`, npm en uso y lockfile;
28
+ install scripts contra `allowScripts`; Dockerfiles que instalan sin el `.npmrc`. Salida en texto o `--json`,
29
+ exit 0/1/2.
30
+ - `init`: completa `.npmrc` y `engines` sin borrar nada, lista los install scripts por aprobar y muestra el step
31
+ del pipeline y los cambios de los Dockerfiles. `--dry-run` muestra el diff.
32
+ - Override de install scripts por repo con `npm_config_strict_allow_scripts=false`.
33
+
34
+ ### Cómo migrar desde la 1.x
35
+
36
+ 1. Borrar lo que instaló la v1, si no se usa para otra cosa: `.security/`, `scripts/check-malicious-packages.sh`,
37
+ `scripts/security-check.sh`, `.husky/` (y el `"prepare": "husky install"`), los scripts `security:*` del
38
+ `package.json` y el `SECURITY.md` generado.
39
+ 2. Si la v1 reemplazó el `bitbucket-pipelines.yml`, recuperar el del repo desde git.
40
+ 3. Correr `npx --yes @theoptimalpartner/npm-security-kit@2.0.0 init` y seguir los pasos que imprime (README).
41
+
42
+ ## [1.0.2] y anteriores
43
+
44
+ Versiones 1.x, sin mantenimiento desde la 2.0.0. Para migrar, ver arriba.
package/LICENSE CHANGED
@@ -1,6 +1,6 @@
1
1
  MIT License
2
2
 
3
- Copyright (c) 2025 Your Organization
3
+ Copyright (c) 2025 The Optimal Partner
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
package/README.md CHANGED
@@ -1,495 +1,193 @@
1
- # NPM Security Kit 🛡️
1
+ # npm-security-kit
2
2
 
3
- **Protección instant contra paquetes maliciosos y vulnerabilidades**
3
+ Reglas de seguridad de dependencias npm en un solo comando que corre en el pipeline **antes de `npm ci`**. No tiene
4
+ dependencias: `npx` descarga un solo tarball y revisa el lockfile antes de que se ejecute un solo install script.
4
5
 
5
- Kit portable y reutilizable para proteger cualquier proyecto Node.js/npm contra:
6
- - ✅ 175+ paquetes maliciosos conocidos (campaña de phishing Oct 2025)
7
- - ✅ Vulnerabilidades en dependencias
8
- - ✅ Supply chain attacks
9
- - ✅ Typosquatting
10
- - ✅ Malware en dependencias transitivas
6
+ ## Qué revisa
11
7
 
12
- ---
8
+ | Chequeo | Qué mira | Error (bloquea) | Aviso |
9
+ |---|---|---|---|
10
+ | `malware` | `npm audit` sobre **todo** el lockfile, incluidas las devDependencies | Cualquier advisory de malware (CWE-506), con cualquier severidad | — |
11
+ | `vulnerabilities` | `npm audit --omit=dev` | Vulnerabilidades `critical` en producción | Resumen de las `high` |
12
+ | `node-version` | `.nvmrc`, `.node-version`, `.tool-versions`, `engines.node`, `volta.node`, `FROM node:` y `image:` del pipeline | Línea de Node sin soporte o que no es LTS | Hay una LTS más nueva (mientras no tenga su primera release LTS, solo se informa), pocos días de soporte, parche de seguridad pendiente, versiones mayores distintas, nada fijado |
13
+ | `npm-policy` | `.npmrc`, `engines.npm`, npm en uso, lockfile | Faltan `min-release-age`, `engine-strict` o `strict-allow-scripts`; npm < 11.17; no hay lockfile | Faltan `min-release-age-exclude[]`, `save-exact` o `audit-level`; lockfile < v3 |
14
+ | `install-scripts` | Paquetes con install scripts del lockfile contra `allowScripts` | Alguno sin aprobar (con `strict-allow-scripts`) | Alguno sin aprobar con el override por variable de entorno |
15
+ | `dockerfile` | `COPY` del `.npmrc` antes de `npm ci`, `.dockerignore` | Instala sin el `.npmrc` | Usa `npm install` en vez de `npm ci`; el `.dockerignore` deja fuera el lockfile |
13
16
 
14
- ## 🚀 Instalación Rápida (2 minutos)
17
+ Las versiones y fechas de Node se leen de nodejs.org en cada corrida: el kit no las trae fijas.
15
18
 
16
- ### Opción 1: Instalación Automática (Recomendado)
19
+ ### El `.npmrc` que pide
17
20
 
18
- ```bash
19
- # Desde la raíz de tu proyecto
20
- curl -sSL https://raw.githubusercontent.com/tu-org/npm-security-kit/main/install.sh | bash
21
- ```
22
-
23
- O si tienes el kit localmente:
24
-
25
- ```bash
26
- # Desde la raíz de tu proyecto
27
- bash /ruta/a/npm-security-kit/install.sh
28
- ```
29
-
30
- ### Opción 2: Instalación Manual (3 pasos)
21
+ ```ini
22
+ # Dependencias externas: mínimo 7 días desde su publicación
23
+ min-release-age=7
31
24
 
32
- ```bash
33
- # 1. Copiar archivos de seguridad
34
- cp -r /ruta/a/npm-security-kit/template/.security .
35
- cp -r /ruta/a/npm-security-kit/template/scripts .
36
- cp -r /ruta/a/npm-security-kit/template/.github .
37
-
38
- # 2. Hacer scripts ejecutables
39
- chmod +x scripts/*.sh
40
-
41
- # 3. Agregar scripts a package.json
42
- # Ver sección "Scripts NPM" más abajo
43
- ```
25
+ # Paquetes internos: se pueden instalar inmediatamente
26
+ min-release-age-exclude[]=@theoptimalpartner/*
44
27
 
45
- ---
28
+ # Guardar versiones exactas
29
+ save-exact=true
46
30
 
47
- ## 📦 ¿Qué Incluye?
31
+ # Validar engines (npm >= la versión mínima de la política)
32
+ engine-strict=true
48
33
 
49
- ### Archivos Instalados
34
+ # Install scripts: solo corren los aprobados en allowScripts (package.json)
35
+ strict-allow-scripts=true
50
36
 
51
- ```
52
- tu-proyecto/
53
- ├── .github/
54
- │ ├── workflows/
55
- │ │ └── security-audit.yml # GitHub Actions automático
56
- │ └── dependabot.yml # Actualizaciones automáticas
57
- ├── .security/
58
- │ ├── malicious-packages-blacklist.json # 175+ paquetes maliciosos
59
- │ └── config.json # Configuración personalizable
60
- ├── scripts/
61
- │ ├── check-malicious-packages.sh # Verificar paquetes maliciosos
62
- │ └── security-check.sh # Auditoría completa
63
- └── SECURITY.md # Documentación
37
+ # npm audit falla solo por vulnerabilidades críticas
38
+ audit-level=critical
64
39
  ```
65
40
 
66
- ### Scripts NPM Agregados
67
-
68
- ```json
69
- {
70
- "scripts": {
71
- "security:check": "./scripts/security-check.sh",
72
- "security:check-malicious": "./scripts/check-malicious-packages.sh",
73
- "security:audit": "npm audit --audit-level=moderate",
74
- "security:audit:fix": "npm audit fix",
75
- "security:outdated": "npm outdated",
76
- "security:licenses": "npm list --json | jq -r '.dependencies | to_entries[] | \"\\(.key): \\(.value.license)\"'",
77
- "security:full": "npm run security:audit && npm run security:check"
78
- }
79
- }
80
- ```
41
+ Además, `engines.npm` en `>=11.17`: npm 10 ignora `min-release-age` sin avisar y no aplica `allowScripts`.
81
42
 
82
- ---
43
+ ## Uso
83
44
 
84
- ## 🎯 Uso Diario
45
+ ### En el pipeline
85
46
 
86
- ### Antes de Instalar un Paquete
47
+ Un step **antes de `npm ci`**, con la versión del kit fija y solo en los PR a ramas que despliegan (ejemplo de
48
+ `bitbucket-pipelines.yml`, el pipeline que lee el chequeo de Node):
87
49
 
88
- ```bash
89
- # Verificar si un paquete es seguro
90
- npm run security:check-malicious
50
+ ```yaml
51
+ definitions:
52
+ steps:
53
+ - step: &test
54
+ name: Test (supply chain + build)
55
+ image: node:24.22.1
56
+ caches:
57
+ - npm
58
+ script:
59
+ # Antes de instalar: malware, vulnerabilidades, Node, .npmrc, install scripts, Dockerfiles
60
+ - npx --yes @theoptimalpartner/npm-security-kit@2.0.0 check
61
+ - npm ci # con strict-allow-scripts, los scripts no aprobados cortan acá
62
+ - npm audit signatures
63
+ - npm run build
91
64
 
92
- # Ver info del paquete
93
- npm info paquete-nombre
65
+ pipelines:
66
+ pull-requests:
67
+ '**':
68
+ - step:
69
+ <<: *test
70
+ condition:
71
+ state: BITBUCKET_PR_DESTINATION_BRANCH == "develop" || BITBUCKET_PR_DESTINATION_BRANCH == "main"
94
72
  ```
95
73
 
96
- ### Después de Instalar Dependencias
74
+ - **Antes de `npm ci`:** `npm audit` funciona solo con el lockfile, así que el malware se detecta antes de que
75
+ corra su `postinstall`.
76
+ - **Versión fija** (`@2.0.0`): subir la política en un repo es un cambio visible en su PR. El scope
77
+ `@theoptimalpartner/*` está excluido de `min-release-age`, así que un parche del kit se puede usar el mismo día.
78
+ - **`npm audit signatures`** va después de `npm ci` porque necesita `node_modules`.
79
+ - Para guardar el resultado como artefacto: `npx --yes @theoptimalpartner/npm-security-kit@2.0.0 check --json > npm-security-kit.json`.
97
80
 
98
- ```bash
99
- # Verificación rápida
100
- npm run security:audit
101
-
102
- # Verificación completa (recomendado)
103
- npm run security:full
104
- ```
81
+ ### Dockerfile
105
82
 
106
- ### Antes de Deploy
83
+ El `.npmrc` se copia con el lockfile, antes de `npm ci`. Si no, dentro de la imagen no aplican
84
+ `strict-allow-scripts`, `min-release-age` ni `engine-strict`:
107
85
 
108
- ```bash
109
- # Auditoría completa
110
- npm run security:full
111
-
112
- # Si hay problemas, auto-fix
113
- npm run security:audit:fix
86
+ ```dockerfile
87
+ COPY package.json package-lock.json .npmrc ./
88
+ RUN npm ci
114
89
  ```
115
90
 
116
- ---
117
-
118
- ## ⚙️ Configuración
119
-
120
- ### Personalizar para tu Proyecto
121
-
122
- Edita `.security/config.json`:
123
-
124
- ```json
125
- {
126
- "projectName": "mi-proyecto",
127
- "projectType": "node",
128
- "excludeDirs": ["node_modules", "dist", "build"],
129
- "strictMode": true,
130
- "notifications": {
131
- "email": "security@tuempresa.com",
132
- "slack": "https://hooks.slack.com/..."
133
- }
134
- }
135
- ```
136
-
137
- ### Tipos de Proyecto Soportados
138
-
139
- - `node` - Proyectos Node.js backend
140
- - `react` - Aplicaciones React
141
- - `nextjs` - Aplicaciones Next.js
142
- - `vue` - Aplicaciones Vue.js
143
- - `express` - APIs Express
144
- - `serverless` - Funciones serverless
145
- - `library` - Librerías npm
146
-
147
- ---
91
+ Si el `.dockerignore` excluye el `.npmrc` (por ejemplo con `.*`), agregar `!.npmrc` al final.
148
92
 
149
- ## 🔒 Características
93
+ ### Adoptarlo en un repo: `init`
150
94
 
151
- ### 1. Verificación de Paquetes Maliciosos
152
-
153
- **Blacklist de 175+ paquetes conocidos**:
154
- - Campaña de phishing Oct 2025
155
- - Patrones maliciosos (`redirect-*`)
156
- - Dominios de phishing
157
- - Cuentas npm comprometidas
95
+ Una vez por repo, en una rama:
158
96
 
159
97
  ```bash
160
- npm run security:check-malicious
98
+ npx --yes @theoptimalpartner/npm-security-kit@2.0.0 init --dry-run
161
99
  ```
162
100
 
163
- ### 2. Auditoría Automática
164
-
165
- **npm audit mejorado**:
166
- - Verifica vulnerabilidades conocidas
167
- - Auto-fix cuando es posible
168
- - Reportes detallados
169
-
170
101
  ```bash
171
- npm run security:audit
102
+ npx --yes @theoptimalpartner/npm-security-kit@2.0.0 init
172
103
  ```
173
104
 
174
- ### 3. GitHub Actions
175
-
176
- **Verificación en cada PR/Push**:
177
- - ✅ npm audit
178
- - ✅ Paquetes maliciosos
179
- - ✅ Dependency review
180
- - ✅ License compliance
181
- - ✅ Secrets detection
105
+ `init`:
182
106
 
183
- **Ejecución semanal automática** (Lunes 9am UTC)
107
+ - agrega al `.npmrc` las claves de la política que faltan (con un comentario) y corrige las que tienen otro valor,
108
+ sin borrar ni reordenar nada;
109
+ - completa `engines.npm` (`>=11.17`) y, solo si falta, `engines.node`;
110
+ - **no aprueba install scripts**: lista los pendientes y los comandos para revisarlos;
111
+ - **no edita** `bitbucket-pipelines.yml` ni los Dockerfiles: muestra el step y los `COPY` corregidos;
112
+ - se puede correr de nuevo sin cambiar nada.
184
113
 
185
- ### 4. Dependabot
114
+ Después: revisar el diff, aprobar o negar los install scripts, aplicar el step y el Dockerfile, y correr `check`.
186
115
 
187
- **Actualizaciones automáticas**:
188
- - Security patches prioritarios
189
- - Agrupación inteligente
190
- - PRs con contexto
191
-
192
- ### 5. Pre-commit Hooks (Opcional)
193
-
194
- Instalar con Husky:
116
+ ### En local
195
117
 
196
118
  ```bash
197
- npm install --save-dev husky
198
- npx husky init
199
- echo "npm run security:check-malicious" > .husky/pre-commit
200
- ```
201
-
202
- ---
203
-
204
- ## 📊 Ejemplos de Salida
205
-
206
- ### ✅ Proyecto Limpio
207
-
119
+ npx --yes @theoptimalpartner/npm-security-kit@2.0.0 check
208
120
  ```
209
- ========================================
210
- Malicious Package Detection
211
- ========================================
212
-
213
- Loading blacklist...
214
- ✓ Loaded 175 malicious packages
215
- Source: Socket.dev - 175 Malicious npm Packages...
216
- Last Updated: 2025-10-20
217
-
218
- Analyzing installed packages...
219
- Total installed packages: 342
220
-
221
- Checking against blacklist...
222
-
223
- Checking against malicious patterns...
224
-
225
- ========================================
226
- Results
227
- ========================================
228
- ✓ No malicious packages detected
229
-
230
- Summary:
231
- - Checked: 342 packages
232
- - Against: 175 known malicious packages
233
- - Found: 0 threats
234
- ```
235
-
236
- ### ❌ Amenaza Detectada
237
-
238
- ```
239
- ========================================
240
- Results
241
- ========================================
242
- ✗ MALICIOUS PACKAGES FOUND!
243
-
244
- Summary:
245
- - Direct matches: 1
246
- - Pattern matches: 0
247
- - Total threats: 1
248
-
249
- Malicious packages found:
250
- - redirect-abc123 (direct match)
251
-
252
- IMMEDIATE ACTIONS REQUIRED:
253
- 1. DO NOT use this application
254
- 2. Uninstall malicious packages immediately
255
- 3. Review application logs for suspicious activity
256
- 4. Check for data exfiltration
257
- 5. Report to security team
258
- ```
259
-
260
- ---
261
-
262
- ## 🔄 Actualización
263
-
264
- ### Actualizar Blacklist
265
-
266
- ```bash
267
- # Descargar última blacklist
268
- curl -o .security/malicious-packages-blacklist.json \
269
- https://raw.githubusercontent.com/tu-org/npm-security-kit/main/blacklist.json
270
121
 
271
- # Verificar
272
- npm run security:check-malicious
273
- ```
122
+ No se instala como devDependency ni usa husky: el `.npmrc` protege el `npm install` local y el pipeline es el
123
+ control que no se puede saltar.
274
124
 
275
- ### Actualizar Scripts
125
+ ## Cómo leer la salida
276
126
 
277
- ```bash
278
- # Re-ejecutar instalación (preserva config)
279
- bash /ruta/a/npm-security-kit/install.sh --update
280
- ```
127
+ Un bloque por chequeo. `✗` error, `⚠` aviso, `ℹ` información, con `archivo:línea` cuando aplica. Cada mensaje dice
128
+ qué hacer. Cuando el mismo aviso aparece en varios archivos (por ejemplo, la misma versión de Node en `.nvmrc`,
129
+ Dockerfile y pipeline) va una sola vez, con la lista de archivos.
281
130
 
282
- ---
131
+ | Exit code | Significado |
132
+ |---|---|
133
+ | 0 | Sin errores (puede haber avisos) |
134
+ | 1 | Hay al menos un error |
135
+ | 2 | Uso incorrecto o fallo del kit |
283
136
 
284
- ## 🎓 Mejores Prácticas
137
+ `check --json` escribe solo JSON en stdout:
138
+ `{ kitVersion, policy, results: [{ check, level, message, file?, line?, data? }], summary: { errors, warnings } }`.
285
139
 
286
- ### 1. Verificar Antes de Instalar
140
+ ## Recetas
287
141
 
288
- ```bash
289
- # ❌ NO HACER
290
- npm install paquete-random
291
-
292
- # ✅ HACER
293
- npm info paquete-random
294
- npm view paquete-random repository
295
- npm view paquete-random license
296
- npm install paquete-random
297
- npm run security:check-malicious
298
- ```
142
+ ### `npm ci` falla con EUSAGE (lockfile incompleto)
299
143
 
300
- ### 2. Mantener Dependencias Actualizadas
144
+ Pasa con lockfiles generados con npm 10, a los que les faltan opcionales de plataforma. Regenerarlo con npm 11:
301
145
 
302
146
  ```bash
303
- # Ver paquetes desactualizados
304
- npm run security:outdated
305
-
306
- # Actualizar con cuidado
307
- npm update
308
- npm run security:full
147
+ npm install --package-lock-only
309
148
  ```
310
149
 
311
- ### 3. Revisar Dependabot PRs
312
-
313
- - ✅ Priorizar PRs de seguridad
314
- - ✅ Leer changelog antes de aprobar
315
- - ✅ Probar en staging primero
316
-
317
- ### 4. Auditorías Regulares
318
-
319
- | Frecuencia | Acción | Comando |
320
- |------------|--------|---------|
321
- | **Diario** | Revisar Dependabot PRs | GitHub UI |
322
- | **Semanal** | GitHub Actions (automático) | - |
323
- | **Mensual** | Auditoría manual completa | `npm run security:full` |
324
- | **Trimestral** | Actualizar blacklist | Ver sección Actualización |
325
-
326
- ---
327
-
328
- ## 🚨 Respuesta a Incidentes
329
-
330
- ### Si se Detecta un Paquete Malicioso
331
-
332
- 1. **DETENER** - No desplegar ni ejecutar
333
- 2. **AISLAR** - Marcar entorno como comprometido
334
- 3. **ANALIZAR**:
335
- ```bash
336
- npm run security:check-malicious
337
- npm list | grep nombre-paquete
338
- git log package-lock.json
339
- ```
340
- 4. **REMOVER**:
341
- ```bash
342
- npm uninstall nombre-paquete
343
- npm audit
344
- npm run security:full
345
- ```
346
- 5. **INVESTIGAR**:
347
- - Revisar logs de aplicación
348
- - Verificar conexiones de red
349
- - Buscar data exfiltration
350
- 6. **REPORTAR**:
351
- - Equipo de seguridad interno
352
- - npm security (security@npmjs.com)
353
- - Socket.dev (https://socket.dev/report)
354
-
355
- ---
150
+ ### Parche urgente con menos de 7 días
356
151
 
357
- ## 🔧 Troubleshooting
358
-
359
- ### Error: "jq command not found"
360
-
361
- ```bash
362
- # Ubuntu/Debian
363
- sudo apt-get install jq
364
-
365
- # macOS
366
- brew install jq
367
-
368
- # Windows (WSL)
369
- sudo apt-get install jq
370
- ```
371
-
372
- ### Error: "Permission denied" en scripts
152
+ `min-release-age=7` no deja instalar versiones recién publicadas. Para un parche de seguridad que no puede esperar:
373
153
 
374
154
  ```bash
375
- chmod +x scripts/*.sh
155
+ npm install paquete@x.y.z --min-release-age=0
376
156
  ```
377
157
 
378
- ### GitHub Actions no ejecuta
158
+ Dejar en la descripción del PR qué versión es, por qué no puede esperar (el advisory) y quién lo aprobó, y revisar que
159
+ el lockfile solo cambió en ese paquete y sus dependencias.
379
160
 
380
- Verifica que `.github/workflows/security-audit.yml` esté commiteado:
161
+ ### Aprobar o negar install scripts
381
162
 
382
163
  ```bash
383
- git add .github/workflows/security-audit.yml
384
- git commit -m "chore: add security audit workflow"
385
- git push
164
+ npm ci --ignore-scripts
165
+ npm install-scripts ls
166
+ npm install-scripts approve esbuild # baja el binario de su plataforma: lo necesita
167
+ npm install-scripts deny core-js # solo imprime un mensaje: no hace falta
386
168
  ```
387
169
 
388
- ### Dependabot no abre PRs
389
-
390
- Verifica en GitHub Settings > Security > Dependabot que esté habilitado.
391
-
392
- ---
393
-
394
- ## 📚 Recursos
395
-
396
- ### Documentación Adicional
397
-
398
- - **SECURITY_PROTOCOL.md** - Protocolo completo (en auth-service)
399
- - **SECURITY_AUDIT_REPORT.md** - Ejemplo de informe
400
- - **SECURITY_QUICK_GUIDE.md** - Guía rápida
401
-
402
- ### Enlaces Útiles
170
+ Se aprueba lo que necesita compilar o bajar binarios para funcionar, y se niega lo que es solo telemetría o
171
+ publicidad. El kit no aprueba nada en automático. Queda en `allowScripts` del `package.json`. Reglas (las mismas de
172
+ npm):
403
173
 
404
- - Socket.dev Blog: https://socket.dev/blog
405
- - npm Security: https://docs.npmjs.com/security
406
- - OWASP Dependency Check: https://owasp.org/www-community/Component_Analysis
407
- - Snyk Advisor: https://snyk.io/advisor
174
+ - `"pkg": true|false` vale para cualquier versión; `"pkg@1.2.3"` solo para esa; `"pkg@1.2.3 || 1.2.4"` para una lista.
175
+ - `false` le gana a `true`.
176
+ - **npm ignora los rangos** (`pkg@^1`) y los dist-tags (`pkg@latest`): esa entrada no aprueba nada, y el kit lo avisa.
177
+ - Las opcionales de otra plataforma (como `fsevents` en Linux) npm no las instala: en el pipeline no cuentan.
408
178
 
409
- ### Reportar Vulnerabilidades
179
+ ### Desactivar `strict-allow-scripts` en un repo (override)
410
180
 
411
- - NPM Security: security@npmjs.com
412
- - Socket.dev: https://socket.dev/report
413
- - GitHub Security: https://github.com/security
181
+ Si un repo no puede adoptar todavía la aprobación de install scripts, se define la variable de npm, que le gana al
182
+ `.npmrc`:
414
183
 
415
- ---
184
+ - en el pipeline: *Repository variable* `npm_config_strict_allow_scripts` = `false`;
185
+ - en local: `npm_config_strict_allow_scripts=false npm ci`.
416
186
 
417
- ## 🤝 Contribuir
187
+ Con el override, npm ejecuta los scripts sin aprobar y el kit los informa como **aviso**, más un aviso de que el
188
+ override está activo. Dentro del `docker build` la variable no llega sola: hay que pasarla como `ARG`.
418
189
 
419
- ### Agregar Paquetes a la Blacklist
420
-
421
- 1. Verificar en múltiples fuentes (Socket.dev, Snyk, GitHub)
422
- 2. Editar `.security/malicious-packages-blacklist.json`
423
- 3. Agregar evidencia y referencias
424
- 4. Pull request con documentación
425
-
426
- ### Mejorar Scripts
427
-
428
- 1. Fork del repositorio
429
- 2. Crear rama con feature
430
- 3. Probar en múltiples proyectos
431
- 4. PR con tests y documentación
432
-
433
- ---
434
-
435
- ## 📄 Licencia
436
-
437
- MIT License - Úsalo libremente en proyectos comerciales y open source
438
-
439
- ---
440
-
441
- ## ⭐ Proyectos Usando Este Kit
442
-
443
- - auth-service
444
- - jwt-auth-package
445
- - auth-react-client
446
-
447
- ¿Usas este kit? Agrega tu proyecto aquí!
448
-
449
- ---
450
-
451
- ## 🎯 Roadmap
452
-
453
- - [ ] npm package instalable (`npm install -D @tuorg/security-kit`)
454
- - [ ] Integración con más CI/CD (GitLab, Bitbucket, CircleCI)
455
- - [ ] Dashboard web de métricas
456
- - [ ] Integración con Slack/Discord
457
- - [ ] Soporte para Python/pip, Ruby/gems, etc.
458
- - [ ] Machine learning para detectar patrones
459
-
460
- ---
461
-
462
- ## 📞 Soporte
463
-
464
- - **Issues**: GitHub Issues
465
- - **Discusiones**: GitHub Discussions
466
- - **Email**: security@tuempresa.com
467
- - **Slack**: #security channel
468
-
469
- ---
470
-
471
- **Versión**: 1.0.0
472
- **Última actualización**: 2025-10-20
473
- **Mantenedor**: Diego
474
-
475
- ---
476
-
477
- ## 🚀 Quick Start
478
-
479
- ```bash
480
- # 1. Clonar o descargar el kit
481
- git clone https://github.com/tu-org/npm-security-kit
482
-
483
- # 2. Ir a tu proyecto
484
- cd mi-proyecto
485
-
486
- # 3. Ejecutar instalación
487
- bash /ruta/a/npm-security-kit/install.sh
488
-
489
- # 4. Verificar
490
- npm run security:check-malicious
491
-
492
- # 5. ¡Listo! Tu proyecto está protegido
493
- ```
190
+ ### El registro de npm no responde
494
191
 
495
- **¿Preguntas?** Lee la documentación completa o abre un issue.
192
+ El chequeo de malware falla cerrado: `no se pudo consultar los advisories del registro (…); reintentar el step`.
193
+ No es un hallazgo de seguridad; se reintenta el step. Si nodejs.org no responde, `node-version` avisa y se omite.
@@ -0,0 +1,12 @@
1
+ #!/usr/bin/env node
2
+ import { main } from '../src/cli.js';
3
+
4
+ main(process.argv.slice(2)).then(
5
+ (code) => {
6
+ process.exitCode = code;
7
+ },
8
+ (error) => {
9
+ process.stderr.write(`npm-security-kit: fallo interno: ${error?.stack ?? error}\n`);
10
+ process.exitCode = 2;
11
+ },
12
+ );