El malware no requería instalación; se activaba con la simple ejecución del código.

El mismo software malicioso apareció en ambos lados de la frontera del lenguaje. El 23 de septiembre en npm y PyPI surgieron lanzamientos infectados de los paquetes MemTensor, dentro de los cuales se ocultaba el gusano multiplataforma en Go llamado sckit. El equipo Aikido detectó la campaña y la llamó supplychain.local por el nombre del módulo en el binario. Antes del ataque ambos paquetes habían publicado versiones legítimas durante largo tiempo.
En npm resultó afectado el complemento @memtensor/memos-cloud-openclaw-plugin en las versiones 0.1.21, 0.1.23 y 0.1.25, y en PyPI el código malicioso llegó a MemoryOS 2.0.34. Entre los lanzamientos npm infectados se publicaron las versiones limpias 0.1.22 y 0.1.24. Al momento del hallazgo, las compilaciones maliciosas eran las versiones más recientes, por lo que el comando de instalación estándar pudo descargarlas sin seleccionar explícitamente el número.
La característica principal del ataque residía en el momento de la ejecución. sckit no dependía de preinstall ni de postinstall y no se activaba durante la instalación. En el complemento de npm el binario se iniciaba al ejecutar OpenClaw y al acceder a la memoria, y en MemoryOS la ejecución ocurría al importar la biblioteca de Python. Por eso el parámetro --ignore-scripts no bloqueaba el código malicioso, y la comprobación de ciertos hooks de instalación podía pasarlo por alto.
Tras el arranque, sckit examinaba el directorio personal y el entorno de procesos en busca de secretos. Entre los objetivos estaban los tokens de npm, PyPI, GitHub y GitLab, las claves de AWS y SSH, así como las credenciales de HashiCorp Vault, Hugging Face, Slack, Stripe y SendGrid. El acceso a esos datos permitía al atacante pasar de una máquina infectada a repositorios, paquetes e infraestructura en la nube.
SafeDep reconstruyó la cadena a través de los GitHub Actions del propio MemTensor. Al flujo de trabajo se añadía código que interceptaba NPM_TOKEN y PYPI_API_TOKEN justo antes de publicar la versión. Para npm usaron ramas de corta vida, que creaban y eliminaban varias veces, y para PyPI prepararon commits no firmados fuera de la rama principal. Aún no está confirmado cómo obtuvo el atacante permisos de escritura.
Las claves obtenidas convertían la máquina infectada o el entorno CI en un nuevo punto de propagación. Dentro de sckit se encontraron comandos para npm publish, npm version patch y carga a PyPI mediante twine, así como una plantilla de GitHub Actions capaz de ejecutar el implante tras cada push. El malware podía publicar nuevas versiones con las credenciales robadas y trasladar la infección entre ambos ecosistemas.
El mecanismo recuerda ataques anteriores contra las cadenas de suministro de npm, donde los tokens robados de desarrolladores se usaban para publicar nuevas versiones infectadas. En verano Shai-Hulud ya se propagó a través de cientos de paquetes npm y robó secretos del entorno de los desarrolladores. supplychain.local amplió el enfoque a PyPI y preparó binarios para Windows, Linux y macOS en arquitecturas x64 y ARM64.
La magnitud confirmada por ahora está limitada a dos paquetes MemTensor. Aikido no encontró repositorios públicos donde sckit hubiera podido inyectar el workflow de GitHub Actions preparado o cargadores auxiliares en JavaScript y Python. La capacidad de autorreplicación está presente en el código, pero no había pruebas de una infección en cadena masiva al momento del análisis. Tampoco se han confirmado nuevos paquetes infectados.
A fecha del 28 de septiembre, los lanzamientos npm infectados 0.1.21, 0.1.23 y 0.1.25 han sido eliminados, y la etiqueta latest apunta a la versión limpia 0.1.24. PyPI vuelve a mostrar MemoryOS 2.0.33 como la última versión disponible. SafeDep recomienda a los usuarios de compilaciones infectadas desinstalar el paquete, terminar los procesos sckit, revisar los repositorios en busca de workflows inesperados y cambiar todas las claves y tokens accesibles desde la máquina infectada.