SOC Prime Bias: Crítico

05 Jun 2026 15:45 UTC

El Ataque a la Cadena de Suministro Miasma se Propaga a través del Gusano Phantom Gyp

Author Photo
SOC Prime Team linkedin icon Seguir
El Ataque a la Cadena de Suministro Miasma se Propaga a través del Gusano Phantom Gyp
shield icon

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

Notificarme

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 un binding.gypbinding.gyp npm installmalicioso. Cuando un desarrollador ejecuta node-gyp rebuild, el proceso de construcción del paquete invoca

    1. Descarga el entorno de ejecución Bun (binario firmado) a través de curl a un directorio temporal (/tmp/b-<rand>/).
    2. Eleva privilegios invocando sudo python3 para descomprimir el archivo zip y colocar el binario en /usr/local/bin.
    3. Recopila el token de GitHub del desarrollador usando gh auth token.
    4. 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 de Sigma rule.

  • 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."