Un gusano basado en Rust llamado IronWorm comprometió al menos 36 paquetes npm en el ecosistema de Arweave, robando credenciales de desarrolladores y utilizándolas para autopropagarse a través de repositorios de GitHub antes de desaparecer.
JFrog Security Research identificó la campaña mientras investigaba actividad sospechosa vinculada a una cuenta de desarrollador dentro del ecosistema de código abierto de Arweave y WeaveDB. El malware, escrito en Rust, extrae claves API, credenciales en la nube, claves SSH y tokens de publicación npm de las máquinas de desarrolladores infectadas, y luego reutiliza esas credenciales para insertar código malicioso en otros repositorios.
"La comparación más cercana es la campaña Shai-Hulud", dijo el equipo de investigación de JFrog en un informe publicado el miércoles. "El malware que revisamos comparte mucho con ella: la misma idea de comprometer desarrolladores, robar credenciales y utilizar flujos de trabajo de confianza en la cadena de suministro de software para propagarse aún más". Pero IronWorm lleva el concepto "al siguiente nivel", agregaron los investigadores.
El atacante realizó al menos 57 cambios maliciosos de código en repositorios pertenecientes a nueve organizaciones, retrodatando los commits para ocultar la línea de tiempo del compromiso. Algunas contribuciones fueron atribuidas al modelo de IA Claude de Anthropic utilizando el correo electrónico "claude@users.noreply.github.com" a pesar de tener marcas de tiempo de hasta 13 años de antigüedad. Los registros de GitHub Action revelaron que los commits fueron empujados por el usuario comprometido ocrybit, dijo JFrog. OX Security, que también rastreó la campaña, señaló que los paquetes afectados tenían más de 32,000 descargas mensuales combinadas antes de que se mitigara la amenaza.
Un implante personalizado sin precedentes conocidos
JFrog dijo que la carga útil de IronWorm no coincidía con ningún infostealer, rootkit eBPF o marco de comando y control conocido en su base de datos. El binario contiene miles de funciones con cadenas cifradas que solo podían recuperarse en tiempo de ejecución, cada una utilizando parámetros de descifrado únicos en lugar de una única clave fija.
El malware ataca 86 variables de entorno en proveedores de nube, servicios de IA y plataformas de criptomonedas. Extrae credenciales de Amazon Web Services, Docker, Kubernetes, npm y configuraciones de bóveda, así como claves API para servicios de IA que incluyen Anthropic, OpenAI, Google Gemini, Cohere, Mistral, Groq, Perplexity y xAI. También ataca la billetera de criptomonedas Exodus de escritorio — aunque el atacante codificó la frase de recuperación BIP-39 de su propia billetera para evitar que el malware la tocara, un detalle que JFrog rastreó hasta una billetera de prueba casi vacía que contenía unos pocos centavos de residuo.
IronWorm utiliza una carga útil eBPF que funciona como un rootkit del kernel de Linux para ocultar procesos maliciosos, archivos y actividad de red de los sistemas de seguridad. En sistemas donde el bloqueo del kernel está habilitado, los trucos de ocultación de procesos fallan y la actividad se vuelve visible nuevamente, señaló JFrog. El malware se comunica con su operador a través de Tor y acepta comandos para cargar secretos, descargar archivos y ejecutar shells remotos.
Autopropagación a través de publicación confiable
La cadena de ataque comenzó con una cuenta npm comprometida llamada "asteroiddao", que publicó versiones de paquetes que contenían un binario ELF de Rust ejecutado mediante un hook de preinstalación. En entornos CI, el malware abusó del flujo de Publicación Confiable de npm — obteniendo un token OIDC del entorno CI del desarrollador para enviar versiones envenenadas al registro sin necesidad de credenciales npm.
La carga útil maliciosa también reemplazó los flujos de trabajo existentes de GitHub Actions por una versión capaz de extraer secretos, escribirlos en un archivo de apariencia inofensiva y subirlo como un artefacto de compilación — eliminando la necesidad de un servidor C2 externo para la exfiltración de datos. Luego, el atacante eliminó silenciosamente los paquetes maliciosos de GitHub dentro de las 24 horas posteriores a su publicación, dijo JFrog.
La campaña se hace eco del gusano Shai-Hulud implementado por el grupo de ciberdelincuencia TeamPCP, que previamente comprometió la herramienta de escaneo de seguridad Trivy y otros proyectos para implementar infostealers dirigidos a secretos de CI/CD. Pero IronWorm está escrito en Rust en lugar de JavaScript, lo que lo hace significativamente más difícil de realizar ingeniería inversa. JFrog dijo que "no puede saber con certeza" si IronWorm está directamente relacionado con TeamPCP o es un imitador.
El ataque subraya cómo los entornos de desarrolladores se han convertido en objetivos principales para el compromiso de la cadena de suministro. Al comprometer a un solo desarrollador, los actores de amenazas pueden introducir código malicioso en proyectos de software confiables y llegar a numerosas organizaciones downstream. Las organizaciones que puedan haber sido afectadas deberían auditar los repositorios en busca de commits de la cuenta ocrybit, rotar todas las claves y secretos disponibles para la cuenta comprometida, y verificar los paquetes npm publicados en busca de versiones maliciosas, dijo JFrog.
Este artículo es solo para fines informativos y no constituye asesoramiento de inversión.