TL; DR
Entre el 1 y el 6 de mayo de 2026, un único editor de npm, alone5511, impulsó ocho paquetes sin dependencias que parecen estar dirigidos Microsoft / Espacios de nombres de paquetes internos al estilo de Azure.
Los paquetes utilizaban nombres como cosmos-explorer, ms.analytics-web, icons.generated, latency-tracking-internal, carbonite-internal, y carboniteappVarias versiones utilizaron valores semver altos, como 99.9.0 y 99.9.13, que es una táctica común de confusión de dependencias diseñada para superar en prioridad a los paquetes internos privados.
Los ocho paquetes hermanos ya habían sido retirados de npm por el editor entre el 1 y el 6 de mayo de 2026. Los metadatos del registro directo confirmaron que los archivos tar ahora devuelven un error HTTP 404 desde la CDN de npm.
Sin embargo, el clúster sigue siendo importante.
La carga útil en las muestras canónicas, carbonite-internal:99.9.0 y carboniteapp:99.9.0, se ejecuta en el momento de la instalación a través de un preinstall gancho. Recopila datos de huella digital del host, obtiene la IP pública de la máquina desde api.ipify.org, crea un falso “INFORME DE INTELIGENCIA DE NIVEL PROFESIONAL”, y marca al anfitrión como RCE VERIFIEDy envía el informe a un bot de Telegram a través de la API de Telegram Bot.
Alerta temprana de malware (MEW) de Xygeni El sistema clasificó las muestras canónicas como probablemente maliciosas con una puntuación superior a 91/100.
Estamos investigando esto como una campaña de confusión de dependencias de nombres internos de Microsoft, con identificación del host en el momento de la instalación y exfiltración de balizas de Telegram.
El clúster: ocho paquetes, un editor
La cuenta del editor alone5511 Se utilizó la dirección de correo electrónico:
La cuenta no tenía correo electrónico verificado, no SCM verificación y una puntuación de reputación de npm de 2.
Una identidad de GitHub referenciada, alonebeast002/beastcrypt, también apareció en el contexto del clúster.
La editorial publicó ocho paquetes relacionados en un lapso de seis días. Todos los paquetes no tenían dependencias y seguían el mismo patrón general: paquete pequeño, script de instalación, identificación del host y envío de señales por Telegram.
| # | PREMIUM | Versión maliciosa | Creado, UTC | Sin publicar, UTC | Carga útil confirmada | Instalar gancho |
|---|---|---|---|---|---|---|
| 1 | explorador del cosmos | 1.1.3 | 2026-05-01T18:26Z | 2026-05-01T19:01Z | Inferido, mismo editor/clúster | preinstalación, presumida |
| 2 | SignalSDK-web | de 1.0.0 | 2026-05-04T13:57Z | 2026-05-04T18:51Z | Inferido | preinstalación, presumida |
| 3 | ms.analytics-web | de 99.0.0 | 2026-05-04T18:47Z | 2026-05-05T10:07Z | Inferido | preinstalación, presumida |
| 4 | iconos.generados | 99.9.13 | 2026-05-05T10:02Z | 2026-05-05T12:57Z | Inferido | preinstalación, presumida |
| 5 | seguimiento de latencia | 99.9.0 | 2026-05-05T11:57Z | 2026-05-05T12:57Z | Inferido | preinstalación, presumida |
| 6 | seguimiento de latencia interno | Versiones eliminadas del registro | 2026-05-06T06:02Z | 2026-05-06T08:35Z | Inferido | preinstalación, presumida |
| 7 | aplicación carbonita | 99.9.0 | 2026-05-06T05:49Z | 2026-05-06T08:35Z | Sí, flujo de código de escáner completo | preinstalación: node index.js |
| 8 | carbonita interna | 99.9.0 | 2026-05-06T06:14Z | 2026-05-06T08:36Z | Sí, flujo de código de escáner completo | preinstalación: node index.js |
Tuplas de versión maliciosas totales en todo el clúster: 9+.
Algunos registros de paquetes hermanos sufrieron la eliminación de versiones después de su despublicación, lo que limita la reconstrucción exacta a partir únicamente de los datos del registro público.
Por qué importan los nombres
Los nombres de los paquetes son la señal más fuerte.
Parecen paquetes internos de SDK, telemetría, generación de iconos, explorador o seguimiento de latencia:
Esto no es una denominación aleatoria. Parece calibrado para confusión de dependencia.
Varios paquetes posteriores utilizaron números de versión altos:
Esto es importante porque los ataques de confusión de dependencias suelen basarse en que los paquetes públicos tengan versiones más altas que los paquetes internos del registro privado. Si un sistema de compilación está mal configurado, el gestor de paquetes puede elegir la versión pública de npm en lugar de la interna prevista.
La editorial también parece intensificar su postura con el tiempo.
Los primeros paquetes utilizaban versiones de aspecto normal, como por ejemplo: 1.1.3 y 1.0.0. Los paquetes posteriores se trasladaron a 99.x.x y 99.9.xEse cambio es coherente con la hipótesis de que un actor esté ajustando la campaña para el comportamiento de resolución interna de paquetes.
¿Qué sucede durante la instalación?
Las muestras canónicas, carbonite-internal:99.9.0 y carboniteapp:99.9.0, declarar un preinstall gancho:
Eso significa que la carga útil se ejecuta antes de que npm termine de instalar las dependencias.
Este es el punto de acceso más temprano posible durante la instalación. El desarrollador no necesita importar el paquete. La compilación no necesita ejecutar código de la aplicación. La instalación en sí es suficiente.
La carga útil es pequeña, de unos 2.4 KB, y no tiene ninguna función más allá de la de emitir señales.
Comportamiento de la carga útil
El index.js El archivo realiza cuatro acciones principales.
Primero, llama api.ipify.org Para obtener la dirección IP pública del host:
En segundo lugar, recopila datos básicos de identificación del host utilizando las API del sistema operativo de Node.js:
En tercer lugar, formatea los datos recopilados en un informe de varias líneas con un encabezado literal:
El informe finaliza con:
En cuarto lugar, envía el informe a Telegram a través de un sendTelegram(report) función, utilizando el punto final de la API de Telegram Bot:
El token exacto del bot de Telegram se conserva dentro de los archivos tar no publicados y debería poder recuperarse del almacenamiento interno de npm.
Por qué es importante el distintivo “RCE VERIFIED”
El literal RCE VERIFIED El marcador es significativo desde el punto de vista operativo.
La carga útil no instala una puerta trasera. No persiste en el sistema. No roba directamente las credenciales de la nube. En cambio, confirma que se produjo la ejecución de código durante la instalación del paquete.
Eso es suficiente para una campaña de prueba de ejecución basada en la confusión de dependencias.
Si el atacante recibe un mensaje de Telegram desde un entorno objetivo, sabrá que el paquete npm público se resolvió y ejecutó dentro de un host real, un ejecutor de CI, una estación de trabajo de desarrollador o un entorno de compilación.
En otras palabras, el malware no solo recopila metadatos del host, sino que también valida si la resolución de paquetes del objetivo es vulnerable.
Clasificación MEW de Xygeni
Xygeni MEW clasificó las muestras canónicas como probablemente malicioso, con una puntuación superior a 91/100.
Las detecciones incluyeron:
| Gravedad | Detección | Significado |
|---|---|---|
| Critical | filtración de datos sensibles | req.write(data) envía el informe de huella digital del host a una solicitud POST saliente de Telegram. |
| Alto | scripts de instalación maliciosos | preinstalación: el archivo index.js de Node.js activa la baliza en el momento de la instalación. |
| Bajo | solicitud_sospechosa | Descubrimiento de direcciones IP públicas a través de api.ipify.org |
| Bajo | solicitud_sospechosa | Punto final de salida de la API del bot de Telegram |
| Bajo | paquete trivial | El paquete no tiene ningún propósito significativo más allá de servir de guía. |
| info | enumeración_de_datos_sensibles | Se enumeran los detalles del host, como el tiempo de actividad, la información del usuario y el nombre del host. |
Ambos carbonite-internal:99.9.0 y carboniteapp:99.9.0 Tenían cargas útiles idénticas, incluyendo el mismo ID de flujo de código y scripts de instalación equivalentes en bytes.
El índice de proyectos de editores de MEW marcó los ocho paquetes como parte del mismo grupo de editor/carga útil.
Por qué importa el patrón de autodespublicación
Los ocho paquetes de libros fueron retirados del mercado por la editorial a los pocos minutos o incluso horas de su publicación.
Ese comportamiento es importante.
Los responsables legítimos a veces retiran paquetes de la publicación, pero en este caso parece que se trata de una limpieza por parte de un atacante. Los paquetes aparecieron, ejecutaron su código malicioso de instalación si el objetivo los resolvía y luego desaparecieron del acceso público al registro.
Eso crea dos problemas para los defensores.
En primer lugar, los metadatos públicos de npm quedan incompletos después de la eliminación de la publicación. Algunos registros de versión pueden eliminarse o ser más difíciles de reconstruir.
En segundo lugar, los defensores que se basan en el estado actual del registro pueden pasar por alto paquetes que estaban presentes durante el período de exposición pero que ya no se pueden instalar.
Por ese motivo, npm debería conservar internamente los archivos tar no publicados para fines forenses. El bot de Telegram Los tokens que se encuentren dentro de los archivos comprimidos pueden ayudar a enumerar el canal de recepción y reconstruir las posibles víctimas.
Indicadores de compromiso y detección
Editor y cuenta
| Campo | Valor |
|---|---|
| nombre de usuario de npm | alone5511 |
| Correo electrónico del editor de npm | raistargaming703@gmail.com |
| reputación de npm | 2 |
| Correo Electrónico Verificado | No |
| SCM verificadas | No |
| Identidad de GitHub referenciada | alonebeast002/beastcrypt |
Nombres de paquetes afectados
Patrones de versiones sospechosas
Estas versiones de alto rango son especialmente relevantes en las investigaciones de confusión de dependencias porque pueden tener mayor prioridad que las versiones de paquetes privados.
Puntos finales de red
| Tipo | Valor |
|---|---|
| Sondeo de IP pública | https://api.ipify.org |
| fregadero de exfiltración | https://api.telegram.org/bot<token>/sendMessage |
| Método de exfiltración | API POST de Telegram Bot |
Marcadores de carga útil
Busque estas cadenas en los scripts de instalación:
También marque este patrón de manifiesto:
Especialmente cuando se combina con:
- Cero dependencias
- Tamaño de paquete pequeño
- Nombre del paquete de aspecto interno
- Versión semver alta
- API de identificación de host
- Tráfico de la API del bot de Telegram
API de identificación de host
La carga útil canónica utiliza:
También se dirige a:
para capturar la IP pública del host.
Notas de detección
Varias reglas pueden afectar esta campaña y sus variantes.
Primero, supervise los scripts de instalación de npm que se comunican con Telegram:
Un script de instalación de paquetes casi nunca debería enviar una solicitud POST a Telegram. Considere esto como una práctica hostil a menos que exista una excepción muy clara y revisada.
Segundo, bandera preinstall scripts en paquetes diminutos sin dependencias con nombres que parecen internos.
La combinación de un paquete pequeño, una versión semver alta y un nombre con estilo de espacio de nombres interno es una clara señal de confusión de dependencias.
En tercer lugar, hay que estar alerta ante nombres de paquetes que parezcan módulos de ingeniería privados publicados por cuentas públicas de npm con baja reputación.
Algunos ejemplos de este grupo son:
En cuarto lugar, busque referencias a archivos de bloqueo para los ocho nombres de paquetes en los sistemas de integración continua y las estaciones de trabajo de los desarrolladores.
Buscar:
Cualquier coincidencia debería desencadenar una revisión de posibles conflictos de dependencias.
Acciones sugeridas para el registro
Este grupo de datos ya no se había publicado en el momento de elaborar el informe. Sin embargo, su publicación no elimina el riesgo.
Acciones recomendadas en npm:
- Confirme si las eliminaciones de publicaciones fueron una limpieza iniciada por el atacante o una acción legítima del mantenedor.
- Suspender o bloquear la cuenta del editor.
alone5511. - Agregue el editor, la dirección de correo electrónico, los nombres de los paquetes y los marcadores de carga útil a las listas negras de abuso y de la cadena de suministro.
- Conserve los archivos comprimidos no publicados en un almacén interno para su análisis forense.
- Extraiga el token del bot de Telegram de los archivos tar guardados.
- Colabore con Telegram, siempre que sea posible, para identificar el canal receptor y reconstruir la telemetría de la posible víctima.
Lista de verificación de respuesta ante un compromiso
Si alguno de los paquetes afectados apareció en sus archivos de bloqueo, registros de compilación, caché de paquetes o historial de instalación de CI durante el período de exposición, considérelo como un evento de ejecución de confusión de dependencias.
Respuesta recomendada:
- Identifique dónde se instaló el paquete: estación de trabajo local, ejecutor de CI, agente de compilación o imagen de contenedor.
- Conservar los archivos de bloqueo, la caché de npm, los registros de compilación, el historial de la consola y la salida del gestor de paquetes.
- Verifique los registros de red salientes para
api.telegram.orgyapi.ipify.orgdurante el período de instalación. - Compruebe si la instalación se ejecutó en un entorno con variables confidenciales, credenciales o acceso a la red interna.
- Rotar los tokens expuestos al entorno de instalación si el host era un ejecutor de CI privilegiado o una estación de trabajo de desarrollador.
- Configuración de resolución de paquetes de auditoría para evitar confusiones entre registros públicos y privados.
- Implementar paquetes privados con ámbito restringido y fijación de registro.
- Bloquear los paquetes públicos no aprobados que coincidan con los patrones de nomenclatura internos.
- Agregar guardrails para scripts de instalación, especialmente
preinstall,install, ypostinstall.
Lo que los defensores deben tener en cuenta
Esta campaña no es técnicamente compleja. Y precisamente por eso es importante.
La carga útil es pequeña, directa y fácil de ejecutar. El atacante no necesita persistencia ni malware avanzado. Solo necesita una ruta de resolución de paquetes mal configurada.
El riesgo real es la confusión en las dependencias.
Un paquete con un nombre de aspecto interno familiar, un número de versión alto y un preinstall El gancho puede convertir un normal npm install en un faro desde el interior de tu entorno.
Para DevSecOps Equipos, la lección es clara: los nombres de los paquetes internos son información confidencial. Trátenlos como una superficie de ataque.
Se ha informado a npm para la aplicación de las normas a nivel de cuenta, la inclusión en listas negras y la preservación de los archivos tar no publicados.





