42 Repositorios de GitHub Utilizados como Armas Revelan un Publicador de npm Oculto
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)
Procesos Hijos de NodeJS Sospechosos [Windows] (vía cmdline)
Posible Descarga de Archivo de Github Iniciada por Proceso Inusual (vía network_connection)
Uso de Nohup (vía cmdline)
Procesos Hijos de NodeJS Sospechosos [Linux] (vía cmdline)
Ejecución Sospechosa de Chmod Apuntando a Directorios Sospechosos (vía cmdline)
Descargas a Carpetas Sospechosas (vía cmdline)
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
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
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
Chequeo de Presencia de Depurador a través de IsDebuggerPresent o CheckRemoteDebuggerPresent [Registro de Eventos de Seguridad de Windows]
Creación de Proceso Sospechoso y Ejecución Temporal de Archivo JS [Creación de Proceso de Windows]
Detección de Ejecución de Addon Nativo de Node.js [Carga de Imagen de Windows]
Detección de Ejecución de Procesos Maliciosos de Addon de Node [Creación de Proceso de Linux]
Lecturas Sospechosas de Mapa de Memoria de Addon Nativo [Google Cloud Platform]
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
.ncpara potencialmente imitar un archivo relacionado con Netcat o simplemente para ofuscar su propósito. Para ejecutarlo, el adversario utiliza un cargador que invoca laCreateProcessAAPI 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." }