Is Chrome’s settings menu getting a search bar? What we know




Google and a group of security partners said on Nov. 2, 2026, that they had dismantled XCPE, a botnet hidden inside more than 1.3 million TV set-top boxes, most of them inexpensive Android TV boxes. According to Google’s Threat Intelligence Group, the device maker Videostrong Technology Co. built the backdoor into the boxes and sold access to criminals, who used owners’ home internet connections for ad fraud and residential proxy networks. The servers that controlled the botnet are down, but the backdoor is still on the boxes, and owners cannot remove it themselves.
Key points
XCPE turned ordinary TV boxes into a botnet, a network of devices that criminals control remotely. According to Google’s report, it worked in three layers:
Google says it saw the operators take live screenshots, inject keystrokes, and copy account details, device information, app lists, and system logs from infected boxes. Google ties two of the add-on programs, Moyu and Bird, to the BadBox operation. The FBI warned consumers about that operation, known as BADBOX 2.0, in a June 2025 public service announcement.
Most infected devices were Android TV set-top boxes, but Google also found the backdoor on telehealth devices, karaoke machines, and digital signage. (For more background on this kind of threat, see our explainers on backdoor attacks and pre-installed malware on Android devices.)
Google says it used legal action to take down the botnet’s control servers and the control domains of more than a dozen malware families. It also banned Videostrong and any future subsidiaries or affiliates from making certified Android devices or supplying software to other certified vendors. Japan’s National Police Agency, Lumen, HUMAN Security, Plume, Synthient, and TrendAI worked with Google on the operation, according to Google’s report.
There is no single test, but these checks will tell you whether your box is likely part of XCPE. Work through them in order.
| Red flag | Why it matters |
| The box was sold as “unlocked” or able to access free content | The FBI lists this as a possible sign of a compromised device |
| The brand is one you do not recognize | The FBI lists unrecognizable brands as a possible sign of a compromised device. Videostrong also makes boxes for other brands, so its firmware can ship under names you may not know |
| Google Play Protect is off and you did not turn it off | XCPE disables Play Protect’s app checks so it can install software silently |
| Apps appear that you never installed | The backdoor can install apps without asking |
| Heavy internet traffic from the box while it sits idle | Proxy software sends other people’s traffic through your connection |
| Settings change on their own | The operators can run commands on the box remotely |
Not in this case. Google requires device makers to pass compatibility and security tests before they can ship Google’s apps, but Google says Videostrong hid its code to get through a gap in those tests and loaded the malicious parts only after the box first started up. Plume found both Google-certified boxes and uncertified boxes in the botnet. Google has not said how many certified devices were affected.
Google says it has changed its review process and is improving how it checks firmware on certified Android TV devices. Certification is still worth checking for, but it is not proof that a particular box is clean, so check the other signs above as well.
Google recommends buying set-top boxes only from reputable manufacturers, and it keeps a list of its Android TV partners you can check before you buy. Skip boxes sold as “unlocked” or able to access free content, which the FBI lists as a possible sign of a compromised device. Once the box is set up, keep Google Play Protect on, install apps only from official app stores, and pass on any app that offers to pay you for your unused bandwidth. Google says those apps are one of the main ways illicit proxy networks grow.
Google warns that when one part of this criminal supply chain is disrupted, operators quickly switch to new loaders and tools. If your TV box matches the signs above, unplug it and replace it rather than waiting for a fix.
The post XCPE Botnet: Is Your Android TV Box Hacked? What to Do Now appeared first on McAfee Blog.








