Una nueva campaña de robo de criptomonedas está dirigida a los desarrolladores que probablemente tienen claves de billetera, credenciales de nube y acceso a producción almacenados en sus dispositivos.
Investigadores de la firma de seguridad Socket informaron a principios de esta semana que identificaron un ataque a la cadena de suministro denominado TrapDoor, que se propagó a través de tres importantes registros de programación de código abierto, con más de 34 paquetes maliciosos y cientos de versiones y artefactos relacionados.
Una conclusión clave es que los atacantes se están volviendo más enfocados. Además del ingenio social, que apunta a individuos que poseen información clave, los ataques a la cadena de suministro están diseñados no para atrapar usuarios minoristas aleatorios, sino a desarrolladores. Estas son las personas que pueden tener archivos de billeteras, claves SSH, tokens de GitHub, credenciales de la nube y acceso a producción en la misma máquina que utilizan para crear herramientas de criptomonedas e inteligencia artificial.
Socket no identificó víctimas ni fondos robados, pero señaló que los paquetes estaban activos en npm, PyPI y Crates.io y contenían cargas útiles que podían robar datos de billeteras, exfiltrar credenciales, probar tokens de AWS y GitHub, y dejar archivos para mantener el acceso activo.
Los paquetes programados en JavaScript, Python y Rust fueron disfrazados como ayudantes para desarrolladores, escáneres de seguridad, herramientas para billeteras, utilidades de Solidity, paquetes de indicaciones para IA y ayudantes de compilación para Sui o Move.
Aburrido por diseño
Los nombres fueron aburridos por diseño. Los paquetes se denominaron "wallet-security-checker," "defi-risk-scanner," "solidity-build-guard," "move-compiler-tools" y "llm-context-compressor," pareciendo ser el tipo de pequeñas utilidades que un desarrollador de criptomonedas o IA podría instalar sin pensarlo mucho.
Sin embargo, una vez instalado, los payloads intentaron extraer mucho más que los datos del paquete.
En los paquetes npm, el malware buscaba en la máquina del desarrollador claves privadas, contraseñas, tokens de GitHub e inicios de sesión en la nube. También probaba algunas credenciales robadas, intentaba acceder a otros sistemas mediante claves SSH y dejaba archivos que podrían mantener la infección activa.
Las claves SSH son archivos de acceso que los desarrolladores utilizan para acceder a servidores, repositorios de código y otras máquinas. Si son robadas, pueden permitir que un atacante se desplace desde una laptop comprometida hacia la infraestructura más amplia de una empresa.
El ataque también utiliza archivos como .cursorrules y claude.md, que permiten a los desarrolladores dar instrucciones específicas del proyecto a las herramientas de codificación de IA. Socket indicó que la campaña insertó instrucciones ocultas utilizando caracteres Unicode de ancho cero, aparentemente intentando que futuras sesiones de asistentes de IA ejecutaran falsos “escaneos de seguridad” que recopilaban y exfiltraban secretos.
Eso convirtió el ataque de un simple ladrón de paquetes en algo más cercano a un malware diseñado para entornos de desarrollo. La instalación del paquete es solo el primer paso, siendo el objetivo real la estación de trabajo, incluyendo monederos, repositorios, datos del navegador, claves en la nube, acceso SSH y cualquier herramienta de codificación de IA que se utilice posteriormente.
Los paquetes de Rust utilizaron scripts maliciosos build.rs para ejecutarse durante la compilación, con el objetivo de desarrolladores de sui y move. Los paquetes de PyPI ejecutaron JavaScript remoto al importarse. Los paquetes en npm emplearon hooks postinstall.
Socket informó que notificó los paquetes a los registros afectados y clasificó los paquetes de la campaña como maliciosos. La empresa también advirtió que el atacante abrió solicitudes de extracción a proyectos de IA y de desarrolladores, intentando añadir archivos .cursorrules y CLAUDE.md a través de los canales normales de contribución de código abierto.