Lo que hace a TrapDoor particularmente peligroso no es solo su alcance a través de múltiples ecosistemas, sino una novedosa técnica de evasión que convierte a los propios asistentes de codificación con IA en un arma. El malware inyecta instrucciones ocultas dentro de los archivos .cursorrules y CLAUDE.md utilizando caracteres Unicode de ancho cero —completamente invisibles para un revisor humano pero legibles por herramientas como Cursor y Claude Code, que pueden ser engañadas para extraer secretos bajo la apariencia de análisis de seguridad rutinarios .
La campaña TrapDoor operó simultáneamente en los tres principales registros de paquetes de código abierto, utilizando mecanismos técnicos distintos adaptados a cada plataforma .
La mayor parte de los paquetes maliciosos apareció en npm, donde usaban hooks de postinstall para ejecutar automáticamente un recolector de credenciales tras la instalación. La carga útil principal, un script de aproximadamente 1.149 líneas llamado trap-core.js, escanea sistemáticamente el entorno de la víctima en busca de secretos y los extrae a infraestructura controlada por el atacante .
Los paquetes de Python distribuidos a través de PyPI estaban diseñados para buscar y ejecutar cargas útiles remotas de JavaScript en el momento de la importación. Una vez en ejecución, desplegaban la misma lógica de robo de credenciales que las variantes de npm .
En el principal registro del ecosistema Rust, los paquetes maliciosos abusaban de los scripts build.rs para ejecutar el código de extracción de credenciales durante el proceso de compilación, asegurando su ejecución incluso antes de que se utilizara la funcionalidad prevista del paquete .
Los paquetes se disfrazaban de herramientas legítimas para desarrolladores con nombres como token-usage-tracker, prompt-engineering-toolkit y eth-wallet-security-auditor, haciéndolos parecer útiles para las comunidades de desarrollo a las que apuntaban .
La carga útil de TrapDoor rastrea sistemáticamente una amplia gama de secretos de alto valor. Según el análisis de Socket, el malware recolecta archivos de billeteras y almacenes de claves (keystores), claves privadas SSH, tokens de acceso personal de GitHub, credenciales de AWS, variables de entorno que contienen claves API, credenciales almacenadas en navegadores y otros secretos del equipo comprometido .
Los objetivos específicos de billeteras mencionados explícitamente en los informes incluyen los datos de las extensiones de navegador de MetaMask y Phantom . El robo de tokens de GitHub es particularmente preocupante porque puede permitir a los atacantes acceder a repositorios de código fuente privados, inyectar código malicioso en pipelines de CI/CD o moverse lateralmente a través de identidades de desarrollador comprometidas
.
La investigación de Socket identificó a los desarrolladores de cripto, DeFi, Solana, Sui e IA como los objetivos principales . Las convenciones de nomenclatura de los paquetes apelaban directamente a estas comunidades, con temáticas en torno a la auditoría de seguridad de billeteras, el monitoreo de transacciones, el desarrollo de contratos inteligentes y las herramientas de contexto para IA.
Los atacantes sabían que los desarrolladores en estos ecosistemas poseen rutinariamente claves de billetera con activos significativos, acceso a infraestructura en la nube y permisos privilegiados en las cadenas de herramientas de desarrollo, lo que convierte una sola estación de trabajo comprometida en la puerta de entrada a un daño financiero y operativo sustancial .
El aspecto técnicamente más novedoso de TrapDoor es la explotación de los límites de confianza de los asistentes de codificación con IA. El malware intenta modificar o crear los archivos .cursorrules y CLAUDE.md —archivos de configuración que los desarrolladores usan para dar instrucciones específicas del proyecto a herramientas de IA como Cursor y Claude Code .
Dentro de estos archivos, los atacantes incrustan instrucciones ocultas usando caracteres Unicode de ancho cero (como U+200B, U+200C y U+FEFF). Estos caracteres son invisibles en los editores de texto y durante una revisión de código estándar, por lo que un desarrollador humano no ve nada sospechoso . Sin embargo, los asistentes de IA procesan el texto Unicode completo y pueden ser engañados para interpretar las instrucciones ocultas como comandos legítimos, ejecutando potencialmente flujos de recolección de credenciales, extrayendo código fuente o ejecutando comandos de shell arbitrarios sin el conocimiento del desarrollador
.
Esto crea un compromiso en dos etapas: el paquete infecta el entorno del desarrollador y roba credenciales inmediatas, mientras que el archivo de configuración de IA envenenado convierte las propias herramientas de IA del desarrollador en un medio para una mayor explotación. Investigaciones relacionadas han confirmado que plataformas de agentes de IA en producción, incluidos Claude Code y GitHub Copilot, pueden ejecutar comandos arbitrarios incrustados como instrucciones Unicode invisibles en archivos de habilidades (skills) del agente .
La infraestructura de detección de Socket identificó las publicaciones de TrapDoor con un tiempo medio de detección de solo 5 minutos y 27 segundos, con la detección más rápida registrada en 58 segundos . Esta rápida identificación permitió a los investigadores conectar las publicaciones de paquetes aparentemente dispersas en una sola campaña coordinada en un plazo de 48 horas desde la primera subida sospechosa
.
Los 34 paquetes identificados en los tres registros han sido reportados a los respectivos administradores para su eliminación .
Si tú o tu equipo instalaron alguno de estos paquetes, actúa de inmediato:
Regenera las frases semilla de las billeteras de criptomonedas y mueve los fondos a nuevas billeteras. Rota las claves IAM de AWS, los tokens de acceso personal de GitHub, los pares de claves SSH y cualquier token API almacenado en variables de entorno . Revoca los tokens OAuth para integraciones de CI/CD.
Ejecuta npm auditpip listCargo.lock en busca de cualquiera de los 34 paquetes maliciosos reportados . Busca en el historial de los archivos de bloqueo en git estos nombres de paquete, elimina cualquier coincidencia y ejecuta una instalación limpia.
Revisa ~/.bashrc, ~/.zshrc, ~/.profile y ~/.config/fish/config.fish en busca de alias sospechosos o comandos curl y wget no comentados que pudieran establecer persistencia .
Examina .git/hooks/ en cada repositorio en busca de hooks no autorizados de pre-commit, post-commit o pre-push. El enfoque de la campaña en los tokens de GitHub hace que el compromiso de repositorios a nivel de cuenta sea una posibilidad real .
Revisa .github/workflows/ en busca de archivos de flujo de trabajo inesperados, pasos sospechosos con curl o wget, y acciones de terceros no autorizadas. Verifica los registros de ejecución de Actions en busca de solicitudes de red salientes inusuales.
Busca en todos los proyectos archivos .cursorrules y CLAUDE.md que contengan caracteres Unicode de ancho cero. Un comando grep para detectar estos caracteres invisibles es:
grep -P '[\x{200B}-\x{200F}\x{2028}-\x{202F}\x{FEFF}]' .cursorrules CLAUDE.mdRevisa las tareas de cron (crontab -l~/.config/systemd/user/) y los LaunchAgents en macOS (~/Library/LaunchAgents/) en busca de entradas maliciosas .
Integra herramientas de escaneo de seguridad para la cadena de suministro en tu pipeline de CI para detectar paquetes sospechosos antes de la instalación. Considera el uso de herramientas de detección en tiempo de ejecución que monitoricen el acceso a archivos de billeteras, claves SSH, credenciales en la nube y directorios de datos de navegadores .
Comments
0 comments