Authored by Aayush Tyagi
Malware-as-a-service (MaaS) is becoming increasingly accessible within online gaming communities and across the internet. Sophisticated malware that once required technical expertise to develop can now be obtained for free, giving aspiring hackers the tools to target unsuspecting victims. For younger users in particular, what begins as curiosity or experimentation can become a gateway into cybercrime, potentially desensitizing them to the real-world consequences of their actions.
Following our investigation into WeedHack, a malware-as-a-service campaign targeting Minecraft players, McAfee Labs has uncovered another operation linked to the same cybercriminal ecosystem. Called Marsalek, this campaign expanded its reach beyond Minecraft by disguising malicious software as popular gaming tools, cheats, and utilities for games including Roblox, Fortnite, and Counter-Strike 2.
Active from approximately December 2025 through May 2026, Marsalek offered free access to sophisticated information-stealing malware through a publicly accessible platform, complete with a dashboard that allowed users to create malicious files, track victims, and access stolen information. McAfee Labs identified more than 1,560 registered accounts, over 400 malicious files, and more than 29 distribution URLs associated with the campaign, illustrating the accessibility and potential reach of these operations.
Our investigation also uncovered a particularly concerning tactic known as a dual-hook infection. This occurs when a single malware infection uses two separate channels to collect and send stolen information, potentially allowing multiple cybercriminals to profit from the same victim. In Marsalek’s case, the malware deploys an additional information stealer called PureLog, which sends stolen data to a separate server. This means that while someone using Marsalek may believe they’re collecting stolen passwords and other personal information for themselves, the malware operator could also gain access to that information without their knowledge.
Like WeedHack, Marsalek highlights a troubling shift in the cybercrime landscape: powerful malware tools are becoming easier to obtain and operate, lowering the barriers for inexperienced users to engage in cybercrime. For unsuspecting gamers and everyday internet users, the consequences can be serious. Downloading what appears to be a free game modification or useful application could expose saved passwords, online accounts, cryptocurrency wallets, and sensitive personal files to cybercriminals.
Figure 1: Attack Vector
Marsalek provides its customers with two script builders, that enable users to build custom PowerShell and Python payloads, embedded with a unique user ID. It also provides EXE and ClickFix page builders.
Figure 2: Marsalek’s EXE Builder
By supporting multiple payload types, customers can target various python repositories and upload malicious code, share infected PowerShell script with unsuspecting users, create websites that implement ClickFix social engineering techniques and impersonate well known and commonly used software and game mods, thereby maximizing campaign reach and infection rates.
Marsalek’s infection chain remains largely consistent after the initial access vector. Marsalek relies on Python-based payload for stages 2 and 3. Stage 4 payload is PureLog infostealer malware sample that harvests a similar set of credentials but sends them to a separate C2 server.
PureLogs Stealer, first observed in 2022, was developed by a threat actor known as “PureCoder.” Since then, it has become a widely used, low-cost infostealer, with subscriptions available for as little as $59 per month.
This double credential harvesting reveals that the campaign is dual hooked. The attacker behind the campaign retains access to all the credentials harvested by Marsalek. Consequently, if any customer is able to infect a high value victim, then Marsalek’s author may be able to exploit the stolen credentials before the customer.
As a result, customers bear the operational risk and effort of running campaigns yet may not receive the full fruits of their labor.
Marsalek targets the following Browsers:
| Chromium | Thorium | Maple | Iridium | 7Star | CentBrowser |
| Chrome | Edge | Brave | Opera | Opera GX | Yandex |
| Chedot | Vivaldi | Kometa | Elements | Uran | Epic Privacy Browser |
| Fenrir | Catalina | Coowon | Liebao | QIP Surf | Orbitum |
| Dragon | 360Browser | CocCoc | Maxthon | Amigo | K-Melon |
| Torch | Sputnik | DCBrowser | Slimjet | UR Browser | Firefox |
Marsalek claims under its FAQ section that it can steal passwords and cookies from all Gecko based browsers, which is false, as it only targets Firefox. While its Firefox extraction logic could easily be adapted to other NSS-compatible Gecko browsers, it does not enumerate or target them explicitly.
It targets these Cryptocurrency browser extensions:
| Authenticator | Binance | Bitapp | BoltX | Coin98 | Coinbase | Core | Crocobit |
| Ever | ExodusWeb3 | Fewcha | Finnie | Guarda | Guild | HarmonyOutdated | Iconex |
| Kaikas | KardiaChain | Keplr | Liquality | MEWCX | MaiarDEFI | Martian | Math |
| Metamask2 | Mobox | Nami | Nifty | Oxygen | PaliWallet | Petra | Phantom |
| Ronin | Safepal | Saturn | Slope | Solfare | Sollet | Starcoin | Swash |
| TerraStation | Tokenpocket | Ton | Tron | XDEFI | Wombat | Trust Wallet | XMR.PT |
| Yoroi | iWallet | Equal | TempleTezos | Metamask | Pontem | Jaxx Liberty | XinPay |
It targets the following Cryptocurrency Desktop Wallets:
| Atomic | Exodus | Electrum | Electrum-LTC |
| Zcash | Armory | Bytecoin | Jaxx |
| Ethereum | Guarda | Coinomi | Monero |
Marsalek searches several commonly used user directories for files. Specifically, it scans the following locations:
%USERPROFILE%\Desktop
%USERPROFILE%\Documents
%USERPROFILE%\Downloads
%USERPROFILE%\OneDrive\Documents
%USERPROFILE%\OneDrive\Desktop
And they actively target the following keywords:
| passw | mdp | motdepasse | mot_de_passe | login | secret |
| account | acount | paypal | banque | metamask | wallet |
| crypto | exodus | discord | 2fa | code | memo |
| compte | token | backup | seecret | passphrase | seed |
This shotgun approach of targeting such a massive list of applications and files ensures that almost every infected user yields something of value.
In our analysis, we found that Marsalek largely focused on impersonating widely used Roblox script executors, such as Swift executor, Solara executor, MatrixHub External and Matcha External. Some well-known Minecraft clients were also targeted, such as Shadow Client and Boss Client.
Threat actors also created look-a-like websites to lure innocent users and infect them.
Such infection vectors carry massive potential to infect young players across the internet.
Figure 3: Geographical Prevalence
Over the last 6 months, McAfee has spotted that Marsalek was most prevalent in United States, followed by Germany, United Kingdom, India, Brazil, Poland, Netherlands, Italy and Canada.
McAfee has seen a rise in Malware-as-a-service campaigns in 2026. Selling malware was limited to the Dark Web earlier, but in recent times, we’ve noticed that sophisticated malware is just a Google search away. Even the cost of acquiring malware has reduced significantly, with many campaigns offering free tier to attract more customers. This low risk-high reward scenario attracts a lot of teenagers who do not comprehend the consequences of their actions.
These symbiotic relationships between the attacker and their customers create a mutually beneficial ecosystem for both parties. Customers who lack any technical skills to create and manage a malware campaign gain access to ready-made malware. On the other hand, threat actors have limited bandwidth and can infect only a certain number of victims on their own. By having more than a thousand customers, they can significantly increase the reach and success of their campaigns.
Since this campaign is dual-hooked, the attacker effectively gets the first stab at their victims, walking away with the most profits. Purchasing the premium tier does not eliminate the risk for customers, as the campaign owner can shut down the C2 and bail out with stolen credentials and subscription fees anytime.
We’ve encountered a rise in malware posing as game hacks and legitimate tools. These campaigns prey on users looking for an easy way to access gaming software that is usually locked behind a paywall. Downloading these trojanized applications can allow threat actors to gain access to credentials saved on a victim’s device.
These stolen credentials are often sold on Telegram channels or dark web marketplaces, generating substantial profits for cybercriminals.
Infostealer logs have become the backbone of cybercrime in 2026, and such attacks are expected to rise exponentially in the coming years.
At McAfee Labs, we have been actively hunting for such malware campaigns, so you don’t need to worry. But it always helps to be informed and educated about the latest threats in the threat landscape and how to protect yourself and your loved ones against them.
| Step | User Experience | Behind the Scenes | Red Flags | How McAfee Helps |
| 1. You come across an exe file on discord. | Another user shared a file, claiming it to be a game hack or another cracked tool. | In most cases, these are trojanized software, laced with infostealer malware. | The file masquerades as a free version of a legitimate game client. | McAfee® Total Protection is regularly updated to combat evolving malware threats, including infostealers, ransomware, trojanized applications, and other emerging attack techniques. |
| 2. You discovered a website offering a cracked version of a recently released game. | The Website seems genuine, as it is well crafted and beautiful. | 1. It’s easier to create such websites now, due to the advancements in AI models.
2. Cracked games and software are often distributed with embedded malware. |
Since bypassing anti-piracy protections usually takes time and effort, “free” versions of recently released games are frequently used as a lure to distribute malware. | McAfee’s Web Protection help block malicious sites. |
| 3. You download a Minecraft or Roblox client, and it gets detected by your AV product. | The website mentions that sometimes AV products make mistakes, and you should disable your AV products to use the client. | The threat actors manipulate users into executing malware that is already known and detected by security solutions. | The website does not explain why their tool is being mistaken as malware. | McAfee’s Threat Explainer informs us why a certain file is being detected. |
| 4. You or someone you know has been contacted by a hacker claiming to have hacked your system. | Threat actors claim to know your IP address and show evidence that they have access to your webcam or to your system. | Threat actors reach out to their victims, to harass and bully them. | Reach out to someone you trust, such as a parent or guardian, and inform them about the incident.
Following the attacker’s instructions could lead to more damage. |
|
| 5. You’ve seen an infostealer malware available for free on the internet. | You came across GitHub repositories or Discord channels that share malware or malicious tools designed to compromise other users’ systems. | These malicious tools are often embedded with malware, targeting users who are enticed into downloading and using them.
|
Be cautious of free malicious tools available online. Malware is often developed by highly skilled threat actors who spend months refining their code to create FUDs. If you’re not paying for the product, you may be the product. |
McAfee® Total Protection is regularly updated to combat evolving malware threats, including infostealers, ransomware, trojanized applications, and other emerging attack techniques. |
Figure 4: Marsalek’s PowerShell Builder
Marsalek offered an enterprise grade dashboard that allows the customers to build and download malware, along with usage instructions on how to infect maximum victims. PowerShell and Python builders provide malicious script that can be appended to any legitimate file.
Figure 5: Fake CAPTCHA page
The fake CAPTCHA page builder provides an HTML file that impersonates Cloudflare CAPTCHA verification page and executes a malicious PowerShell command. EXE builder provides an EXE file, that on execution, follows the same kill chain.
Figure 6: Marsalek’s Dashboard
Marsalek provides a platform where users can see all their infected victims and all of the collected information from their system. It allows customers to search and filter victims by IP and status.
Figure 7: Heatmap of victim’s location
It provides a global heatmap of infected victims, allowing operators to quickly visualize infection activity at a glance. By presenting infections geographically, it provides a high-level overview of campaign activity, helping operators assess regional trends.
Figure 8: Wallet Injection Section
On the side pane (Highlighted in Red), it allows customers to view all collected data, including wallet injections, harvested passwords, files, and refresh tokens. Marsalek includes a premium section that is still under development (Highlighted in Yellow).
Figure 9: Statistics Section
It also includes a detailed statistics section that provides an overview of the operation’s activity. This section displays the total number of logs collected, along with a breakdown of logs categorized as spam, finished or pending review. It also shows the number of logs collected over the past week and provides a day-by-day breakdown of collection activity.
At the bottom of the page, the panel displays aggregated statistics for all collected credentials, categorizing them into passwords, cookies, files, and Discord tokens. It also summarizes all available injections and classifies them according to their target, such as cryptocurrency wallets, and Discord injections.
Another critical segment is the FAQ section of the website.
Figure 10: FAQ Section
Here, the attacker has created a detailed section that covers the following topics –
Most noticeably, the attackers advise their customers that they should set up their own XMR node or try to access a privacy friendly XMR node. Then they can exchange the stolen funds for Monero using privacy-focused services such as ETZ-swap or Trocador, which would prevent the funds from being tracked. These stolen funds can then be exchanged into any other cryptocurrency.
As discussed above, even though Marsalek offers 4 different initial vectors, the overall kill chain remains the same.
Figure 11: Marsalek’s stage 1 payloads
Here, the PowerShell (Highlighted in Red) and Fake CAPTCHA (Highlighted in Yellow) scripts are almost similar. They reach out to the C2 domain to download a PowerShell script.
This script downloads a portable Python runtime and configures it. Next, it downloads pip, which is a standard package manager for python. It uses pip to install more python packages, namely setup tools, cryptography, fernet, and requests.
The malicious python script (Highlighted in Green) downloads these packages directly. The EXE variant also checks for python first and then installs these packages. Marsalek uses Fernet symmetric encryption throughout the campaign.
Next, the malware downloads ‘python_setup.py’ from the C2 domain and executes it.
This payload checks whether the python file already has administrative rights. If not, it uses CMSTP UAC — (Connection Manager Service Telephony Profile (CMSTP) Installer and UAC (User Account Control) — bypass to gain admin privileges. This is the same technique we’ve observed in the original Weedhack malware campaign.
Here, the following INF is dropped in the temp folder and executed via CMSTP.exe.
Figure 12: Malicious INF file
CMSTP is Connection Manager Profile Installer, which is a legitimate tool which is used to install or remove remote access profiles on a system.
To gain admin privileges, the /au parameter is passed along with the file path.
cmstp.exe /au “C:\Users\admin\AppData\Local\Temp\wzyjbqkurc.inf”
Here, the /au (Highlighted in Red below) flag instructs the profile installer to install the connection profile for every user on the system, which inherently requires admin privileges. This triggers a standard User Account Control consent prompt.
Figure 13: Python code to bypass UAC prompt
Marsalek then identifies the consent prompt using the service name in the INF file, hides the prompt, and then simulates the Enter key (Highlighted in Green). This ensures that the INF file is executed with admin privileges.
The INF file relaunches python_setup.py, which inherits administrative privileges.
Next, the python script creates a WinDefConfig.cmd file in temp folder and executes it.
Figure 14: WinDefConfig.cmd file
This file adds 8 exclusion paths and 15 exclusion processes to windows defender, ensuring the subsequent payloads won’t be detected.
Next, the malware decrypts and drops the stage 3 payload ‘svc.py’ into the temp folder and executes it.
Svc.py has over 1400 lines of python code that performs the notorious activity we’ve mentioned at the beginning of the blog.
In the beginning of the script, Marsalek downloads a few more Python libraries, such as pycryptodome and psutil.
Figure 15: Chromium Browsers targeted by Marsalek
Next, it defines the target applications and their corresponding file paths. This list is later used to iterate through each entry and gather all accessible credentials.
Figure 16: Python code to set up Native Functions
Then, the malware uses Python’s ctypes library to directly invoke native Windows APIs from kernel32.dll. These APIs are later used for process manipulation and DLL injections.
Figure 17: Python code targeting Chromium Browser
Firstly, Marsalek targets 32-chromium browser iteratively. It checks whether a browser is installed. Then, it identifies available user profiles, looks for corresponding SQLite database. It retrieves the decryption key from the database and uses ‘CryptUnprotectData’ to decrypt it.
Next, it searches for encrypted passwords in the database and checks the prefix ‘v10’, which indicates that the password uses a Chromium encryption format based on AES-GCM. The encrypted password is stored as the following string –
‘v10’ + 12-byte initialization vector + encrypted password + GCM authentication tag
Then it initializes an AES-GCM decryptor using the decryption key and the initialization vector to decrypt the actual password and throws away the authentication tag. It converts the decrypted bytes into a string to get the final plaintext password.
If the encrypted password does not have the ‘v10’ prefix, then it simply uses ‘CryptUnprotectData’ API to decrypt it.
It follows the same process for cookies, where the cookies are extracted from the SQLite database and decrypted using the identified decryption key and the initialization vector. It converts the cookies into Netscape format and also tracks the number of cookies stolen, before sending all the data to the C2 domain.
Next, it checks for 56 browser extensions. If any are present, it zips their entire local storage data and uploads the archive to the C2 domain.
Figure 18: Python code targeting Chrome’s App-Bound Encryption
Next, it shifts its focus to browsers that utilize Chrome’s App-Bound Encryption. These browsers store encrypted master key inside their local configuration files.
Instead of decrypting this master key using Windows cryptographic APIs, these browsers use their Elevation Service for decryption. Before decrypting the key, the Elevation Service validates the calling process by verifying that its executable path corresponds to a legitimate browser binary located in an approved directory.
Hence, the key is decrypted only when the request originates from the legitimate browser process.
Figure 19: List of targeted browsers that use Chrome’s App-Bound Encryption.
Marsalek starts by checking for installation of Chrome, Edge, or Brave on the system and, if so, it collects the encrypted master key and starts the browser in a suspended state. It then creates a named pipe between the suspended browser and itself for communication.
Marsalek then decrypts a DLL and drops it to disk. Using windows APIs, Marsalek injects the DLL into the suspended browser process. Then it sends the encrypted master key to the injected DLL using the named pipe. The DLL requests the browser’s Elevation Service to decrypt the master key. Since the DLL is executing within the browser address space, the request appears to originate from the legitimate browser process, allowing the DLL to receive the decrypted key.
Figure 20: Python code decrypting cookies using the master key.
Once the sample has the decrypted key, it passes it into the following functions –
extract_v20_cookies
extract_v20_passwords
extract_v20_tokens
These functions access different SQLite databases under different profiles and collect encrypted data. Next, they ensure the data contains the prefix ‘v20’ which indicates the use of App-Bound Encryption (ABE). Then it initializes an AES-GCM decryptor to decrypt various credentials and sends them to the C2 domain.
Next, Marsalek sets its sight on Firefox.
Figure 21: Python code targeting Firefox
It searches for user profiles under the following path –
%APPDATA%\Mozilla\Firefox\Profiles\
For each profile, it looks for cookies.sqlite, which is Firefox’s cookie database. Marsalek queries these databases and searches for Hostname, Cookie name and value. It converts these cookies into Netscape format, counts the total number of cookies, and stores the data for exfiltration.
Next, it searches for Firefox’s NSS3.dll. This is Mozilla’s cryptographic library and is used for operations involving protected credentials. It initializes NSS3.dll into memory against collected Firefox profiles. That allows NSS to access the cryptographic material associated with that profile.
Next, Marsalek collects encrypted credentials from Firefox’s logins.json file. Decrypts the harvested credentials using NSS’s ‘PK11SDR_Decrypt’ function. Instead of implementing Firefox’s decryption algorithm itself, Marsalek leverages Firefox’s legitimate NSS library to perform the cryptographic operation.
It stores the credentials in the following format –
{ “browser”: “Firefox”, “url”: host, “username”: user, “password”: pw }
These are then sent to the C2 server.
As mentioned earlier, Marsalek claims that it can steal passwords and cookies from all Gecko based browsers, which is false, as it only targets Firefox.
Figure 22: Python code targeting Discord
Marsalek contains 26 hardcoded Discord paths, targeting both the Discord desktop client and Discord tokens present in web browser’s local storage.
Since discord desktop application encrypts its locally stored tokens, Marsalek captures the encrypted key and uses Windows ‘CryptUnprotectData’ API to recover the AES key. It then scans LevelDB files for the string ‘dQw4w9WgXcQ:’ which serves as a marker for Discord token entries. Marsalek captures the token and decrypts it by setting up an AES-GCM decryptor using the recovered AES key.
Next, the malware validates the token, by sending it in a GET request to Discord’s API. Using the API’s response, Marsalek collects additional details such as, User ID, Email address, linked Phone number, username and global name. These details are then stored for exfiltration.
If the Discord desktop application is not present, Marsalek searches various web browsers for stored Discord tokens, by using the following regex pattern –
r”[\w-]{24}\.[\w-]{6}\.[\w-]{25,110}”
These tokens are stored in plain text and do not require a decryption key. These tokens are also validated through Discord’s API to ensure that only active tokens are captured, avoiding outdated tokens or random strings, and are subsequently stored for exfiltration.
Figure 23: Python code targeting Telegram and Mullvad VPN
Marsalek targets Telegram in a straightforward manner. It terminates any running Telegram processes and checks if the following path exists –
%APPDATA%\Telegram Desktop\tdata
If the path exists, then it zips the entire folder and stores it, before sending it to the C2 domain. This folder contains local application data and session-related information. This stolen data can allow the threat actor to execute account takeovers or other similar Telegram-related attacks.
Similarly, Marsalek checks if Mullvad VPN is installed on the system. If it does, then it invokes Mullvad’s command-line interface to retrieve information about the currently configured Mullvad account. It collects metadata and stores it for extraction.
Figure 24: Python code targeting sensitive files and Cryptocurrency wallets
Malware iterates through a list of directories present in the ‘PATHS_TO_SEARCH’ variable. It enumerates all the files under this directory and filters them according to their extension. These acceptable extensions are stored in the ‘ALLOWED_EXTENSIONS’ variable.
Next, it filters these files using filename keywords present in ‘FILE_KEYWORDS’ variable. Then it copies matching files to its staging directory for subsequent collection and exfiltration.
Alongside this activity, Marsalek checks the presence of 12 cryptocurrency wallet applications and, upon discovery, compresses their local storage data into a ZIP archive for exfiltration.
Figure 25: Python code for Injecting into Exodus and Atomic Wallet
In this section of the code, the malware checks if Exodus or Atomic wallet is present in the system. If these applications are present, Marsalek sends a GET request to the C2 domain, downloads two Atom Shell Archive (.asar) files, and replaces the corresponding files in the local directory. This allows the threat actors to maintain a backdoor in both of these wallets.
Finally, Marsalek creates another GET request to download the stage 4 payload and copies it into the temp folder.
The final stage payload is PureLog infostealer malware. It is obfuscated with DotNet Reactor.
Figure 26: Decrypted PureLog Malware
This sample reads an embedded resource which is encrypted with Triple DES (3DES) symmetric-key block cipher. It then initializes a 3DES decryption routine (highlighted in green) using a hardcoded 3DES key and initialization vector (highlighted in red).
After decrypting the embedded resource, the sample decompresses the resulting data using GZIP. The decompressed payload is then loaded directly into memory and executed without being written to disk.
The next fileless stage is also obfuscated with .Net Reactor. This payload targets a similar set of credentials as the earlier Python script, with a few differences.
PureLog has a list of over 35 browsers that it targets.
Figure 27: Browsers targeted by PureLog Malware
Other than the browsers targeted by Marsalek, it uniquely targets the following browsers.
| QQBrowser | Nichrome | Chromodo | Atom Browser by Mail.Ru |
Similarly, it has a list of over 48 Browser Extensions.
Figure 28: Browser Extensions targeted by PureLog Malware
This list overlaps with Marsalek’s browser extension list, except it uniquely targets the following 19 browser extensions.
| BitClip | Solana Wallet | EOS Authenticator | Trezor Password Manager | Authy |
| TezBox | Cyano Wallet | BitKeep | GAuth Authenticator | Rabet |
| ZilPay | Exodus Web3 | Trust Wallet | Braavos Smart Wallet | Yoroi |
| MetaMask | Guarda Wallet | BitKeep | Waves Keeper |
NOTE: We’ve considered Chrome extension IDs to identify the above-mentioned differences. Entries with the same name in both lists have different IDs.
In a similar fashion, PureLog targets the following desktop applications.
| Atomic Wallet | Bitcoin-Qt | Dash-Qt | Electrum |
| Ethereum | Exodus | Jaxx | Litecoin-Qt |
| Zcash | Foxmail | Telegram | Ledger Live |
At this stage, PureLog only checks if any of the above applications are present in the system, and if they do, it generates a log and sends it to the C2 server. PureLog implements component-based architecture, where the initial payload only focuses on reconnaissance and identifying the hack value of a victim. Threat actors can deploy additional components on the fly, allowing them to steal credentials, drop keyloggers, access webcams, or drop additional malware.
Figure 29: PureLog collecting Hardware Identifiers
Next, PureLog focuses on system reconnaissance, where it collects hardware identifiers such as ram and disk serial numbers and uses them to generate MD5 hash, which is used as a victim identifier.
Next, it identifies the AV product present in the system.
Figure 30: PureLog collecting AV Information
Next, it identifies the current privilege level, installed Windows version and its architecture.
Figure 31: PureLog collecting OS Information
Next, using the query below, it investigates whether the system has a camera or any other imaging device.
Figure 32: PureLog collecting Webcam Information
Finally, PureLog identifies the screen dimension and captures a screenshot of the victim’s screen.
Figure 33: PureLog capturing a Screenshot
This screenshot is then resized and converted into JPEG format, before sending it to the C2 domain.
To maintain persistence, PureLog executes the following PowerShell command:
Figure 34: Malicious PowerShell Command
This PowerShell command creates a scheduled task for persistence and executes the ‘RunetimeBroker.exe’ every 5 minutes with elevated privileges. It also configures the task, so it continues running even on battery power.
Finally, PureLog connects to its C2 domain. It decrypts the configuration embedded within the sample to obtain the C2 domain and port number. The configuration is Base64-encoded and compressed using GZIP.
Figure 35: Encrypted PureLog Configuration
The sample performs DNS resolution to receive the IP address from the hostname. Then it establishes a TCP connection and implements TLS encryption for secure communication with the C2 server.
PureLog also implements a custom certificate validation routine. The configuration contains an X.509 certificate, which is matched against the X.509 certificate received from the C2 server, indicating the implementation of certificate pinning.
Next, it creates a structured object containing information about the infected machine and sends the data to the C2 domain. The C2 domain we discovered was ‘telemetrydata.to’.
Next, the malware keeps the TLS connection active to receive command data from the C2 server. Each received command is executed within its own thread, allowing threat actors to perform remote command execution.
The malware also implements a persistent reconnection mechanism. If the connection breaks, the malware terminates the active socket and stream, resets its connection state, and attempts reconnection.
This allows threat actors to drop additional PureLog components.
McAfee has extensive coverage for the Marsalek Malware Campaign. We’re proactively covering new samples observed in the wild.
Trojan:Win/Marsalek.AB Trojan:Script/Marsalek.AA
| SHA256/URLs | File Name |
| Stage 1 Payload | |
| c70728c7e1bb1369152817d732ae068c0cd6e3356343ca5ea3a916acdf6f3b97 | Fake CAPTCHA Page |
| 98f138624ea96313dd5803356dc9428d230e535b5e775ed7cb4fc6dfd8397ab4 | build_1280.exe |
| 29f65faa96c9743e9ea1242dcb9d8a4a453b778f7dfb488c8add3f04ee087011 | build_1505.exe |
| ae975e468c26c67a2618d0da28d671c1101d01979a10677abe658a7b40f221be | payload_1.ps1 |
| 04b0dbddaa7791445adbaf7c47fe388d4ddad724b2a6b55463d2a81cacf3339d | ShadowClient.exe |
| 075d2ad32039674a2c65d899ae6760adf2457fe6af93710d204cee69e318a858 | Discord Free Nitro Gen.exe |
| 0c6f22efc8212739358ee2ce3564ffd3d193a74c1197cfc90d6345e33655ddeb | build_1540.exe |
| 206e7a9a9cb0767d356de26d2f3b6fca85552c2d89104f343fc2e20a64e1efa4 | Fortnite_tweaks.exe |
| 279b6b8621f61f63e1537f7225bef375fc497342a812904d8194b5a44df3efbe | r.vbs |
| fe510937483b1b79e9da1f1a18bc7fce21637c0ce7a5799259ee3d29e8364f1e | CS2-TriggerBot-main/main.py |
| Stage 2 Payload | |
| 4067e5f3dea8180dc47ea8c737b0cd2b11d4dfd5ef65f9e5ff30049eb8762f3e | python_setup.py |
| b75cc775a8c1f91d38dab69a9b7278b9ef7c84cf14435d374a6d7c2660e16c02 | downloaded_payload.txt |
| 4067e5f3dea8180dc47ea8c737b0cd2b11d4dfd5ef65f9e5ff30049eb8762f3e | python_setup.py |
| 6fb6adb819a82bc9e7afdc83649af7e9e23daec19b45d19ed92f1877bc54acd9 | virus.py |
| 091736aba514598513a936446a7776b1fa4585883bee38afb74cfe840176a8bc | payload.py |
| 76d90ab4ba2be337e1ae03f69d12bfa873357bd5a0f177274a95b66621139c59 | python_setup.py |
| b28bbedac88d0b52531cf344f25ef95fe364e0f3ff9e5105a119f379d83c6ebd | AsyncRAT.py |
| 9327a55cb9e76aab18c404ae4c4b95f2be50fce57c65ba7c0c16ff48193e84ae | python_setup.py |
| Stage 3 Payload | |
| 3281e77e96bbd073ec8287928eadb2e47ba5337909800268bc9af0ee985def42 | svc.py |
| 7387b1ff5c2d4cdff9abcdb078742f26373e479f883bdd472f1aff58969b4fb2 | svc.py |
| c12ffe59220fff73cabe6fd3cbec73a1c78df6988b742ae1d3a6458a82d135a7 | svc.py |
| 714267c512e8cfec6a535cda85897d901dfca9761c678b82781177ff13ec5923 | svc.py |
| 54ec316f639c97ec8b0cf321a8df32b1e9e2a19da91784f5575ed0a625ead811 | svc.py |
| 2c1c38eb0c427ff5f2aaa3029cc4526f797676ee3ba154c6a980c39f9357e2df | src.py |
| c7691712d794d4ef582c591566bf5fda76a364b0bcdad315adbaaec8607ad0f3 | chromedriver.dll |
| Stage 4 Payload | |
| 9cf8bab29514d62595e148eb588f0cbecefb947d572c06b4547cff7ea4231747 | WinSvcHost.exe |
| e0866124208da639f6cde652d78a3d5e350ad99dbd008aa48dbd1475af4e93ff | Pdihj.exe |
| 9e4ea8b578475f18e092da73e56c0054261a881180d93f0909135bd6bdb4845d | Kvxefnlfro.exe |
| Main C2 Domain | |
| marsalek.cy | |
| Secondary C2 Domain | |
| telemetrydata.to | |
| huehnchenfarm.ru | |
| URLs distributing Marsalek | |
| hxxp://cdn.filepost.dev/file/filepost/uploads/ad/adac14669df84170ae21e99e542ff7d3.exe | |
| hxxp://solaraexecutor.online/solara.zip | |
| hxxps://cdn.discordapp.com/attachments/1406651955421384817/
1453822535136186560/net-nuker.exe?ex=69517c3f&is=69502abf&hm= 4786f77b0db68586992f5e2f7f8961146ae3401cb3ae4edef52a69dce1392538& |
|
| hxxps://cdn.discordapp.com/attachments/1406651955421384817/
1455720862660563037/net-nuker.exe?ex=695a5e73&is=69590cf3&hm= 80369b451d7f9b20ebe4893adab9f7530dead3493e895aad7727b0b29ff1e50c& |
|
| hxxps://files.catbox.moe/11b8bu.py | |
| hxxps://github.com/shreddfv/Matcha-External/archive/refs/heads/main.zip | |
| hxxps://github.com/shreddfv/Matcha-External/raw/refs/heads/main/Matcha.exe | |
| hxxps://github.com/shreddfv/Matrix-Hub-External-Cracked/blob/main/newuimatrix.exe?raw=true | |
| hxxps://github.com/shreddfv/Matrix-Hub-External-Cracked/raw/refs/heads/main/newuimatrix.exe | |
| hxxps://www.swiftexecutor.online/swift.zip | |
| hxxp://130.12.180.43/files/6749237131/MVvd2DP.exe | |
| hxxp://github.com/FomaNory/Roblox-Script-Executor/releases/download/Release/Executor.rar | |
| hxxp://130.12.180.43/files/5532726588/cPr84lu.exe | |
| hxxp://cdn.filepost.dev/file/filepost/uploads/ad/adac14669df84170ae21e99e542ff7d3.exe | |
| hxxp://solaraexecutor.online/solara.zip | |
| hxxps://cdn.filepost.dev/file/filepost/uploads/ad/adac14669df84170ae21e99e542ff7d3.exe | |
| hxxps://cdn.discordapp.com/attachments/1406651955421384817
/1455720862660563037/net-nuker.exe?ex=699af7f3&is=6999a673&hm= 6d372f7c5fc686135fedbc1943d7b1eff339fbfd91d26a62f3dddca1c1b7a884& |
|
| hxxps://cdn.discordapp.com/attachments/1460394029215781075
/1462929986381152378/netgen.exe?ex=696ffb38&is=696ea9b8& hm=50afe3eaad628cce1300d9571049357f09ae70fae17a56231736c335eda276de& |
|
| hxxps://cdn.discordapp.com/attachments/1467511838848847997/
1475468285955932232/szatum.exe?ex=699ee9ec&is=699d986c&hm =4d10ad22da0b18019744b491de4be40b31b336c4b42d4067e16e967bfc07e8f8& |
|
| hxxps://cdn.discordapp.com/attachments/684808088372510766/1458557911142895737/
Fortnite_tweaks.exe?ex=69601368&is=695ec1e8&hm= 4c997f6b315b450a4db6f7079966ff58203b7ef66023a36e97b4b1131d515ce7& |
The post Malware for Hire: The Story of Marsalek, a Malware-as-a-Service Operation appeared first on McAfee Blog.
Governments may retain the authority to police international finance, but the practical capability to identify, trace and interrupt illicit financial flows increasingly rests with privately held technology and financial sector companies. The latest RUSI Commentary examines the Binance heist, the role of private sector gatekeepers and whether the FATF is keeping up.