First Node.js-based Ransomware : Nodera

Recently while threat hunting, Quick Heal Security Labs came across an unusual Node.js framework based Nodera ransomware. The use of Node.js framework is not seen commonly across malware families. Latest development by threat actors reveal a nasty and one-of-its-kind ransomware being created; one that uses Node.js framework, which enables it to infect Windows based OS.

Node.js is an open-source, cross-platform, JavaScript run-time environment that executes JavaScript code outside of a browser. It is built on the V8 JavaScript engine. V8 is Google’s open source high-performance JavaScript and WebAssembly engine, written in C++. It is used in Chrome and in Node.js, among others. It implements ECMAScript and WebAssembly, and runs on Windows 7 or later, macOS 10.12+, and Linux systems that use x64, IA-32, ARM, or MIPS processors. V8 can run standalone, or can be embedded into any C++ application.

Interestingly, users can easily get infected by this Nodera ransomware while browsing online, either by clicking on a malicious HTA file or when served as a malvertisement.

Analysis Details :

The sample received in our lab was vbs script which has multiple embedded js scripts. On execution, it creates a directory “GFp0JAk” at location “%userprofile%\AppData\Local\”.

It also creates a sub-directory “node_modules” for storing Node.js libraries, which are required to execute the JS payload. For execution of those scripts, it requires node.exe which will be downloaded from below URL.

Downloaded node.exe is stored as GFp0JAk.exe at “%userprofile%\AppData\Local\GFp0JAk”.

It further creates 3 different registry keys “Microsoft Office”“Startup” and “Windows” at “HKCU\Software\Microsoft\Windows\CurrentVersion\Run\” to make its persistence in system.

Fig 1 : Registry Entry

It then drops some required libraries such as fs.js, graceful-fs.js, legacy-streams.js, package.json, polyfills.js at “%userprofile%\AppData\Local\GFp0JAk\node_modules\” and also the malicious JS “lLT8PCI.js” at “%userprofile%\AppData\Local\GFp0JAk\”.

Once all required modules are in place, it checks for “%userprofile%\AppData\Local\GFp0JAk\GFp0JAk.exe”. If it is present it will start executing the script by invoking

oShell.Run(strExe & ” ” & outWorkingDir & “\” & strEntPoint, 0, true)

where strExe = “%userprofile%\AppData\Local\GFp0JAk\GFp0JAk.exe”

outWorkingDir = ”%userprofile%\AppData\Local\GFp0JAk\”

strEntPoint = “%userprofile%\AppData\Local\GFp0JAk\lLT8PCI.js”

Actual payload is “lLT8PCI.js” script which performs all ransomware related activities.

In this script, for every user-defined function the author has used Async-Await Generators and Promises. These two are most powerful concepts of Node.js framework. Defining any function prefix with Async keywords, actually allows to write asynchronous code in a synchronous fashion and the return value from the asynchronous function is called the promise, which checks for completion status of a given function.

Fig 2 : Initialization of variables and Public key

JS script starts with initialization of some variables like “bitcoinAddress” and its price.  Also, it embeds RSA public key of 4096 bit in PEM format as shown in Fig 2.

Fig 3 : Functions used in script

Initially, it checks for admin rights in “%WinDir%” by trying to create a file with name format {randomname_of_len_4}.{randomname_of_len_2}. “generateKey” function is used to generate random file name and extension.

Fig 4 : Generate file name and extension

Next it invokes the scan function which enumerates all the drives present in the system and creates a list of them. Only for “C:” drive it has made some exclusion. It considers only the directories which contain user specific files.

Fig 5 : Targeted Directories

It will generate a file with name “{randomname_of_len_6}.key” which is used to store RSA encrypted AES-256 key. The AES key is generated by using “generateKey” function.

Fig 6 : All Modules

Before encrypting the files, it kills process as shown in below fig and deletes volume shadow copy.

Fig 7 : Process Killing

After encrypting file, it appends extension “.encrypted”.

Then it drops two files :



Fig 8 : Ransom Note – How-to-buy-bitcoins.html

Html file is a ransomware note and batch file containing command to execute same JS script with parameter “decryptStatic” which invokes decryption routine.

Fig 9 : Encrypted Files

This ransomware seems to be in development phase and has some flaws as mentioned below:

  1. It mentions RSA public key of 2048 bit in ransom note, although the public key embedded in script is of 4096 bits.
  2. Hard code destruction time of Private Key “March 1 2018”.
  3. There is no communication channel mentioned in ransom note to receive the private key.

Although it seems to be written by an amateur developer, it is an interesting piece of work and probability of it becoming popular in future is quite high.

How Quick Heal protects its users from such attacks :

Quick Heal products are built with the following multi-layered security that help counter such attacks.

  1. Anti-Ransomware

Specially designed to counter ransomware attacks. This feature detects ransomware by tracking its execution sequence.

  1. Firewall

Blocks malicious attempts to breach network connections.

  1. IDS/IPS

Detects RDP brute force attempts and blocks the remote attacker IP for a defined period.

  1. Virus Protection

Online virus protection service detects the known variants of the ransomware.

  1. Behavior-based Detection System

Tracks the activity of executable files and blocks malicious files.

  1. Back Up and Restore

Helps you take regular backups of your data and restore it whenever needed.


7265C1FB74EB9EA3CD98358475620CE54B9033421BA042957135BDEFD078B366 53A95C9126BE8262AFB0821DA4D7137E6C8A4D9B363F91298249CA134D394BF4

Detection name :



Subject Matter Expert :

Ravi Gidwani, Goutam Tripathy

Security Labs, Quick Heal Technologies, Ltd.

Notify of
Inline Feedbacks
View all comments
Paulo Meneghelli Junior
Paulo Meneghelli Junior
1 year ago


You pointed that right in the beginning of the infection node.exe is downloaded and installed. Is this installation automatic or does it demand a kind of confirmation?

If there is a confirmation to be responded, it’s likely all the infection could be stopped by that point.

Would love your thoughts, please comment.x