SOC Prime Bias: Critical

27 Oct 2026 13:41 UTC

42 Repositorios de GitHub Utilizados como Armas Revelan un Publicador de npm Oculto

Author Photo
SOC Prime Team linkedin icon Seguir
42 Repositorios de GitHub Utilizados como Armas Revelan un Publicador de npm Oculto
shield icon

Detection stack

  • AIDR
  • Alert
  • ETL
  • Query

Resumen

Una campaña sofisticada seguida como testmetest utiliza paquetes maliciosos de npm y repositorios comprometidos de GitHub para robar credenciales y automatizar lanzamientos de paquetes maliciosos. Los atacantes dependen de envoltorios polimórficos, complementos nativos de Node.js y cargas útiles encriptadas para evadir la detección. La campaña también involucra infraestructura utilizada para escanear y explotar vulnerabilidades de cPanel.

Investigación

Los investigadores de seguridad de JFrog identificaron 42 repositorios de GitHub armados junto con múltiples paquetes maliciosos de npm. Descubrieron que los atacantes utilizaron una técnica de camuflaje de addon nativo en la que una .node compilada desencripta una carga útil oculta en tiempo de ejecución. La investigación también vinculó la actividad a shellpanel escáneres dirigidos a sistemas cPanel a través de CVE-2026-41940.

Mitigación

Los usuarios deben eliminar los paquetes maliciosos de npm identificados y reconstruir los sistemas afectados desde fuentes confiables. Las organizaciones deben rotar todas las credenciales potencialmente comprometidas, incluidas GitHub, npm y tokens en la nube. También es crítico auditar los repositorios en busca de archivos de configuración no autorizados como .github/init.js y hooks de ejecución inesperados en package.json archivos o Makefiles.

Respuesta

Cuando se detecta actividad maliciosa, revoque los secretos expuestos y rote las credenciales inmediatamente. Busque mecanismos de persistencia como net-health-checker or pkg-runtime. Revise los registros de GitHub Actions en busca de flujos de trabajo no autorizados y monitoree los sistemas en busca de cargas útiles desencriptadas escritas en directorios temporales.

Flujo de Ataque

Aún estamos actualizando esta parte.

Detecciones

Se creó un archivo oculto en el anfitrión Linux (vía file_event)

Equipo de SOC Prime
26 Oct 2026

Procesos Hijos de NodeJS Sospechosos [Windows] (vía cmdline)

Equipo de SOC Prime
26 Oct 2026

Posible Descarga de Archivo de Github Iniciada por Proceso Inusual (vía network_connection)

Equipo de SOC Prime
26 Oct 2026

Uso de Nohup (vía cmdline)

Equipo de SOC Prime
26 Oct 2026

Procesos Hijos de NodeJS Sospechosos [Linux] (vía cmdline)

Equipo de SOC Prime
26 Oct 2026

Ejecución Sospechosa de Chmod Apuntando a Directorios Sospechosos (vía cmdline)

Equipo de SOC Prime
26 Oct 2026

Descargas a Carpetas Sospechosas (vía cmdline)

Equipo de SOC Prime
26 Oct 2026

IOCs (HashSha256) a detectar: Más allá de testmetest: Camuflaje de Addon Nativo y 42 Repositorios de GitHub Armados Revelan un Publicador de npm Oculto

Reglas de IA de SOC Prime
26 Oct 2026

IOCs (SourceIP) a detectar: Más allá de testmetest: Camuflaje de Addon Nativo y 42 Repositorios de GitHub Armados Revelan un Publicador de npm Oculto

Reglas de IA de SOC Prime
26 Oct 2026

IOCs (DestinationIP) a detectar: Más allá de testmetest: Camuflaje de Addon Nativo y 42 Repositorios de GitHub Armados Revelan un Publicador de npm Oculto

Reglas de IA de SOC Prime
26 Oct 2026

Chequeo de Presencia de Depurador a través de IsDebuggerPresent o CheckRemoteDebuggerPresent [Registro de Eventos de Seguridad de Windows]

Reglas de IA de SOC Prime
26 Oct 2026

Creación de Proceso Sospechoso y Ejecución Temporal de Archivo JS [Creación de Proceso de Windows]

Reglas de IA de SOC Prime
26 Oct 2026

Detección de Ejecución de Addon Nativo de Node.js [Carga de Imagen de Windows]

Reglas de IA de SOC Prime
26 Oct 2026

Detección de Ejecución de Procesos Maliciosos de Addon de Node [Creación de Proceso de Linux]

Reglas de IA de SOC Prime
26 Oct 2026

Lecturas Sospechosas de Mapa de Memoria de Addon Nativo [Google Cloud Platform]

Reglas de IA de SOC Prime
26 Oct 2026

Ejecución de Simulación

  • Narrativa y Comandos del Ataque: El adversario ha logrado insertar una carga útil maliciosa de JavaScript en el directorio temporal del usuario, nombrándola .nc para potencialmente imitar un archivo relacionado con Netcat o simplemente para ofuscar su propósito. Para ejecutarlo, el adversario utiliza un cargador que invoca la CreateProcessA API de Win32 para lanzar el Host de Scripts de Windows (wscript.exe) con el archivo temporal como argumento. Esta secuencia específica—usando la versión ANSI de la API de creación de procesos para ejecutar un script desde %TEMP%—es el patrón exacto que la regla de detección está diseñada para interceptar.

  • Script de Prueba de Regresión:

     # Script de Simulación: Activación de 'Creación de Proceso Sospechoso y Ejecución Temporal de Archivo JS'
    
      # 1. Definir rutas
      $tempPath = $env:TEMP
      $targetFile = Join-Path $tempPath ".nc"
    
      # 2. Crear un archivo JS malicioso ficticio en el directorio %TEMP%
      # Nota: Lo nombramos .nc según el requisito de lógica de detección
      "WScript.Echo('Actividad Maliciosa Simulada');" | Out-File -FilePath $targetFile -Encoding ascii
    
      Write-Host "[+] Archivo malicioso creado en: $targetFile"
    
      # 3. Simular la ejecución a través de wscript.exe
      # En un escenario real, el 'CallTrace' que contiene 'CreateProcessA' es generado 
      # por la llamada de API subyacente de Windows utilizada por el cargador de malware.
      # Ejecutar esto a través de PowerShell/CMD generará el evento de creación de proceso.
      Write-Host "[+] Ejecutando script para activar detección..."
      Start-Process "wscript.exe" -ArgumentList "`"$targetFile`""
    
      Write-Host "[+] Comando de simulación enviado."
  • Comandos de Limpieza:

     # Script de Limpieza: Eliminar artefactos de simulación
      $tempPath = $env:TEMP
      $targetFile = Join-Path $tempPath ".nc"
    
      if (Test-Path $targetFile) {
          Remove-Item -Path $targetFile -Force
          Write-Host "[+] Limpieza exitosa: $targetFile eliminado."
      } else {
          Write-Host "[!] Limpieza fallida: Archivo no encontrado."
      }