# What happened All times on this page are GMT, in 2026. The full analysis is in the write-up: https://gist.github.com/MotherSphere/d6c049a09ba8ac3085c51ee9df24a4e5 On September 27, four JavaScript files on Level Infinite's CDN (playerinfinite.com, served from Tencent COS) were modified to load `https://insightjs.com/l.js`. The NIKKE PC launcher shows its pages in an embedded Chromium (CEF), so it ran that script. From October 23 at the latest, and only on some launches, the script used the launcher's JavaScript bridge to download a remote-access agent. On November 4, Level Infinite confirmed a fix in a statement on X. It is still not known how the attacker got write access to the CDN. ## The modified CDN files All four files were modified on September 27 between 06:41 and 06:42. Each one loads `l.js` with its own `f` parameter. Both CDN hosts, sg-gpts.playerinfinite.com and na-webassets.playerinfinite.com, served the modified files. | File | Loads | Cleaned | |---|---|---| | `https://sg-gpts.playerinfinite.com/comm/assets/lib/aegis-fix.min.js` | `https://insightjs.com/l.js?f=aegis` | Replaced by Level Infinite on November 3 at 17:04:28 | | `https://na-webassets.playerinfinite.com/comm/nikke_launcher/assets/images.7fec4c32.js` | `https://insightjs.com/l.js?f=images` | Replaced by Level Infinite on November 3 at 17:21:31 | | `https://na-webassets.playerinfinite.com/comm/assets/lib/vue-bucket.min.js` | `https://insightjs.com/l.js?f=vue` | Replaced on November 3 at 17:13:36 | | `https://na-webassets.playerinfinite.com/comm/nikke_launcher/assets/FeedList.feb647c9.js` | `https://insightjs.com/l.js?f=feedlist` | Cleaned at the origin on October 28 at 15:46:09, but still served by two CDN servers on November 3 | The CDN servers 43.175.144.148 and 43.175.145.181 still delivered the modified `FeedList.feb647c9.js` (SHA-256 `2f2aac505f486067af6831d6c75ea74df63acb1ed4e4002709c5962c68bd9203`) on November 3 at 18:59, and again at 20:23, also for requests with cache-busting query strings. On November 4 at 11:20, all four files were clean on four CDN servers, and the launcher now loads a rebuilt front-end. The modified `vue-bucket.min.js` (135,273 bytes, SHA-256 `3aaafbd612f04501a6fdb0bb8b2f8a87796223e5584ac18ea5eb180feeafb193`, Last-Modified September 27 06:41:44) was recovered from a launcher HTTP cache by another victim. At 20:23 on November 3, all three CDN servers above served the clean copy (134,592 bytes, SHA-256 `459343517635a96caa109b050361b4d32393e8727b2f54b44749db783feb4199`). ## Timeline | Time (GMT) | Event | |---|---| | Sep 27, 01:59 | insightjs.com is registered through PublicDomainRegistry, with 1984 ehf name servers. | | Sep 27, 06:41 to 06:42 | The four CDN files are modified. | | Oct 23, 16:40 | Earliest reported start of the agent, about an hour after a new certificate for analytics.insightjs.com (15:37). | | Oct 24, 01:16 | A reported start on a Linux machine under Proton, where the payload was saved as `Launcher/log/tinyget/k2f.lua`. A Windows machine logged a start at 01:43 the same day. | | Oct 28, 15:46:09 | `FeedList.feb647c9.js` is cleaned at the origin. | | Oct 24 to Nov 3 | More reported starts. The agent was served on some launches only: one machine got it on 3 of about 19 launches since September 27. | | Oct 31 15:38:43 to Nov 3 14:56:40 | Upload times of seven different builds of `insight.bundle`, all 205,135 bytes, from the server's `Last-Modified` and `ETag` headers: `6ae60b83` (Oct 31 15:38:43), `6ae69086` (Nov 1 01:06:14), `6ae78037` (Nov 1 18:08:55), `6ae8ccff` (Nov 2 17:48:47), `6ae90538` (Nov 2 21:48:40), `6ae9d408` (Nov 3 12:31:04) and `6ae9f628` (Nov 3 14:56:40), each followed by `-3214f`. The Oct 23 agent came from an earlier, smaller build (165,108 bytes, reported). | | Nov 3, 17:04:28 | Level Infinite replaces `aegis-fix.min.js`. | | Nov 3, 17:13:36 | `vue-bucket.min.js` is replaced. | | Nov 3, 17:21:31 | Level Infinite replaces `images.7fec4c32.js`. | | Nov 3, by 17:30 | The `l.js` that insightjs.com serves now looks like an ordinary analytics script. | | Nov 3, 17:55 | A third party registers insightjs.org, the loader's fallback domain. It now shows a warning page in four languages. | | Nov 3, 18:31 | 89.127.233.127, the server that sent the agent, does not answer (the connection times out). | | Nov 3, 20:23 | 43.175.144.148 and 43.175.145.181 still serve the modified `FeedList.feb647c9.js`. | | Nov 4 | Level Infinite confirms a fix in a statement on X. | ## The loader The code added to each CDN file hides the `l.js` URL in a `Uint32Array` and names insightjs.org as a fallback domain. It adds a `