CiberBlog

36 paquetes npm maliciosos con 8 payloads distintos atacan infraestructura de criptomonedas vía Strapi

npm maliciosos Strapi
Los paquetes maliciosos se ejecutaban automáticamente tras npm install sin interacción del usuario

La campaña distribuyó ocho variantes de payloads en 13 horas mediante cuentas falsas de npm. Atacantes explotaron Redis, PostgreSQL y Docker para robar wallets, claves privadas y secretos de Kubernetes.

Investigadores de SafeDep descubrieron el 3 de abril una campaña coordinada de treinta y seis paquetes maliciosos en el registro de npm, todos disfrazados como plugins legítimos del popular CMS Strapi. Los paquetes fueron publicados desde cuatro cuentas falsas, umarbek1233, kekylf12, tikeqemif26 y umar_bektembiev1 durante una ventana de trece horas, revelando una sesión de desarrollo de ataque en tiempo real contra un objetivo específico: una plataforma de pagos con criptomonedas identificada como Guardarian.

Cada paquete seguía una estructura idéntica de tres archivos y usaba la versión 3.6.8 para parecer un plugin maduro de la comunidad Strapi. La convención de nombres imitaba patrones reales:

  • elementostrapi-plugin-cron
  • strapi-plugin-database
  • strapi-plugin-events
  • strapi-plugin-seed

entre otros. La trampa residía en el script postinstall.js, que ejecutaba automáticamente el payload malicioso tras un simple npm install, sin requerir ninguna interacción adicional del desarrollador.

El análisis de SafeDep documentó ocho variantes distintas de payloads desplegados en secuencia cronológica. Los primeros paquetes, publicados alrededor de las 02:00 UTC, explotaban instancias Redis accesibles localmente para inyección de crontab, escritura de webshells PHP y reverse shells en Node.js. Una variante posterior combinaba la explotación de Redis con intentos de escape de contenedores Docker, descubriendo rutas overlay del sistema de archivos y escribiendo payloads directamente en el host.

El payload más sofisticado, strapi-plugin-seed, conectaba directamente a PostgreSQL usando credenciales hardcodeadas user_strapi / 1QKtYPp18UsyU2ZwInVM y enumeraba todas las bases de datos del servidor. El código buscaba específicamente tablas con patrones como wallet, transaction, deposit y withdraw y probaba conexiones a seis bases de datos nombradas: guardarian, guardarian_payments, payments, exchange y custody. Esto confirma que el atacante ya poseía conocimiento previo de la infraestructura objetivo.

Las últimas dos variantes representaron la evolución más avanzada de la campaña. La séptima versión, publicada como strapi-plugin-api v3.6.8, solo se activaba si el hostname del sistema coincidía exactamente con prod-strapi, confirmando que el atacante había identificado previamente el entorno de producción. Una vez disparada, escribía un agente C2 oculto en /tmp/.node_gc.js, lo lanzaba como proceso detached y añadía una entrada crontab para persistencia tras reinicios.

La octava variante eliminó cualquier rastro en disco, el agente C2 completo se ejecutaba como string inline en un proceso node -e,dejando sin huella forense en el sistema de archivos. El código incluía un comentario referenciando un pipeline Jenkins CI, revelando conocimiento profundo de la infraestructura de compilación de la víctima. Todo lo robado archivos .env, variables de entorno, claves privadas, dumps de Redis, secretos de Docker y tokens de cuentas de servicio de Kubernetes se enviaba en texto plano por HTTP al servidor C2 en 144.31.107.231.

Las organizaciones que hayan instalado alguno de estos paquetes deben asumir compromiso total y rotar inmediatamente todas las credenciales, contraseñas de base de datos, claves API, secretos JWT y claves privadas. Se recomienda eliminar /tmp/.node_gc.js, auditar entradas crontab, buscar webshells en directorios de uploads y revocar cualquier token de servicio de Kubernetes expuesto.

FUENTE ORIGINAL

SafeDep
ST

CURADO POR

Santiago Torres

Twitter / XLinkedInWhatsApp