Un repositorio de GitHub que se presentaba como una versión sin censura de Qwen 3.8 de 27.000 millones de parámetros ofrecía un archivo de apenas 487 KB. El análisis atribuido a SlowMist encontró que el paquete no contenía pesos del modelo, sino una cadena basada en LuaJIT vinculada a un payload clasificado como StealC, capaz de buscar credenciales, cookies, sesiones y datos relacionados con wallets.
***
- El repositorio falso prometía pesos cuantizados de Qwen, pero el ZIP solo contenía tres archivos y ningún modelo GGUF.
- La cadena de infección podía recopilar información del equipo, capturas de pantalla y credenciales, además de descargar nuevas tareas desde servidores C2.
- El análisis atribuido a SlowMist identificó 29 archivos ZIP maliciosos distribuidos en 23 repositorios con señuelos relacionados con IA, desarrollo, servicios MCP y wallets.
Un modelo de IA que pesaba menos que una imagen
Un repositorio de GitHub que aparentaba ofrecer pesos cuantizados localmente para Qwen 3.8 de 27.000 millones de parámetros dirigía a los usuarios hacia un archivo malicioso de solo 487 KB. El caso resulta especialmente engañoso porque la página prometía funcionamiento completamente desconectado, ausencia de telemetría y permanencia de los datos dentro del equipo local, atributos muy atractivos para quienes ejecutan modelos abiertos por motivos de privacidad o control.
El 20 de agosto de 2026, el repositorio unburdened-jackinthebox365/qwen38-uncensored añadió a su carpeta assets/ el archivo uncensored_qwen_v2.6.zip, cuyo tamaño exacto era de 487.153 bytes. Cuatro días después, el 24 de agosto, el README volvió a modificarse para que el botón de descarga, los enlaces internos y dos referencias externas que antes apuntaban a Ollama y LM Studio condujeran directamente al mismo ZIP alojado en GitHub.
La diferencia entre el supuesto modelo y el recurso ofrecido constituía una señal de alerta evidente: una versión Qwen de 27.000 millones de parámetros con cuantización Q4_K_M suele exigir más de 16 GB de almacenamiento, mientras que el propio instalador mencionaba aproximadamente 16,8 GB. Al extraer el archivo, los investigadores encontraron únicamente Application.cmd, util.exe y cert.txt; no había pesos GGUF ni componentes capaces de representar un modelo de esas dimensiones.
El análisis presentado por KuCoin, basado en la investigación de inteligencia de amenazas atribuida a SlowMist, concluyó que se trataba de un repositorio falsificado que distribuía malware bajo la apariencia de Qwen. La evidencia no indica que el proyecto oficial de Qwen haya sido comprometido, y los investigadores subrayaron que trabajaron principalmente con análisis estático, sin ejecutar ninguna muestra en un equipo real.
El archivo comprimido escondía un cargador
El supuesto instalador no desplegaba un modelo ni llamaba a Ollama, pese a que el código principal conservaba la apariencia de un proyecto legítimo. El contenido de Application.cmd se reducía al comando Start util.exe cert.txt, que hacía que el ejecutable situado en la misma carpeta leyera el archivo de texto y entregara el control a un script Lua.
util.exe tenía un tamaño de 759.808 bytes y correspondía a un intérprete LuaJIT 2.1 renombrado, una tecnología legítima utilizada por distintas aplicaciones. El análisis estático no encontró comportamiento malicioso independiente en ese ejecutable, pero sí estableció que su función consistía en ejecutar scripts Lua ofuscados ubicados en el mismo directorio.
El archivo llamado cert.txt tampoco era un certificado, sino un script Lua de una sola línea con 182.116 bytes. Sus cadenas estaban fragmentadas en escapes decimales y tablas reorganizadas, de modo que el contenido se reconstruía en tiempo de ejecución; esta estructura permitía ocultar la lógica peligrosa mientras el repositorio mostraba código de instalación aparentemente normal.
Tras desofuscarlo sin conexión, los investigadores identificaron el uso de LuaJIT FFI para analizar y llamar a funciones de Windows como VirtualAlloc y CreateThread. El cargador, identificado con el número 845, podía recopilar el nombre del equipo, el usuario, el GUID y la versión del sistema, además de tomar una captura de pantalla mediante BitBlt y consultar un servicio de geolocalización IP.
Una cadena C2 con respaldo en Polygon
La información reunida por el cargador se organizaba en una solicitud multipart enviada mediante POST a la dirección IP 217[.]119[.]129[.]122. La ruta incluía un identificador de cliente que, una vez decodificado, correspondía a 517b7c5e5663656a057f; la sección de archivo contenía la captura BMP y la sección de datos incorporaba la información del host, aunque las pruebas utilizaron valores simulados que no pertenecían a un equipo real.
El servidor podía responder con tareas posteriores clasificadas por extensión, incluyendo ejecución en memoria, programas independientes, DLL y scripts. El código también contemplaba exclusiones de Defender, persistencia mediante tareas programadas y reportes de finalización, pero el análisis atribuido a SlowMist aclaró que esas capacidades dependían de la configuración enviada por el servidor y que la muestra examinada solo recibió una política que habilitaba la persistencia.
Cuando la dirección principal dejaba de responder, el cargador podía recurrir a Polygon para obtener un C2 alternativo mediante una llamada eth_call. La consulta utilizaba el selector 0x3bc5de30 sobre el contrato 0x1823A9a0Ec8e0C25dD957D0841e3D41a4474bAdc, cuya respuesta permitió resolver la dirección 194[.]48[.]248[.]94; tres de los cinco endpoints RPC configurados devolvieron esos datos de manera consistente.
La respuesta recibida por el beacon 845 tenía 1.248 bytes y utilizaba tres capas de codificación y cifrado: Base64, hexadecimal en minúsculas y XOR cíclico con una clave de 32 bytes. El resultado ordenaba la descarga de tool.log hacia %TEMP%dist.lua, donde el archivo de 396.616 bytes se convertía, después de su transformación, en otro script Lua ofuscado de 198.308 bytes asociado al cargador 847.
StealC busca credenciales y activos digitales
El cargador 847 se comunicó inicialmente con 217[.]119[.]129[.]97 y recibió dos tareas, una para volver a descargar tool.log y otra para obtener verb.log. Esta última utilizaba una ruta de destino que incluía AppData..LocalProgramsChromiumApplicationChromium.exe, un recurso que disimulaba el archivo final como el ejecutable principal del navegador Chromium.
verb.log tenía 3.089.408 bytes y atravesaba una cadena de transformación que combinaba hexadecimal, XOR, un PE externo, Base64URL y AES-256-ECB. El resultado final era un PE interno de 797.728 bytes que el componente externo cargaba de forma reflectiva dentro de su propio proceso, sin que la cadena estática mostrara APIs de inyección entre procesos como CreateProcess, WriteProcessMemory, SetThreadContext o ResumeThread.
El payload interno verificaba primero el entorno y se detenía si el idioma predeterminado del sistema era ruso, ucraniano, bielorruso, kazajo o uzbeko. Después imponía una única instancia mediante un nombre de evento generado con información del equipo y comprobaba una fecha de expiración incorporada, pasos que precedían a la lógica principal del ladrón.
Por sus capacidades y estructura, los investigadores clasificaron el payload como StealC, un infostealer para Windows orientado a sustraer información sensible y enviarla a un servidor C2. Esta clasificación es coherente con la descripción general de StealC como malware capaz de extraer contraseñas, cookies de sesión y otros datos del navegador. El programa buscaba credenciales, cookies, historial y bases de datos de Chrome, Edge y Brave; en Firefox empleaba la interfaz NSS para descifrar los inicios de sesión guardados, y podía usar Restart Manager si otra aplicación mantenía bloqueada una base de datos.
El alcance también incluía cuentas de Foxmail y Outlook, sesiones de WinSCP, configuraciones y tokens de Steam, además de datos que el servidor pudiera solicitar en directorios asociados con wallets. La muestra no incorporaba nombres de marcas de wallets ni una lista fija de objetivos, y tampoco implementaba análisis de frases BIP39 o claves privadas mediante secp256k1; esas búsquedas dependían de las tareas emitidas por el C2.
Rotación de infraestructura y alcance de la campaña
El payload incluía una capacidad auxiliar para abordar la protección App-Bound Encryption de navegadores recientes, especialmente desde Chrome 127. Ese componente utilizaba inyección APC Early-bird en procesos suspendidos de Chrome, Brave o Edge para leer la clave protegida dentro del proceso correspondiente y exportar una clave de 32 bytes mediante la interfaz COM del servicio de elevación del navegador.
Además de credenciales y cookies, el malware podía capturar pantallas, recopilar información del sistema y listas de procesos, descargar código adicional mediante PowerShell, intentar elevar privilegios y autodestruirse al terminar. Los datos se enviaban en bloques de 512 KiB mediante solicitudes JSON POST a 89[.]169[.]12[.]194, con cifrado RC4 aplicado tanto al endpoint almacenado como al cuerpo de la comunicación.
Una reverificación realizada el 26 de agosto mostró que los tres beacons respondían con HTTP 200 y conservaban sin cambios el campo de política del cargador, aunque la infraestructura de descarga sí había rotado. vs.log resultó idéntico a tool.log, mientras que una nueva versión de ssl.log modificó el PE externo, cambió la clave AES y alteró la etiqueta de compilación de build5 a build1, sin modificar el payload interno ni sus claves RC4 de subida.
La investigación amplió la revisión a 29 archivos ZIP maliciosos distribuidos en 23 repositorios de GitHub, cuyos señuelos incluían modelos y herramientas de IA, servicios MCP, scripts de desarrollo y proyectos de wallets. Todas las muestras utilizaban Lua como parte de la cadena de ejecución, a menudo mediante LuaJIT local o intérpretes renombrados activados por archivos CMD o BAT, pero los investigadores advirtieron que todavía no habían reconstruido por completo cada variante.
Qué deben revisar los usuarios y desarrolladores
La primera recomendación consiste en no ejecutar ni limpiar inmediatamente un archivo sospechoso cuando exista una coincidencia con alguno de los ZIP, scripts, C2 o URL identificados. El análisis atribuido a SlowMist aconseja preservar la fuente de descarga, el árbol de procesos, los registros de conexión y los archivos dejados en el equipo, porque esa evidencia puede resultar decisiva para determinar si hubo ejecución efectiva o solo una descarga.
Los equipos de seguridad también deberían revisar tareas programadas, claves de ejecución automática y entradas de StartupApproved cuando encuentren rastros de LuaJIT o de intérpretes renombrados cargando grandes volúmenes de texto ofuscado. La inspección debe incluir las exclusiones de Defender, especialmente si aparecen la unidad del sistema o extensiones como .exe y .dll, aunque una detección aislada no basta para atribuir todas esas modificaciones a esta campaña.
Si se confirma la ejecución del payload o la presencia de archivos relacionados, la remediación debe incluir el restablecimiento de sesiones del navegador, contraseñas guardadas, cuentas de correo, tokens de Steam y credenciales de WinSCP. Cuando una wallet haya almacenado claves privadas o frases semilla en el equipo, la recomendación es migrar primero los activos a una nueva dirección y después abordar la limpieza o reinstalación del sistema comprometido.
Finalmente, las reglas de monitoreo deberían combinar comportamiento y contexto, en lugar de bloquear de manera indiscriminada GitHub Raw o los endpoints RPC públicos de Polygon. La secuencia formada por un lanzador pequeño, un LuaJIT local o intérprete renombrado, un texto extenso de una sola línea y una solicitud HTTP o escritura en memoria ejecutable ofrece una señal más precisa cuando coincide con los indicadores técnicos de esta campaña.
La investigación muestra que la confianza en un repositorio conocido o en la promesa de privacidad local no reemplaza la verificación de tamaños, hashes, procedencia y contenido de los archivos descargados. En este caso, una discrepancia de varios órdenes de magnitud entre el modelo anunciado y el ZIP entregado habría permitido detener la instalación antes de que comenzara la cadena de robo.
Imagen original de DiarioBitcoin, creada con inteligencia artificial, de uso libre, licenciada bajo Dominio Público.
Este artículo fue escrito por un redactor de contenido de IA y revisado por un editor humano para garantizar calidad y precisión.
ADVERTENCIA: DiarioBitcoin ofrece contenido informativo y educativo sobre diversos temas, incluyendo criptomonedas, IA, tecnología y regulaciones. No brindamos asesoramiento financiero. Las inversiones en criptoactivos son de alto riesgo y pueden no ser adecuadas para todos. Investigue, consulte a un experto y verifique la legislación aplicable antes de invertir. Podría perder todo su capital.
Suscríbete a nuestro boletín
Artículos Relacionados
IA
Meta presenta Muse Glimmer, un agente de IA de 30B que busca funcionar en computadoras personales
AltCoins
Render cae un 1% mientras el volumen se dispara un 41%: análisis de RENDER al 28 de agosto de 2026
Curiosidades
Microglía podría acelerar la muerte de neuronas motoras en la ELA
Empresas