Executive Summary

Aeternum is a recently discovered C++ botnet loader that shifts its command-and-control (C2) infrastructure entirely to the public Polygon blockchain. Instead of relying on centralized servers or domains, threat actors operate Aeternum by writing encrypted and plaintext instructions directly using smart contracts. A smart contract is a self-executing program stored on a blockchain that automatically runs when specific conditions are met.

Infected devices continuously query public remote procedure call (RPC) endpoints to retrieve and execute these on-chain commands.

The Aeternum botnet uses decentralized networks and evasion techniques, such as virtual machine detection and antivirus scanning, to operate effectively. This combination establishes a highly resilient, low-cost threat that complicates existing law enforcement takedown methods.

In this article, we analyze three malware cases linked to the Aeternum botnet:

  • Aeternum’s loader, C2 and downloader communications
  • Related Python-based malware using the Telegram API for C2
  • A blended threat consisting of XWorm RAT, the XMRig cryptocurrency miner and data exfiltration

Palo Alto Networks customers are better protected from the threats discussed in this article through the following products and services:

If you think you might have been compromised or have an urgent matter, contact the Unit 42 Incident Response team.

Related Unit 42 Topics Malware, Blockchain, C2 

Background on Aeternum

This article builds upon research by the Ctrl-Alt-Intel team on the Aeternum C2 architecture and the loader binary. That previous research primarily focused on host-based activity.

This malware advertises itself as Aeternum C2 BotNet Loader, and security researchers call it either Aeternum C2 or Aeternum loader.

Our analysis focuses on three malware samples associated with Aeternum activity. Our first sample is the Aeternum loader.

Sample One: Aeternum Loader

SHA256 hash: 5bfb25b8255b61e5ffdf6804451534bcfa9f1dfd225e6c8cdcefb5f50d846898

Sample Characteristics

This Aeternum loader sample is named Build.exe. It is the initial UPX-packed 32-bit portable executable (PE) Windows malware file compiled in C++. Its primary functions are to establish a persistent presence, perform reconnaissance and communicate with the decentralized Polygon blockchain to retrieve encrypted C2 commands.

Behavioral Analysis

The overall flow of this sample executes in multiple stages:

  1. Initial execution and self-unpacking
    1. Build.exe executes a multi-stage self-unpacking sequence
  2. Persistence and setup
    1. Creates a folder under the user's AppData\Local directory and copies itself to it
    2. Creates a Windows shortcut under the program menu's Startup directory (Wmi_Framework_APIKEY_wmsnet_<random_value>.lnk) to ensure auto-launch upon reboot
    3. Executes supporting binaries (wmiframework.exe, ZrvEsJQzWQ.exe, STAAAAAS.exe)
  3. Configuration retrieval and network communications
    1. Deobfuscates global configuration data to produce parameters used to construct network endpoint strings
    2. Sends JSON-RPC requests to Polygon RPC endpoints (decentralized C2 communication)
    3. Queries immutable smart contract addresses using the contract method 0xb68d1809 to retrieve encrypted C2 commands
    4. Decrypts the payload using a weak PBKDF2HMAC/AES-GCM routine
  4. Downloader and payload execution
    1. Downloads files as instructed by the C2 server, such as a clean putty.exe and the malicious DotNetZip.dll, from GitHub repositories
    2. Executes the malicious DLL, which uses hard-coded credentials to connect to a Telegram C2 bot (DLLSendC2Bot)
  5. Exfiltration
    1. Packages the stolen information for exfiltration over encrypted channels to trusted domains, code-hosting platforms and the Telegram API

Static Deobfuscation (XOR)

The pattern of encryption keys for the Aeternum loader (i.e., \x00\x00\x00[ENC bytes]\x00[KEY bytes]\x00\x00\x00) consists of:

  • Three null bytes followed by the encrypted payload bytes
  • A null byte, followed by the key bytes
  • Three null bytes

Since the pattern is known, a script can identify the different number of occurrences along with its offsets. When found, we can then use the key to deobfuscate the hidden information.

Figure 1 shows two examples of the decryption process against two different obfuscated string matches and their deobfuscated values. These values consist of the JSON object strings used for HTTP-based C2 communication during the execution of the malware and its subsequent interaction with the Polygon blockchain.

A screenshot of a command line interface displaying SSH key exchanges and messages labeled 'Push 133' and 'Push 232'
Figure 1. Deobfuscated (XOR) blockchain RPC request Information.

