Ladrón en extensiones de VS Code: monederos y claves salen por un bot de Telegram
Un par de extensiones maliciosas de VS Code llamadas Solidity Pro pasaron meses aparentando ser herramientas normales de desarrollo antes de convertirse en ladrones de credenciales. Yeeth Security publicó el análisis el 6 de agosto de 2026, y lo importante no es la carga útil sino la paciencia: el código malicioso espera entre doce y setenta y dos horas después de la instalación antes de ejecutarse. Para entonces el escáner de la tienda ya terminó, y el desarrollador ya decidió que la extensión le sirve.
Qué hacían en realidad las extensiones Solidity Pro
Las extensiones se publicaron bajo varias identidades de editor, entre ellas helper-beeps.solidity-pro y web3devtoolsx.solidity-pro, en Open VSX y en el VS Code Marketplace. Se hacían pasar por herramientas para Solidity, el lenguaje con el que se escriben los contratos inteligentes de Ethereum, lo que sitúa al público objetivo en una posición cómoda para un atacante: gente que guarda claves de monedero en la máquina de trabajo.
El comportamiento cambiaba con el número de versión. Las entregas de la 1.0.0 a la 2.4.x actuaban como cuentagotas: llamaban a puntos de acceso de Cloudflare Workers, descargaban una carga en Python cifrada con AES-GCM y la ejecutaban mediante child_process.spawn. Las versiones 2.4.7 y 2.4.8 mantuvieron el mismo esqueleto con ofuscación más densa. A partir de la 3.0.0 la extensión llevaba un ladrón de monederos cripto completo, y las versiones más nuevas abandonaron la etapa de Cloudflare para subir directamente a un bot de Telegram. El editor web3devtoolsx publicó además compilaciones limpias e inofensivas numeradas 1.0.0 y 4.0.0: así es como un paquete se labra un historial creíble.
Qué se lleva el ladrón de monederos cripto
La lista del botín se lee como un inventario de toda la vida laboral de un desarrollador. En credenciales: tokens de GitHub en las formas ghp_ y github_pat_, tokens de GitLab glpat-, claves y tokens de sesión de AWS, tokens de Cloudflare, claves de API de OpenAI y Anthropic, y tokens de bots de Telegram. En criptografía: claves privadas SSH, claves de Bitcoin en WIF y xprv, frases semilla mnemónicas y los almacenes de los monederos MetaMask, Phantom, Rabby, Coinbase, Trust y Keplr. También recoge credenciales incrustadas en direcciones y tokens MFA de 1Password.
Cómo pasó la revisión: de doce a setenta y dos horas de paciencia
El retardo está configurado como un intervalo aleatorio de doce a setenta y dos horas tras la instalación. Antes de activarse, la carga comprueba variables de entorno que delatan un entorno automatizado, entre ellas CI, GITHUB_ACTIONS, JENKINS_HOME y GITPOD_WORKSPACE_ID, y permanece dormida si las encuentra. Un escáner que instala un paquete, lo observa unos minutos y sigue adelante verá un asistente de Solidity que no hace nada raro, porque en ese momento realmente no hace nada raro.
El resto es oficio, no novedad: direcciones de puntos de acceso guardadas como fragmentos hexadecimales y reensambladas en tiempo de ejecución, cadenas repartidas en tablas de funciones autoinvocadas, bloques base64 pasados por eval() y nombres de método que rotan entre versiones para que una firma escrita para una no encaje en la siguiente. Las primeras versiones incluso hacían una petición señuelo a la API pública de precios de CoinGecko, justo lo que haría una herramienta real de desarrollo cripto.
El manual de WhiteCobra y los contadores de descargas inflados
Yeeth vincula esta campaña con WhiteCobra, un grupo que desde 2025 inunda las tiendas de extensiones, aunque señala que los artefactos difieren lo bastante como para hablar de coincidencia de comportamiento y no byte a byte. La comparación merece la pena porque al grupo se le filtró su propio plan. En septiembre de 2025, Koi Security publicó un archivo titulado "DEPLOYMENT PLAN: Operation Solidity Pro", recuperado de una campaña de 24 extensiones maliciosas en el VS Code Marketplace y Open VSX.
Está escrito como el lanzamiento de un producto. Cinco fases: empaquetar, desplegar, promocionar, inflar, exfiltrar. La fase de promoción describe plantillas para redes sociales y bots; la de inflado ordena dejar corriendo un script hasta que la extensión muestre 50 000 descargas, en palabras del propio plan para "proporcionar prueba social a los desarrolladores que descubran la extensión". La estimación de ingresos va de 10 000 a 500 000 dólares por hora según a quién le toque el monedero. La lección práctica es directa: el contador de descargas es un número que controla el atacante, así que no puede ser lo que le convenza.
Qué hacer ahora
- Mirar qué hay instalado, no qué recuerda haber instalado: ambas extensiones Solidity Pro ya no están en Open VSX, pero retirarlas de una tienda no desinstala nada de una máquina donde el paquete ya está.
- Tratar un acierto como compromiso total de credenciales: rotar tokens de GitHub, GitLab, AWS, Cloudflare y claves de API, regenerar claves SSH y mover las criptomonedas a un monedero creado en un dispositivo limpio. Rotar un solo token no basta cuando el ladrón se llevó el conjunto entero.
- Juzgar al editor, no al contador: el contador se infla a propósito. Un editor desconocido con cifras llamativas y un historial corto es exactamente el perfil que describe el plan.
- Mantener las frases semilla fuera de la máquina de desarrollo: un monedero de hardware conserva las claves de firma fuera del alcance de cualquier extensión del editor.
- Auditar las extensiones con periodicidad: quitar lo que ya no usa. Cada extensión instalada corre con sus permisos y se actualiza sola en silencio.
- Fijarse en lo que un editor nunca debería hacer: una extensión que lanza
powershell,cmd,mshta,cscriptocurlmerece una alerta en cualquier herramienta de seguridad que ya tenga en marcha.
Por qué importa más allá de los desarrolladores
La máquina de un desarrollador es una llave maestra. Los accesos que hay en ella abren las cadenas que compilan el software que instala otra gente, y por eso este tipo de robo rara vez se detiene en la primera víctima. La misma lógica atravesaba el fallo de VS Code en el que un solo clic entregaba repositorios de GitHub y los agentes de código en los que una issue de GitHub llegaba a los secretos de CI. Aquí también dejan de ser relevantes las herramientas de privacidad de red, y decirlo claro es más útil que vender: una VPN cifra la conexión que abre una extensión, no decide si debería abrirla. Bloquear dominios de mando conocidos en la capa DNS es una defensa real, aunque parcial, frente a la etapa del cuentagotas, pero el código que usted mismo instaló y al que dio sus permisos no es un problema de red.