Paquetes npm maliciosos se esconden en el runtime y esquivan el bloqueo de scripts
Una campaña que suplanta a la librería sorted-btree mete el cargador dentro del método BTree.prototype.set(), que se ejecuta al usar el paquete, no al instalarlo.

Checkmarx ha destapado una campaña de paquetes npm que no toca los scripts de instalación. El principal, indexed-btree, se hace pasar por la librería legítima sorted-btree y acumula dos millones de descargas semanales. En vez de dispararse desde preinstall, install o postinstall, el malware vive en el propio código de la librería: concretamente en el método BTree.prototype.set(), que se ejecuta en tiempo de ejecución cuando la aplicación llama al paquete con un valor de clave concreto.
El detalle importa porque en junio de 2026 GitHub anunció una batería de medidas para cortar los ataques a la cadena de suministro que venían sacudiendo el ecosistema open source desde finales de 2025. La más visible: bloquear los scripts de ciclo de vida de las dependencias salvo aprobación explícita. Otras impiden que npm traiga dependencias automáticamente desde repositorios Git o URLs remotas sin permiso.
Instalación limpia, ejecución sucia
indexed-btree esquiva todo eso simplemente no usando scripts. La instalación no dispara ninguna de las aprobaciones de npm v12, y el cargador queda enterrado en una función que cualquier usuario de la librería llama continuamente. Según Checkmarx, esa llamada activa sharedLoad.min.js, la primera etapa ofuscada del malware, y es una forma bien construida de colarse por delante de las herramientas de análisis de taint y de la mayoría de escáneres estáticos. El análisis de Checkmarx incluye las capturas del disparador.
Una vez en marcha, el payload recopila arquitectura del sistema, hostname, CPU, memoria y uptime, y lo exfiltra por canales de Slack y Telegram embebidos en el código. Para recibir órdenes consulta un contrato inteligente en la red de pruebas Sepolia de Ethereum; deriva una clave AES mediante intercambio X25519 y descifra con ella una segunda etapa almacenada en el contrato. Si los operadores deciden cortar, el malware borra sus ficheros y elimina el disparador del código del paquete para no dejar rastro.
La operación está cuidada por fuera. Los atacantes montaron un repositorio de GitHub con apariencia legítima, rellenaron el historial de commits y curaron la cuenta del desarrollador. Checkmarx atribuye el conjunto a una cartera con 109 ETH, aunque el informe no afirma que esos fondos provengan de robo de criptomonedas.
Junto a indexed-btree, los investigadores ligaron otros nueve paquetes a la misma operación, ya 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).
La recomendación es no fiarse solo del escaneo en el momento de instalar y añadir análisis de comportamiento en ejecución. Quien tenga cualquiera de estos paquetes en su árbol de dependencias debería rotar todos los secretos y restaurar el entorno de desarrollo desde una copia segura.