Additional deobfuscated strings also include:

  • Polygon RPC endpoints (i.e., hxxps[:]//polygon-mumbai-bor-rpc.publicnode[.]com)
  • File extensions (.e.g, .ps1, .dll, .exe)
  • HTTP header information (i.e., User-Agent)
  • C2 command information (e.g., hwid, args, ping)
  • Smart contract method (i.e., 0xb68d1809)

However, we suspect that this particular sample differs from others, since we did not find the smart contract addresses either through deobfuscation or plain-text pattern search. During network analysis, this sample used 22 different smart contract addresses during C2 communications.

The full table of deobfuscated strings can be found in the Indicators of Compromise section of this article.

Network Traffic

The Aeternum loader performed the following activities as part of its downloading and C2 communications:

  • Communicating with the Polygon blockchain network
  • Downloading files from GitHub repositories
  • Interacting with social media via Telegram’s API (api.telegram[.]org)

Figure 2 shows an example of the communications traffic filtered in Wireshark.

A screenshot of Aeternum C2 and downloader activity log showing multiple entries of HTTP requests. Details include timestamps, ports, protocols, hosts, and request methods.
Figure 2. Aeternum C2 and downloader network traffic activity.

Aeternum Polygon Blockchain C2 Communications

This section explores how Aeternum performed C2 communications on the Polygon blockchain and how it uses different smart contract addresses to retrieve C2 commands.

Polygon’s JSON-RPC (HTTP Request Analysis)

This sample made a JSON-RPC request using HTTP to the Polygon blockchain. Figure 3 shows the TCP stream of an HTTP POST request to the Polygon RPC endpoint, which includes a JSON object with two important fields: to and data. The to field contains the contract address, and the data field contains the Polygon contract's getDomain() method 0xb68d1809.

A screenshot of Wireshark displaying HTTP stream details. It shows HTTP headers and payload in hexadecimal and ASCII formats. Red annotations point to a "32 byte offset," "266 byte length," "payload starts," and "padding".
Figure 3. Example of Aeternum C2 blockchain HTTP communication (request and response).
Polygon’s JSON-RPC (HTTP Response Analysis)

Following the JSON-RPC request, if the RPC response is an HTTP 200 OK, it will include a JSON object containing the result field with its corresponding payload. This is structured with the following byte sequence:

  • Offset (0x20 = 32 bytes)
  • Payload length (0x10a = 266 bytes)
  • Payload (variable values)
  • Padding (variable length)

Weak Encryption Implementation

Building on existing research, we observed that Aeternum implements a substandard encryption scheme. Specifically, it uses a self-salting password.

The US National Institute of Standards and Technology (NIST) considers a self-salting password a critical cryptographic flaw via predictable salt and public key derivation source, in their remediation standard: NIST SP 800-132. This oversight allows the decryption of the malicious payload by using two known variables: the smart contract address and the payload.

The main decryption logic corresponds to the following operations:

  • PBKDF2HMAC (key stretching): This function uses the SHA256 algorithm to repeatedly hash the password, using the password itself as the salt
  • Key derivation: The kdf.derive(password) performs the key derivation. It takes the encoded password and transforms it into a high-entropy 32-byte (256-bit) cryptographic key.
  • Advanced Encryption Standard in Galois/Counter Mode (AES-GCM) initialization: The derived key is used to initialize an AES/GCM object
  • Decryption: The decryption of the ciphertext uses the provided initialization vector (IV) and the payload, resulting in a UTF-8 encoded string

We used a custom Python script to automate the decryption process, which expects the two values passed to it: the contract address and the hex-string payload, as mentioned above. Figure 4 shows the results of this script run on an encrypted Aeternum blockchain value.

A screenshot of a command prompt window displaying encrypted text and a Python decryption process. The text includes contract address details and a GitHub URL, ending with a process marked "SUCCESS!" with an address and iterations noted.
Figure 4. Decryption script run on an encrypted Aeternum blockchain value.

In this case, the decrypted string contains the Aeternum command all:url:<URI for putty.exe>, which is a command used to instruct the botnet to proceed and fetch the target file.

Although the analyzed sample uses encryption, we found additional samples using plain-text C2 commands, as well as an unknown encrypted payload.

Aeternum Downloader Activity

The malware download requested two different files, putty.exe and DotNetZip.dll, as Figure 5 below shows.

"A screenshot of a network log featuring requests made to GitHub. The log displays columns for Time, TCP Port, Protocol, Host, and Info. The Info column includes file paths and HTTP request methods like GET.
Figure 5. Aeternum downloader activity.

While investigating the malware’s downloader activity, we found requests for file artifacts hosted on GitHub in two different Github projects. Figure 6 shows the malicious DLL in an October 2025 commit from one repository.

A screenshot of a file explorer showing a folder titled "1" containing a file with a size of 49 KB. A note below states, 'Binary file not shown'.
Figure 6. Malicious DLL file hosted on GitHub.

The hosted putty.exe file is a copy of a legitimate installer for PuTTY version 0.83. The DotNetZip.dll file is a malicious DLL file.

While this Aeternum loader sample retrieved legitimate files like PuTTY, this is likely for testing. Attackers could easily swap files in these repositories for malware using the same filename, instantly compromising the safety of anyone who downloads them.

Exfiltration via the Telegram API: Aeternum

After successfully downloading DotNetZip.dll from GitHub and executing it, the malware sample initiated new communications to an endpoint at Telegram’s API (api.telegram[.]org).

As a DLL, the malware's entry point DllMain() first checks for a specific condition by comparing fwReason to 1 to confirm it is being called. Then it invokes the CollectAndSendSystemInfo() function, as shown below in Figure 7.

A screenshot of disassembled code in a software analysis tool. The image shows function details and call flow of the code. The main function displayed calls another function named CollectAndSendSystemInfo. There are annotations indicating exported entries and attributes, with arrows displaying the sequence of calls.
Figure 7. Disassembled code from the malicious DLL.

This function is in charge of all the information gathering and data exfiltration from the compromised machine. The most notable information about this sample is its lack of obfuscation or encryption, as both the chat_id value (-4991861036) and the bot’s API token (8305917772:AAHAou...) are hard-coded, as Figure 8 shows in the disassembled code.

A screenshot of a disassembled code snippet from a software analysis tool. The code includes labeled memory addresses, assembly instructions like "push" and "mov," and data reference.
Figure 8. Hard-coded chat_id value and Telegram bot API token.

Once the malware has collected all the information, it constructs an HTTP request to exfiltrate the information. The structure of this HTTPS request through the Telegram API follows:

  • HTTP Method
    • POST (submission of the collected information)
  • Base path and bot token
    • /bot prefix (required for all Telegram bot API calls)
    • Concatenated bot API token (8305917772:AAHAou…)
  • API Method (URI path)
    • /sendDocument (tells Telegram what action the bot should perform. In this case, it is attempting to send a file (e.g., PDF, ZIP) to a chat)
  • Protocol
    • HTTP/1.1 (indicates the version of the Hypertext Transfer Protocol being used for the communication)
  • HTTP Headers
    • User-agent (set to SystemInfo Bot/2.0)
    • Content-Type (set as multipart/form-data with a boundary set as systeminfoboundary)
  • HTTP Request Body
    • Form-data, containing the names:
      • chat_id (The unique identifier for the target chat)
      • caption (Text to accompany the file)
      • document (The file to be sent, which in this case is a PNG file named screenshot.png)

The content of the exfiltrated information contains different information from the compromised machine, including:

  • CPU
  • RAM
  • Disk
  • GPU
  • Administrator rights check
  • Windows User Account Control (UAC) status

Figure 9 shows an exfiltration request revealed using Burp Suite that contains an example of the data collected by the malware sample.

A screenshot of a "POST" request sent to a Telegram server. The details include connection information, user-agent, and content type. The system information shows the OS as Windows 10 Enterprise, CPU as Intel(R) Core(TM) i5-3470, and memory status with 1.9GB available out of 8GB. Other technical details about proxy and wireless configurations are visible.
Figure 9. Data exfiltration through the Telegram bot API.

The text in the image is in Russian (i.e., ДОПОЛНИТЕЛЬНАЯ ИНФОРМАЦИЯ, which translates to Additional Information) and uses Cyrillic characters, which require specific encodings like UTF-8 to properly decode.

Sample Two: XWorm + XMRig CoinMinder + Data Exfiltration

SHA256 hash: f2a326cff405299e4ebdfaac955c52fc7e496544eaa0921ecad4816cb3ae3a27

Pivoting on characteristics of the first sample, we found several matches using specific patterns based on the smart contract method function (0xb68d1809). Among these, we identified a 64-bit Windows PE sample that leverages the Aeternum botnet to simultaneously drop an XWorm binary, an XMRig cryptocurrency miner and a data exfiltrator.

The sample is named XBinderOutput_protected.exe and written in C/C++. This PE file is a PyInstaller-packed application containing a Python 3.14 script named XBinderOutput_protected_temp.py.

The embedded script implements multi-layer cryptographic decryption using ChaCha20, AES-CTR and AES-CBC to recover an encrypted payload. The payload is then written to the temporary directory as esewurmgvbqt.exe and executed with a hidden window. The script includes anti-analysis checks for virtual machine environments and debugger presence.

Like the previous sample for Aeternum loader, once executed, this second sample made a JSON-RPC request using HTTP to the Polygon blockchain containing Aeternum’s to and data values. An HTTP 200 OK response was returned as expected, indicating that a command payload was found and its content returned. Figure 10 shows an example of this traffic.

A screenshot of a Wireshark window showing an HTTP POST request. The window displays headers and raw data and specific details. There are fields like "content-type: application/json" and "x-frame-options: SAMEORIGIN." The bottom shows options for filtering and export, with a search button labeled "Find text.
Figure 10. Polygon’s blockchain JSON-RPC request and response.

This time, the hexadecimal value response is not encrypted but converts directly to plain text. After translating the hexadecimal values to ASCII, we found a Pastebin URL as noted below in Figure 11.

A hexadecimal data table with offset values on the left and decoded text on the right. The decoded text includes a URL among other characters.
Figure 11. Decoding Aeternum’s C2 command.

This URL contains the /raw/ URI path that is designed to return the data as-is, without any further processing by the service. Thus, the malware has less work to do in terms of parsing or processing the retrieved information. This URL returned configuration data for the XMRig cryptocurrency miner.

After the malware retrieved data from the Pastebin URL, it started two binaries it had dropped to the infected host, one for an Xworm client and one for an XMRig cryptocurrency miner.

XMRig CoinMiner Analysis and Configuration

The Pastebin URL returned the XMRig cryptocurrency miner configuration data as a JSON object containing different fields. These fields included mining-based settings such as:

  • Algorithm
  • API-endpoint
  • Max CPU
  • Password
  • Pool
  • Wallet address

It also included two behavior-based options:

  • The stealth-target option that enables evasive behavior by blocklisting system monitoring utilities. It triggers a process suspension and its related mining activity upon the execution of diagnostic tools (e.g., Process Hacker) to mask the miner’s footprint and resource consumption.
  • The kill-targets option that implements process termination as a persistence and resource-optimization strategy. It identifies and kills active processes associated with endpoint security software and distributed computing programs to prevent system remediation and ensure maximum CPU allocation for the miner.

The associated Pastebin URL occasionally returns different data for the XMRig configuration. Despite these changes, the data structure remains identical. Figure 12 displays an example of the XMRig configuration data seen in June 2026.

A screenshot of a programming code snippet displayed in a browser window on the pastebin.com website. The code includes parameters for a mining pool, password, and other configurations such as keepalive, SSL, and API endpoints. It lists processes and stealth targets related to a server setup.
Figure 12. Pastebin XMRig cryptocurrency miner configuration structure.

XWorm RAT Analysis and Network Activity

In addition to the XMRig cryptocurrency miner, the main sample dropped an XWorm client named XWormclient.exe. This filename is the default name used when using the XWorm v7.4 builder, indicating that the author generated and bound it into the malicious package.

We extracted the Xworm sample's configuration using CAPE’s community parser for XWorm. This dump of information contains configuration information as shown below in Figure 13, including:

  • Version of the builder (XWorm v7.4)
  • Mutex
  • C2 server
  • IP address
  • Port
  • Key
A command prompt window showing a script execution. The details include various IP addresses, ports, and paths. Mentions of "Python," "CAPE," and "USB" are visible.
Figure 13. XWorm configuration extraction using the CAPE parser.

Armed with this information, specifically the C2 server key, C2 communication port and XWorm version values, we tricked the sample into connecting to a controlled instance of the matching XWorm panel version. Figure 14 shows a screenshot of the C2 panel after the XWorm sample connected to our controlled instance.

A screenshot of XWorm V7.4, with open windows displaying system information and processes. Details include IP addresses, usernames, and software versions, with CPU and RAM usage at the top.
Figure 14. XWorm bot panel controlling a compromised host.

Data Exfiltration From the Compromised Host

During the final stage of this Aeternum sample's execution, the injected system process starts an information gathering and encryption process.

Figure 15 shows an outbound connection HTTP POST request to a C2 server at 193.221.200[.]219 with a custom user-agent (cpp-httplib/0.18.3) and JSON values containing two keys with Base64-encoded values.

A screenshot of a Wireshark interface displaying HTTP stream data. The window shows a POST request to an API endpoint with headers, including content type and user agent details, followed by JSON data containing encoded information. The interface includes options for data representation and search functions at the bottom.
Figure 15. HTTP C2 exfiltration with base64-encoded data.

After further analysis and reverse engineering to understand the meaning of those two keys, we discovered that the uqhash value contains an AES-128 encryption key. We also discovered the data value contains the exfiltrated data in an encrypted blob form.

The following section explains the encryption details and the decryption process we followed to reveal the exfiltrated information.

Encryption Routine

The encryption routine takes raw input bytes and pads them with 0x00 until the length is a multiple of 16 bytes. It then derives a fixed 16-byte key by truncating or zero-extending the provided hexadecimal input. The data is processed block-by-block using a 16-byte block cipher in Electronic Code Book (ECB) mode, producing a deterministic ciphertext where each block is independently encrypted. The result is written out without any IV, chaining or authentication, closely matching a typical minimal malware-style encryption wrapper.

The encryption routine has the following characteristics:

  • Algorithm used: AES-128 (16-byte block cipher) in ECB mode
  • Key properties: no IV, deterministic output, zero padding (non-standard), identical plaintext blocks → identical ciphertext blocks
  • Context in this test: binary data from a file is padded and encrypted in-place using a fixed 16-byte key derived from CLI hexadecimal input, mimicking a simple malware/configuration protection routine

Decryption Routine

To decrypt the required information, we developed a script to reverse the encryption process identified during our analysis and reverse engineering. This script takes two parameters:

  1. The encrypted payload file dump
  2. The hexadecimal representation of the Base64-decoded AES-128 key as a single concatenated string

Figure 16 shows the execution of the decryption script, which in this case generated a 580-byte data dump.

A screenshot of a terminal window displaying a Python decryption command. It shows the file path and commands with input and output file details.
Figure 16. Automated payload decryption using a Python script.

By viewing the contents of the output file, the exfiltrated data is revealed as shown below in Figure 17.

A screenshot of a terminal window displaying the decryption process of an encrypted file. Information includes status code, computer name, username, hash rate, pool details, CPU specifications, client details, and other technical parameters.
Figure 17. Decrypted Information exfiltrated to the C2 server.

Certain behavior (i.e., drop of a .sys file) and network patterns (e.g., URI path, JSON object attributes) match with ZingoStealer reported by Cisco Talos on April 13, 2022. However, we cannot fully attribute this activity to ZingoStealer.

Sample Three: Python Malware Source Code Analysis

SHA256 hash: ea1b6ff3a0c1a749b9f09d66789973321d63d8896b48f7345193bdad512950a2

Python Source Code Analysis

Our third sample is a Python script file containing the source code for the Aeternum malware. The key element used to confirm its association with the Aeternum operation is the data value 0xb68d1809, which functions as the unique function selector used to query the Polygon smart contract.

The code contains a blockchain-based fall-back mechanism to counter infrastructure takedowns. By executing a read-only eth_call to a specific Polygon smart contract, the malware can retrieve and decrypt new C2 domains on the fly. This decentralized dead-drop resolver, combined with the Star Drop space-themed Telegram formatting, highlights an operation designed for resilience and stealth. Figure 18 below shows a section of the Python script illustrating this.

A screenshot of Python code defining a function. It includes JSON-RPC request setup, error handling with response checks, and data conversion for domain retrieval. The code retrieves and decodes a domain, highlighting text processing and exception handling.
Figure 18. The get_domain() function used to retrieve C2 domains from the smart contract.

Analysis of the malware’s source code reveals a multi-staged infection chain that begins with a social engineering lure impersonating a DBeaver installer. To ensure it only executes on high-value targets, the code includes rigorous anti-analysis routines that check for specific sandbox usernames, machine names and a minimum of 8 GB of RAM.

Notably, it validates the presence of Zone.Identifier alternate data streams in a user account's Downloads folder to confirm the system is not a pristine, empty virtual machine. Once validated, the malware establishes persistence by creating a disguised shortcut in the Windows Startup folder and employs an Early Bird APC injection technique.

This technique involves spawning a suspended, signed binary (dpapimig.exe) and injecting shellcode into its address space, effectively executing the malicious payload before security hooks are fully initialized. Figure 19 below shows a section of the Python script representing this.

A screenshot of a code snippet written in Python. It features lists of usernames and computer names, as well as checks for system information such as platform use and RAM size. The code includes functions and conditional statements, and the name "dbeaver" is mentioned as a build.
Figure 19. Block-listed user and computer names with memory check.

Exfiltration via the Telegram API: Python Source Code

The source code further details an aggressive focus on cryptocurrency data exfiltration. It features hard-coded routines to harvest credentials from over 55 cryptocurrency browser extensions and 10 popular desktop wallets. Data exfiltration and C2 communication are handled via a hybrid architecture.

While primary reconnaissance is sent via Telegram, the main C2 loop uses obfuscated JSON payloads padded with junk data to break traffic signatures. Figure 20 below illustrates this in a section of Python script.

A screenshot of a Python script for web scraping and automation. The code retrieves the computer name, IP address and gathers system information like OS platform and Windows Defender status. It also initializes a Telegram bot communication and attempts to scrape extensions and wallet information. The script utilizes libraries such as `os`, `platform`, and `requests`.
Figure 20. The send_tg() function used for data exfiltration via Telegram.

The full table of the malware indicators can be found in the Indicators of Compromise section of this article.

Blockchain Reconnaissance

The key to tracking the Aeternum botnet lies in the Polygon smart contract's function selector, 0xb68d1809, which resolves to the getDomain() function. The malware calls this public function to retrieve an XOR key and Base64-encrypted C2 domain stored in the contract's storage slot. The permanence of this 4-byte selector across all Aeternum malware samples provides a reliable cryptographic fingerprint, which ties all related activity back to the same campaign.

The smart contract architecture is simple but resilient, using storage slot 0 for the admin (deployer's wallet) address and slot 1 for the encrypted domain. While the getDomain() function is public for malware retrieval, a second critical selector, 0xb249cd2d (updateDomain), is an admin-only function used to rotate the C2 domain. Transactions linked to the primary operator's smart contract address, associated with the moniker LenAI, confirmed they actively use this updateDomain() method to push new C2 information, such as hxxps[:]//cdnjsdelivr[.]beer/, to the blockchain.

Figure 21 below shows a flowchart of this operation.

A flowchart illustrating a security breach pattern. Two nodes labeled "updateDomainA" lead to the same destination. One transition shows encrypted code leading to "getDomainA". The other shows code leading to the same endpoint. The endpoint displays a red bug icon, symbolizing a vulnerability or malware.
Figure 21. Aeternum blockchain operation.

Static analysis of the Ethereum virtual machine (EVM) bytecode from all three samples indicates a single threat group is iteratively refining the codebase. Despite variations in deployment addresses and sequential compiler upgrades (from solc 0.8.0 to 0.8.30), the contracts maintain an identical state-management architecture and share the three fundamental function selectors (0xb249cd2d, 0xb68d1809 and 0xf851a440).

These technical details, including progressive gas optimization and updated error messages, prove attackers are refining and redeploying this same codebase over time. This establishes Aeternum as an evolving threat infrastructure.

Conclusion

The Aeternum botnet is one of the latest threats leveraging blockchain-based botnets. Attackers are migrating from conventional self-hosted C2 mechanisms to more evasive and resilient alternatives. They are hiding malicious payloads in smart contracts, such as those on the Polygon blockchain, a trend exemplified by Aeternum.

This investigation shows that malware developers are leveraging the blockchain as a decentralized communication mechanism for their operations. They are also leveraging Aeternum as a botnet selection for the C2 management console. We expect this trend to continue.

Throughout the duration of this study, our Advanced Threat Prevention security solution successfully identified and recorded more than 29,000 detection events (as of June 4, 2026).

Palo Alto Networks customers are better protected from the threats discussed above through the following products and services:

If you think you may have been compromised or have an urgent matter, get in touch with the Unit 42 Incident Response team or call:

  • North America: Toll Free: +1 (866) 486-4842 (866.4.UNIT42)
  • UK: +44.20.3743.3660
  • Europe and Middle East: +31.20.299.3130
  • Asia: +65.6983.8730
  • Japan: +81.50.1790.0200
  • Australia: +61.2.4062.7950
  • India: 000 800 050 45107
  • South Korea: +82.080.467.8774

Palo Alto Networks has shared these findings with our fellow Cyber Threat Alliance (CTA) members. CTA members use this intelligence to rapidly deploy protections to their customers and to systematically disrupt malicious cyber actors. Learn more about the Cyber Threat Alliance.

Indicators of Compromise

Table 1 contains indicators for the Aeternum loader (Sample 1).

Type Value Description
SHA256 hash 5bfb25b8255b61e5ffdf6804451534bcfa9f1dfd225e6c8cdcefb5f50d846898 Aeternum C++ loader executable
SHA256 hash 1505eda3da68e2ff9919b55a31018bd30a991236f041aee835f3bc4e430ce505 Malicious downloaded DotNetZip.dll
Filename DotNetZip.dll Malicious payload executed by the loader
Filename putty.exe Benign file downloaded for testing/staging
Filename Wmi_Framework_APIKEY_wmsnet_<random_value>.lnk Startup link for persistence
Filename wmiframework.exe, ZrvEsJQzWQ.exe, STAAAAAS.exe Supporting binaries
Domain api.telegram[.]org Telegram API endpoint for exfiltration/C2 (used in DLL). (This domain is not inherently malicious, but could be viewed as part of a potential pattern of suspicious activity.)
Repository hxxps[:]//github[.]com/lencod/ Repository hosting malicious file artifacts
Repository hxxps[:]//github[.]com/Mash3Do/ Repository hosting malicious file artifacts
Telegram ID -4991861036 Hard-coded chat-id for Telegram C2 bot
Telegram Token 8305917772:AAHAou... Hard-coded Telegram bot API token
Contract Address 0x04E25a563f159308FC3E15fE9Ccc9D2CF623D0cc Sample 1 Polygon smart contract address
Contract Address 0x16dA95799CB8aB203f83e01AFC030B1217198Da4 Sample 1 Polygon smart contract address
Contract Address 0x1D50703722729dD68e89D819F69eFc5Fb206bBe7 Sample 1 Polygon smart contract address
Contract Address 0x27c7c36981c1ed5cFA2DCDb4B43C27A6BaF6bEa8 Sample 1 Polygon smart contract address
Contract Address 0x4dcE7d4b1229F3705BDB70341484cF2EEE36432e Sample 1 Polygon smart contract address
Contract Address 0x55b4F951d5Ac035C21B170C73C0A930a641b718C Sample 1 Polygon smart contract address
Contract Address 0x6da31EB2A016074ffd5519326573E78E2677E4C8 Sample 1 Polygon smart contract address
Contract Address 0x737791081A398151195a753Fb49f9c1b8bc1fCDB Sample 1 Polygon smart contract address
Contract Address 0x7D2D8A4A6E8D89cf5C151C4f68A521490D9779B0 Sample 1 Polygon smart contract address
Contract Address 0x8d2BaEc2687F59eE1EE7BFd322D33325f5E004ee Sample 1 Polygon smart contract address
Contract Address 0xb3EF2D08Bf25a7daB9d8b98d64E564eA1f6Db924 Sample 1 Polygon smart contract address
Contract Address 0xb8fB2bfb182A172b29C365AD6CF743449975C418 Sample 1 Polygon smart contract address
Contract Address 0xbD6e817Cc510EC3DA5651B5a3AC595d34C0CF1af Sample 1 Polygon smart contract address
Contract Address 0xC37fB924cF5996C9e676BBA399bDfc5F936B3572 Sample 1 Polygon smart contract address
Contract Address 0xC41342908f98E813862EDFe47Ac3af676F8098C9 Sample 1 Polygon smart contract address
Contract Address 0xc7199C1dbCd82c4E002327Aa3EC9158F434a6aCE Sample 1 Polygon smart contract address
Contract Address 0xCE476E6f4d83a7a086Cbcdf0FE2E8f221e47e81C Sample 1 Polygon smart contract address
Contract Address 0xD69A36439FffD145ADAcacB94fDe6f8b3546a361 Sample 1 Polygon smart contract address
Contract Address 0xf9438b4E3200AE1611eD3d03310c803FDdf67672 Sample 1 Polygon smart contract address
Contract Address 0xfbC267200f9e5749045f32dbB55BB16615f1CE5F Sample 1 Polygon smart contract address
Contract Address 0xFDB8b139EeacD17ea7c10c256eA77Ba6Dff18D7d Sample 1 Polygon smart contract address
Contract Address 0xFdfB8c4e827c2d053749C8F2f2058548dde0d073 Sample 1 Polygon smart contract address
RPC Endpoint hxxps[:]//polygon.rpc.hypersync[.]xyz/ Polygon RPC endpoint
RPC Endpoint hxxps[:]//polygon-mumbai.g.alchemy[.]com/v2/demo Polygon RPC endpoint
RPC Endpoint hxxps[:]//polygon-mumbai-bor-rpc.publicnode[.]com Polygon RPC endpoint
RPC Endpoint hxxps[:]//api.noderpc[.]xyz/rpc-polygon-pos/public Polygon RPC endpoint
RPC Endpoint hxxps[:]//polygon-mumbai[.]gateway.tenderly[.]co Polygon RPC endpoint
RPC Endpoint hxxps[:]//public.stackup[.]sh/api/v1/node/polygon-mainnet Polygon RPC endpoint
RPC Endpoint hxxps[:]//gateway.tenderly[.]co/public/polygon Polygon RPC endpoint
RPC Endpoint hxxps[:]//polygon-amoy.gateway.tenderly[.]co Polygon RPC endpoint
RPC Endpoint hxxps[:]//rpc[.]poolz[.]finance/polygon Polygon RPC endpoint
RPC Endpoint hxxps[:]//gateway.tenderly[.]co/public/polygon-mumbai Polygon RPC endpoint
RPC Endpoint hxxps[:]//api.zan[.]top/polygon-amoy Polygon RPC endpoint
RPC Endpoint hxxps[:]//endpoints.omniatech[.]io/v1/polygon-zkevm/testnet/public Polygon RPC endpoint
RPC Endpoint hxxps://rpc[.]polygon-zkevm[.]gateway[.]fm Polygon RPC endpoint
RPC Endpoint hxxps[:]//polygon-pokt.nodies[.]app/ Polygon RPC endpoint
RPC Endpoint hxxps[:]//polygon-amoy.therpc[.]io Polygon RPC endpoint
RPC Endpoint hxxps[:]//rpc.polygonsupernet.public.arianee[.]net Polygon RPC endpoint
RPC Endpoint hxxps[:]//public.stackup[.]sh/api/v1/node/polygon-mumbai Polygon RPC endpoint
RPC Endpoint hxxps[:]//polygon-zkevm-mainnet[.]public.blastapi[.]io Polygon RPC endpoint
RPC Endpoint hxxps[:]//polygontestapi.terminet[.]io/rpc Polygon RPC endpoint
RPC Endpoint hxxps[:]//polygon-mainnet.g.alchemy[.]com/v2/demo Polygon RPC endpoint
RPC Endpoint hxxps[:]//polygon-zkevm.drpc[.]org Polygon RPC endpoint

Table 1. Indicators associated with Aeternum loader (sample 1).

Table 2 contains indicators for XWorm and XMRig cryptocurrency miner, and C2 exfiltration activity (sample 2).

Type Value Description
SHA256 hash f2a326cff405299e4ebdfaac955c52fc7e496544eaa0921ecad4816cb3ae3a27 XBinderOutput_protected.exe (Main sample)
SHA256 hash 4e24bbd0fabac6c3efcec943046afbfd332b2c0108a13becfda23a0e26f9ff5f XWormClient.exe executable
SHA256 hash 81bb80d9c5a97dc41b65f6248c131963c91346eb4fb672836b3d53ae67564d9f XMRig coin miner (miner.exe)
Domain gulf.moneroocean[.]stream XMRig mining pool
Wallet Address 82pNS8tBnvZ5cmV1iU9cXdQmhGz95P18fZpASBrxtaSF1ToTmZtf3HGHrdXMt1Znuu8BLU17koPs2hTXxTajdTviLcgbbAi XMRig Monero wallet
IP Address:Port 193.221.200[.]219 HTTP C2 exfiltration IP address
C2 URL hxxp[:]//sekirolegion.duckdns[.]org/api/endpoint.php C2 contacted by malware (linked to exfiltration IP)
Contract Address 0x75cD25791A60ab3451E2d2feB5ec46c6f541C2B8 Sample 2 Polygon smart contract address

Table 2. Indicators for XWorm + XMRig cryptocurrency miner + C2 exfiltration (sample 2).

Table 3 contains indicators for the Python malware (sample 3).

Type Value Description
SHA256 hash ea1b6ff3a0c1a749b9f09d66789973321d63d8896b48f7345193bdad512950a2 Python script sample
Staging Domain download.sftp-api-group-wechat[.]com Staging domain for malware components
C2 Domain update.constant-path[.]xyz C2 domain (retrieved from contract)
C2 Domain update-launcher[.]xyz C2 domain (retrieved from contract)
C2 Domain test-steve[.]cyou C2 domain (retrieved from contract)
Telegram Bot 7356125890:AAF5ncBIc2pJrEfYPAmy2g9YS7B5NjmtwTc Telegram bot token for exfiltration/C2
Telegram Chats -1002535992165, -1002144122983 Telegram chat IDs
Contract Address 0xb0874252a7359AA701F3F144A1f03A6e0DA8aE6D Sample 3 Polygon Smart Contract address
XOR Key helo1 XOR key for C2
XOR Key $m7*rYpry3 XOR key for domain decryption
Persistence PythonLauncher-*.lnk Shortcut created in Windows Startup folder
Injected Process dpapimig.exe Signed binary used for Early Bird APC injection
Disguised Binary WmiPrvSE.exe Disguised binary

Table 3. Indicators for the Python malware (sample 3).

Table 4 contains the shared blockchain indicators.

Type Value Description
Function Selector 0xb68d1809 getDomain() function selector (used by all samples)
Function Selector 0xb249cd2d updateDomain() function selector (admin only)
Function Selector 0xf851a440 admin() function selector (auto-getter)
Operator Address 0xcaf2c54e400437da717cf215181b170f65187abf LenAI's primary smart contract address
C2 Domain hxxps[:]//cdnjsdelivr[.]beer/ New C2 domain pushed by LenAI via updateDomain transaction

Table 4. Shared blockchain indicators.

Additional Resources

Enlarged Image