Un paquete npm con 2 millones de descargas semanales esconde su malware en el código que todos ejecutan
Checkmarx detectó una campaña activa en npm que evade los controles de instalación de GitHub escondiendo el cargador dentro de una función de uso cotidiano.
La cadena de suministro de software abrió un frente nuevo. Investigadores de Checkmarx documentaron una campaña activa en el registro npm donde el código malicioso vive en el comportamiento normal de la librería, lejos de los scripts de instalación que vigilan las defensas actuales.
El paquete central se llama indexed-btree y suplanta a la librería legítima sorted-btree. Acumuló dos millones de descargas semanales antes de ser detectado.
Por qué esquiva las defensas nuevas
En junio de 2026 GitHub anunció un paquete de medidas para frenar los ataques de cadena de suministro que golpean al ecosistema de código abierto desde finales de 2025. La medida central bloquea los scripts de ciclo de vida —preinstall, install, postinstall— salvo aprobación explícita. Otras impiden que npm descargue dependencias desde repositorios Git o URL remotas sin permiso.
indexed-btree elude todo eso por una vía simple: prescinde de scripts de instalación. Su cargador está escondido dentro del método BTree.prototype.set(), la función que cualquier desarrollador invoca constantemente. La instalación se ve impecable y no dispara ninguno de los mecanismos de aprobación de npm v12.
«El cargador se esconde dentro del propio método BTree.prototype.set de la librería, que es la función principal que todo usuario llamaría constantemente», explicó Checkmarx. El disparador ejecuta sharedLoad.min.js, la primera etapa ofuscada, diseñada para pasar por debajo de las herramientas de análisis de contaminación y de la mayoría de los escáneres estáticos.
Qué hace una vez activo
El malware recolecta detalles del sistema —arquitectura, nombre de host, CPU, memoria, tiempo de actividad— y los exfiltra por canales de Slack y Telegram codificados en duro. Consulta además un contrato inteligente de Ethereum en la red de pruebas Sepolia para obtener instrucciones de comando y control, y usa intercambio de claves X25519 para derivar una clave AES y descifrar la segunda etapa almacenada en el contrato.
Cuando los operadores deciden cerrar la operación, el malware borra sus archivos y elimina el disparador del código del paquete para limpiar rastros.
Una fachada construida con paciencia
Los atacantes levantaron un repositorio de GitHub con apariencia legítima, poblaron su historial de commits y cuidaron la cuenta del desarrollador. Checkmarx identificó además una billetera con 109 ETH vinculada a la operación, aunque su reporte no atribuye esos fondos a robo de criptomonedas.
Otros nueve paquetes de la misma operación fueron retirados de npm: ordered-kv-index (448,184 descargas), btree-leaderboard (493,685), priority-slot-queue (402,860), btree-range-store (468,092), btree-core (1,951,274), btree-time-index (425,312), btree-lru-cache (372,185), neighbor-key-map (366,019) y sliding-score-window (448,024).
Lectura de Tabuga Intelligence
Los equipos que auditan dependencias solo en el momento de instalación quedan ciegos ante este patrón. El control efectivo pasa a ser el análisis de comportamiento en ejecución, una capacidad que la mayoría de las organizaciones medianas de la región todavía no tiene desplegada.
Quien haya instalado indexed-btree o cualquiera de los nueve paquetes listados debe rotar todos sus secretos y restaurar el entorno de desarrollo desde un respaldo seguro.
Fuente: BleepingComputer, 20 de septiembre de 2026 · Informe de Checkmarx