From f60f2e7635efe374c4039f2e63311a99b5a5cf47 Mon Sep 17 00:00:00 2001 From: luisgulo Date: Sun, 9 Aug 2026 19:05:27 +0200 Subject: [PATCH] Ampliacion explicacion README --- README.md | 67 ++++++++++++++++++++++++++++++++++--------------------- 1 file changed, 41 insertions(+), 26 deletions(-) diff --git a/README.md b/README.md index 78da82e..1260c3f 100644 --- a/README.md +++ b/README.md @@ -5,61 +5,76 @@ Además te incluyo el protocolo de respuesta ante una infección confirmada. ## 1. Explicación del Script de Python (shai_hulud_detector.py) -El script está diseñado para realizar una auditoría estática y dinámica en tres niveles sobre cualquier proyecto o repositorio Node.js dentro del directorio de trabajo actual: -Nivel 1: Detección de Droppers Físicos (Análisis Estático) +El script está diseñado para realizar una **auditoría estática y dinámica en tres niveles** sobre cualquier proyecto o repositorio Node.js dentro del directorio de trabajo actual: - ¿Qué busca?: Archivos con nombres clave que utiliza el malware (setup.mjs, math_init.js, Math_Symbol.js). - ¿Cómo lo hace?: Escanea recursivamente el árbol de archivos. Si encuentra un paquete susceptible en node_modules (como flat-cache o file-entry-cache), comprueba si dentro de su carpeta existen dichos archivos dropper. Si la dependencia está presente pero no contiene los droppers, la marca como LIMPIA [OK]. +### Nivel 1: Detección de Droppers Físicos (Análisis Estático) -Nivel 2: Inspección de Configuración (package.json) +* **¿Qué busca?:** Archivos con nombres clave que utiliza el malware (`setup.mjs`, `math_init.js`, `Math_Symbol.js`). - Hooks de ciclo de vida (preinstall): Analiza si el campo "scripts" de algún package.json intenta ejecutar comandos sospechosos (por ejemplo, "preinstall": "node setup.mjs"). - Versiones infectadas conocidas: Contrasta las versiones declaradas e instaladas con la lista negra de publicaciones maliciosas confirmadas (keyv@6.0.0, cacheable@2.5.1, cache-manager@7.2.10, etc.). +* **¿Cómo lo hace?:** Escanea recursivamente el árbol de archivos. Si encuentra un paquete susceptible en node_modules (como flat-cache o file-entry-cache), comprueba si dentro de su carpeta existen dichos archivos dropper. Si la dependencia está presente pero no contiene los droppers, la marca como LIMPIA [OK]. -Nivel 3: Auditoría del Árbol de Dependencias (Análisis Dinámico) +### Nivel 2: Inspección de Configuración (package.json) - Equivalente a npm list: Identifica las raíces de los proyectos Node.js (donde hay un package-lock.json o node_modules) y ejecuta automáticamente una inspección del árbol de dependencias resueltas para las familias de riesgo (keyv, cacheable, flat-cache, file-entry-cache, etc.). - Esto permite visibilizar la cadena de dependencias transitivas (por ejemplo, ver si llegan a través de eslint). +* **Hooks de ciclo de vida (`preinstall`):** Analiza si el campo "scripts" de algún `package.json` intenta ejecutar comandos sospechosos (por ejemplo, "preinstall": `node setup.mjs`). + +* **Versiones infectadas conocidas:** Contrasta las versiones declaradas e instaladas con la lista negra de publicaciones maliciosas confirmadas (`keyv@6.0.0`, `cacheable@2.5.1`, `cache-manager@7.2.10`, etc.). + +### Nivel 3: Auditoría del Árbol de Dependencias (Análisis Dinámico) + + +* **Equivalente a npm list:** Identifica las raíces de los proyectos Node.js (donde hay un package-lock.json o node_modules) y ejecuta automáticamente una inspección del árbol de dependencias resueltas para las familias de riesgo (keyv, cacheable, flat-cache, file-entry-cache, etc.). + +Esto permite visibilizar la cadena de dependencias transitivas (por ejemplo, ver si llegan a través de eslint). ## 2. Procedimiento de Actuación en Caso de Infección Confirmada -Si el script o tus revisiones confirman la presencia de un dropper o de una versión infectada, se debe asumir que el entorno ha sido comprometido y aplicar inmediatamente el siguiente protocolo: -Paso 1: Aislamiento del Entorno +Si el script o tus revisiones confirman la presencia de un dropper o de una versión infectada, se debe asumir que el entorno ha sido **comprometido** y aplicar inmediatamente el siguiente protocolo: - Detener procesos activos: Cancela inmediatamente cualquier servidor, pipeline de CI/CD o proceso de construcción (npm run build, npm start) que se esté ejecutando en ese equipo. - Desconectar de la red: Si es una máquina o servidor en producción, aíslala temporalmente de la red para evitar que la carga útil descargue el entorno Bun o intente exfiltrar credenciales. +### Paso 1: Aislamiento del Entorno -Paso 2: Revocación Inmediata de Credenciales (Crítico) +* **Detener procesos activos:** Cancela inmediatamente cualquier servidor, pipeline de CI/CD o proceso de construcción (`npm run build`, `npm start`) que se esté ejecutando en ese equipo. + +* **Desconectar de la red:** Si es una máquina o servidor en producción, aíslala temporalmente de la red para evitar que la carga útil descargue el entorno **Bun** o intente exfiltrar credenciales. + +### Paso 2: Revocación Inmediata de Credenciales (Crítico) Como el objetivo principal de Shai-Hulud es el robo y reutilización de credenciales: - Revocar Tokens de NPM: Entra en tu cuenta de npmjs.com y revoca todos los Access Tokens activos inmediatamente. - Revocar Tokens de GitHub / CI/CD: Revoca cualquier Personal Access Token (PAT), clave SSH o credenciales de integración de CI/CD (GitHub Actions, Gitea, etc.) que estuvieran almacenadas en la máquina infectada (~/.npmrc, ~/.ssh, variables de entorno). +* **Revocar Tokens de NPM:** Entra en tu cuenta de npmjs.com y revoca todos los Access Tokens activos inmediatamente. -Paso 3: Limpieza y Eliminación +* **Revocar Tokens de GitHub / CI/CD:** Revoca cualquier Personal Access Token (PAT), clave SSH o credenciales de integración de CI/CD (GitHub Actions, Gitea, etc.) que estuvieran almacenadas en la máquina infectada (`~/.npmrc`, `~/.ssh`, variables de entorno). -Limpiar la caché global de npm: +### Paso 3: Limpieza y Eliminación +**Limpiar la caché global de npm:** + +``` npm cache clean --force +``` -Borrar directorios y bloqueos contaminados: Elimina las carpetas node_modules y el archivo package-lock.json del proyecto afectado: +**Borrar directorios y bloqueos contaminados:** Elimina las carpetas `node_modules` y el archivo `package-lock.json` del proyecto afectado: +``` rm -rf node_modules package-lock.json +``` -Paso 4: Reinstalación Segura +### Paso 4: Reinstalación Segura - Fijar versiones seguras: Asegúrate en tu package.json de que las dependencias estén apuntando a versiones anteriores estables o a las versiones parcheadas que hayan publicado los mantenedores oficiales. +* **Fijar versiones seguras:** Asegúrate en tu `package.json` de que las dependencias estén apuntando a versiones anteriores estables o a las versiones parcheadas que hayan publicado los mantenedores oficiales. -Desactivar scripts automáticos: Fuerza la instalación sin ejecutar los hooks de ciclo de vida para evitar que cualquier dependencia infectada vuelva a dispararse: +* **Desactivar scripts automáticos:** Fuerza la instalación sin ejecutar los hooks de ciclo de vida para evitar que cualquier dependencia infectada vuelva a dispararse: +``` npm install --ignore-scripts +``` -Paso 5: Auditar Publicaciones (Si eres mantenedor) +### Paso 5: Auditar Publicaciones (Si eres mantenedor) Si tenías permisos de publicación en algún paquete de npm en esa máquina: - Revisa tu perfil en el registro de npm para comprobar si el gusano publicó versiones no autorizadas (versiones parche como x.x.+1) a tu nombre el 4 de agosto o en fechas posteriores. - Despublica (unpublish) o marca como deprecadas (deprecate) de inmediato las versiones maliciosas generadas en tus paquetes. +* Revisa tu perfil en el registro de npm para comprobar si el gusano publicó versiones no autorizadas (versiones parche como `x.x.+1`) a tu nombre el 4 de agosto o en fechas posteriores. + +* Despublica (unpublish) o marca como deprecadas (deprecate) de inmediato las versiones maliciosas generadas en tus paquetes. ## Script de Detección