NIKKE: un ataque a la cadena de suministro del lanzador de PC instala una puerta trasera
Unos atacantes modificaron cuatro scripts oficiales del lanzador de NIKKE en el CDN de Level Infinite para instalar el agente K2F; corregido el 4 de noviembre.
Resumen
- Unos atacantes modificaron cuatro archivos JavaScript oficiales en la red de distribución de contenido de Level Infinite. El lanzador de PC de NIKKE los cargó y pudo instalar un agente de control remoto llamado K2F.
- Cualquier persona que abriera el lanzador de PC entre el 27 de septiembre y la corrección del 4 de noviembre está en riesgo, en Windows, Linux y Steam Deck mediante Proton, o con la versión de Google Play Games. El primer arranque del agente registrado es del 23 de octubre.
- Level Infinite confirmó la manipulación el 4 de noviembre y sustituyó los archivos. El juego tiene más de 45 millones de descargas. No se ha asignado ningún CVE, y el incidente no está en el catálogo KEV de CISA al 5 de noviembre de 2026.
- Vacíe la caché del lanzador, ejecute las comprobaciones publicadas, elimine la persistencia de Chrome si está presente y rote cada credencial desde un dispositivo limpio. Consulte «¿Cómo lo corrijo?».
¿Estoy afectado?
Todas estas condiciones deben cumplirse para que una máquina esté expuesta:
- El lanzador de PC de NIKKE se abrió entre el 2026-09-27, cuando aparecieron los archivos modificados en el CDN, y la corrección del 2026-11-04.
- El lanzador ejecutó los archivos modificados desde la red o desde su caché. El cargador solo descargó el paquete de segunda etapa en algunos lanzamientos.
- La máquina es Windows, Linux o Steam Deck con el lanzador ejecutado mediante Proton, o la versión de Google Play Games. El cliente móvil es otra aplicación y no forma parte de este incidente.
El primer inicio de agente reportado es el 2026-10-23 a las 16:40 GMT. El cargador estaba en su sitio desde el 2026-09-27, y el informe dice que la carga útil se ejecutó solo en algunos lanzamientos. Una máquina lo vio en 3 de unos 19 lanzamientos. La versión de Google Play Games se instala en C:\NIKKE_GOOGLE, ejecuta Launcher\nikke_launcher_google.exe y guarda sus datos en %APPDATA%\nikke_launcher_google.
| Versión | Lanzador | Carpeta de datos | Exposición |
|---|---|---|---|
| Windows | Launcher\nikke_launcher.exe |
%APPDATA%\nikke_launcher |
Afectada hasta la corrección del 4 de noviembre |
| Windows HMT | Lanzador HMT | %APPDATA%\nikke_launcher_hmt |
Afectada hasta la corrección del 4 de noviembre |
| Google Play Games | Launcher\nikke_launcher_google.exe |
%APPDATA%\nikke_launcher_google |
Reportada como afectada |
| Linux y Steam Deck | Lanzador dentro del prefijo de Proton | Las mismas rutas dentro del prefijo | Afectada hasta la corrección del 4 de noviembre |
Busque el marcador del agente en el registro del lanzador:
# Windows PowerShell
Select-String -Path "$env:APPDATA\nikke_launcher\intl_service\debug.log" -Pattern "k2f_chan"
# Linux or Steam Deck, inside the Proton prefix
grep -i "k2f_chan" "$WINEPREFIX/drive_c/users/$USER/AppData/Roaming/nikke_launcher/intl_service/debug.log"
k2f_chan registered significa que el agente se descargó y se ejecutó. Un lanzamiento también puede registrar startup failed: EIO: invalid UTF-8 in string justo después, sin línea adopted ni agent started as, y eso sigue significando que el agente se ejecutó.
¿Cómo lo corrijo?
- Antes de volver a abrir el lanzador, ejecute las comprobaciones de «¿Cómo compruebo si estuve comprometido?». La caché del lanzador contiene parte de la evidencia.
- Copie o elimine la carpeta de caché del lanzador. Puede seguir conteniendo los archivos modificados y el lanzador los cargaría de nuevo. La carpeta es
%APPDATA%\nikke_launcher\tbs_cache, o%APPDATA%\nikke_launcher_hmt\tbs_cachey%APPDATA%\nikke_launcher_google\tbs_cachepara las otras versiones. En un prefijo de Proton está en la misma ruta dentro del prefijo. - Bloquee los dominios y direcciones actuales del atacante en su archivo hosts, router o cortafuegos:
text
insightjs.com
analytics.insightjs.com
insightjs.org
89.127.233.127
89.126.250.172
Esto detiene el servidor conocido hoy. El informe dice que se desconoce cómo obtuvo el atacante acceso de escritura al CDN de Level Infinite, así que un dominio nuevo sigue siendo posible.
4. Si la comprobación encuentra k2f_chan, siga «¿Qué hago si lo instalé?».
5. Mantenga el lanzador actualizado. Level Infinite reconstruyó la interfaz el 4 de noviembre y sustituyó los cuatro archivos. Confirme que su lanzador carga los nombres de script reconstruidos que enumera el informe.
La medida del proveedor es la actualización del cliente y el borrado de la caché. El informe no ofrece un parche para el código del lanzador, porque el fallo no está en el binario del lanzador: los scripts oficiales del CDN fueron modificados.
¿Qué hace el código malicioso?
El código malicioso es un cargador insertado en cuatro scripts legítimos del lanzador. Se ejecuta cuando el lanzador carga el script, resuelve una URL de mando y control, descarga una carga útil LuaJIT e inicia un agente de control remoto dentro del proceso del lanzador.
Los cuatro archivos modificados son:
| Archivo oficial | Cargador que descarga |
|---|---|
https://sg-gpts.playerinfinite.com/comm/assets/lib/aegis-fix.min.js |
https://insightjs.com/l.js?f=aegis |
https://na-webassets.playerinfinite.com/comm/nikke_launcher/assets/images.7fec4c32.js |
https://insightjs.com/l.js?f=images |
https://na-webassets.playerinfinite.com/comm/nikke_launcher/assets/FeedList.feb647c9.js |
https://insightjs.com/l.js?f=feedlist |
https://na-webassets.playerinfinite.com/comm/assets/lib/vue-bucket.min.js |
https://insightjs.com/l.js?f=vue |
El código inyectado oculta la URL en una matriz de enteros con new TextDecoder().decode(new Uint8Array(new Uint32Array([...]).buffer)). Añade una etiqueta <script> y la elimina tras la carga. Si insightjs.com falla, reintenta con insightjs.org. En FeedList.feb647c9.js los 708 bytes añadidos están justo antes de la instrucción final export{...}, así que una comprobación que solo compara el final del archivo no los ve.
El cargador llama al puente de descarga del lanzador, Srv_DownloadFile, para obtener https://analytics.insightjs.com/comm/assets/insight.bundle. La copia analizada tiene 205,135 bytes con el hash SHA-256 cc0ad05bfe85940a6067b3a72c182d3953339129206634141926d5d0b35973ec. El lanzador lo guarda con un nombre .log engañoso en Launcher\log\tinyget\, lo ejecuta y luego lo elimina. Una compilación anterior lo guardaba como k2f.lua y lo dejaba allí. Cualquier archivo de esa carpeta que empiece por los bytes 1B 4C 4A 01 es el agente.
El paquete es bytecode LuaJIT 2.0 para un agente llamado internamente K2F_LUA_BUILD. Registra k2f_chan con el comm_center del lanzador y luego responde a las órdenes del servidor. El agente no hace nada por sí solo: cada acción viene del operador mediante l.js.
¿Cómo se explota?
- Un jugador abre el lanzador de PC de NIKKE.
- El lanzador pide uno de sus archivos de script habituales al CDN de Level Infinite. El CDN sirve la copia modificada.
- El cargador insertado construye la URL de
insightjs.comy añade una etiqueta script. Si el primer dominio falla, pruebainsightjs.org. l.jsperfila el lanzador y llama al puenteSrv_DownloadFiledel lanzador para obtenerinsight.bundledesdeanalytics.insightjs.com.- El lanzador escribe el paquete en
Launcher\log\tinyget\y lo ejecuta con su motor LuaJIT. - El agente registra
k2f_chany contacta con el servidor de mando y control. El operador puede entonces enviar órdenes mientras el lanzador está abierto. - En Windows, el operador puede instalar una DLL de Chrome que sigue ejecutándose después de cerrar el lanzador.
No hace falta interacción del usuario más allá de abrir el lanzador. El cargador se ejecuta al iniciar, y el informe registra inicios de agente desde el 23 de octubre.
¿Cómo se desarrolla el ataque?
Los cuatro archivos CDN modificados añaden un cargador. El cargador obtiene un agente LuaJIT mediante el puente de descarga del lanzador. El agente da al operador un acceso remoto dentro del proceso del lanzador.
el lanzador de PC de NIKKE"] --> B["El CDN sirve cuatro archivos
JavaScript oficiales modificados"] B --> C["El cargador pide
insightjs.com/l.js"] C --> D["l.js llama a Srv_DownloadFile
para insight.bundle"] D --> E["El lanzador ejecuta el paquete
con LuaJIT"] E --> F["El agente K2F registra k2f_chan
y contacta con el mando"] F --> G["El operador envía órdenes
mientras el lanzador está abierto"]
¿Qué puede hacer un atacante?
El operador tiene un agente de acceso remoto dentro del proceso del lanzador. El agente puede ejecutar cualquier orden que pueda ejecutar la cuenta del jugador, leer y descargar archivos, tomar capturas de pantalla y recopilar credenciales guardadas.
La lista de órdenes publicada incluye:
exec, que ejecuta cualquier programa u orden de shell y devuelve la salida.ls,cd,cat,downloadyfile_chunk, que recorren carpetas y copian cualquier archivo.screens, que captura todos los monitores.creds, que descifra la cuenta y la contraseña de NIKKE que guardó el lanzador.browserscan, que lee las contraseñas guardadas de Chrome, Edge, Brave, Vivaldi, Opera y Firefox, y las cookies de los navegadores Chromium.keyscan, que lee 264 rutas de credenciales y configuración y las entradas del Administrador de credenciales de Windows de las herramientas de desarrollo.wallet_files, que lee datos de 28 extensiones de cartera de criptomonedas en los perfiles de Chrome.chrome_install, que instala la persistencia mediante DLL de Chrome.
exec por sí solo permite al operador hacer todo lo que puede hacer el usuario, incluido instalar otro malware. El agente se ejecuta con privilegios elevados en el lanzador estándar de Windows, cuyo manifiesto solicita derechos de administrador, así que las rutas de cifrado ligadas a la aplicación de Chrome y Edge pueden funcionar. El agente sigue activo mientras el lanzador está abierto, y el lanzador suele quedarse en el área de notificación mientras se juega.
El impacto necesita que el jugador abra el lanzador durante la ventana de exposición. El informe no encontró código para tareas programadas, claves Run, servicios ni la carpeta Inicio, así que la persistencia viene de la DLL de Chrome o de las órdenes que envía el operador.
¿Qué hago si lo instalé?
- Cierre el lanzador o desconecte la máquina de internet, para que el operador pierda el acceso.
- Elimine la persistencia de Windows. Borre
HKCU\Software\Classes\CLSID\{E77CC89B-7401-4C04-8CED-149DB35ADD04}si existe. Deje la copia HKLM en paz: pertenece a Windows. Reinicie Windows, porque la DLL sigue bloqueada mientras está cargada. - Elimine cualquier subcarpeta de
%LOCALAPPDATA%\Google\Chrome\User Data\PlatformExperienceHelper\cuyo nombre sea una cadena hexadecimal de 64 caracteres y que contengaplatform_experience_helper.dll. No borre toda la carpeta; Chrome la crea para su propio asistente. - Desde un dispositivo limpio, cambie primero la contraseña de NIKKE y Level Infinite, luego las de correo, Discord, banca y todas las guardadas en un navegador. Active la autenticación de dos factores.
- Cierre sesión en Discord, Google, Steam, GitHub y los demás servicios que use. Las cookies del navegador funcionan sin la contraseña.
- Rote los tokens de API, las claves SSH y las credenciales de desarrollo, incluidos GitHub, npm, AWS, OpenAI y Anthropic.
- Mueva los fondos de las carteras de criptomonedas a una cartera nueva con una frase semilla nueva.
- Reinstale Windows si el agente se ejecutó. El operador podía ejecutar cualquier orden, y Microsoft Defender Offline no detectó la DLL en una máquina.
El informe publica un comprobador de solo lectura, NIKKE Launcher Check, para Windows, Linux y macOS. Busca el cargador, el agente y la DLL, y escribe un informe que usted guarda.
¿Cómo compruebo si estuve comprometido?
El proveedor no publicó indicadores. El informe independiente publica los siguientes, específicos de este incidente:
- Busque
k2f_chanenLauncher\intl_service\debug.log. Las líneaslua downloaded to log\tinyget\,k2f_chan registered,adoptedyagent started asmuestran que el agente se ejecutó. Copie el registro antes de borrar la caché. - Enumere
Launcher\log\tinyget\. Los archivos llamadostinyget.<time>.logok2f.luaque empiezan por1B 4C 4A 01son el agente. - Revise la caché de código V8 del lanzador en
%APPDATA%\nikke_launcher\tbs_cache\Code Cache\js\. Las claves de cargadordd65fa4d61079e7e_0,ce2fd3f1007a9fe9_0,1416c638b3830103_0yfd520c7c0f65c2d7_0corresponden aaegis,images,feedlistyvue. - Busque
k2f.agent.stateen el leveldb de Local Storage bajotbs_cache\Local Storage\leveldb\. El estado sobrevive al borrado de la carpeta NIKKE. - Busque
%LOCALAPPDATA%\Google\Chrome\User Data\PlatformExperienceHelper\<64-hex>\platform_experience_helper.dlly la clave CLSID deHKCUdel paso 2 de «¿Qué hago si lo instalé?». - Compare los registros de red con los dominios y direcciones de «¿Cómo lo corrijo?». Una resolución de
insightjs.comdespués de una petición aplayerinfinite.comes una pista.
El debug.log del lanzador se amplía, no se sobrescribe, así que una entrada antigua puede quedar tras un lanzamiento limpio. La caché HTTP guarda los scripts modificados comprimidos con gzip, así que una búsqueda en texto plano no encuentra nada; descomprima cada flujo gzip y busque String.fromCharCode(111,114,103). Una máquina sin rastro puede haber ejecutado una compilación antigua que limpiaba tras de sí.
Cronología
- 2026-09-27 06:41 a 06:42 GMT: se modifican cuatro archivos JavaScript oficiales del CDN de Level Infinite.
- 2026-10-23 16:40 GMT: primer inicio de agente reportado por una víctima.
- 2026-10-28 15:46 GMT:
FeedList.feb647c9.jsse sustituye por una copia limpia en el origen, pero algunos servidores CDN conservan la copia modificada. - 2026-11-03 17:04 a 17:23 GMT: se sustituyen los otros tres archivos en el CDN.
- 2026-11-04 03:12 a 03:21 GMT: los últimos servidores CDN comprobados reciben la copia limpia de
FeedList.feb647c9.js. - 2026-11-04 03:13 GMT: Level Infinite confirma la manipulación en una declaración en X.
- 2026-11-04 11:20 GMT: los cuatro archivos están limpios en los cuatro servidores CDN comprobados.
Preguntas frecuentes
¿Está afectada la aplicación móvil de NIKKE?
Nada indica que la aplicación móvil esté afectada. Los archivos manipulados son los scripts del lanzador de PC, y el informe cubre Windows, Linux y Steam Deck mediante Proton además de la versión de Google Play Games. La versión de Google Play Games se ejecuta en Windows, no en Android.
Abrí el lanzador y no vi ningún aviso. ¿Me infecté?
No necesariamente. La carga útil se ejecutó solo en algunos lanzamientos, y una máquina lo vio en 3 de unos 19. Compruebe k2f_chan en el registro y la cabecera LuaJIT en la carpeta tinyget. Un registro limpio reduce la probabilidad pero no demuestra que la máquina nunca se infectara.
¿Es seguro abrir el lanzador ahora?
Level Infinite sustituyó los cuatro archivos, y los cuatro estaban limpios en los servidores comprobados a las 11:20 GMT del 4 de noviembre. Vacíe primero tbs_cache, porque la caché puede seguir conteniendo la copia modificada. El informe dice que se desconoce cómo obtuvo el atacante acceso de escritura al CDN.
¿Fue un ataque de ransomware?
No se reporta ransomware. El agente es una herramienta de acceso remoto que puede robar credenciales, cookies, datos de carteras y archivos. El informe no registra nota de rescate ni cifrado.
¿Hay un CVE?
No se ha asignado ningún CVE al 5 de noviembre de 2026. El incidente es una compromisión de la cadena de suministro de scripts oficiales, no una vulnerabilidad en un paquete versionado, y la declaración del proveedor no da ningún identificador.
Referencias
- MotherSphere, «NIKKE PC launcher compromise (November 2026)», informe técnico e indicadores. https://gist.github.com/MotherSphere/d6c049a09ba8ac3085c51ee9df24a4e5 (verificado el 5 de noviembre de 2026)
- MotherSphere, «NIKKE Launcher Check», comprobador de solo lectura. https://github.com/MotherSphere/NIKKE-Launcher-Check (verificado el 5 de noviembre de 2026)
- Level Infinite, declaración en X, 4 de noviembre de 2026. https://x.com/NIKKE_en/status/2117817602659770434 (verificado el 5 de noviembre de 2026)
- BleepingComputer, «NIKKE PC game launcher hacked to spread remote access, data-stealing malware», 4 de noviembre de 2026. https://www.bleepingcomputer.com/news/security/nikke-pc-game-launcher-hacked-to-spread-remote-access-data-stealing-malware/ (verificado el 5 de noviembre de 2026)