Threat intelligence, Threat Research

MythStealer: Browser and Discord Credential Theft with HTTPS Exfiltration to Operator-Notified C2

by Neil King

Overview

The Sonicwall Threats research team have recently been tracking an information-stealer malware family known as Myth. The sample we analyzed is a 43.8 MB Windows executable combining browser credential theft, Discord session token extraction, Firefox cookie harvesting, and HTTPS exfiltration into a single binary. The payload is written in Rust, packed with a custom in-memory loader (mexec), and carries an inner PE protected by Themida. The inner payload is XOR-encrypted via the include-crypt-crypto Rust crate and decrypted entirely in memory — nothing is written to disk beyond a small NSIS scratch file.

The stealer targets 27 Chromium-based browser profiles, four Discord client variants, and Firefox cookies. Stolen data is packaged as a ZIP and POSTed over HTTPS to myth.cocukporno.lol — a C2 belonging to the MythStealer family, advertised on Telegram at t.me/mythstealerx. A separate POST delivers a victim summary including machine name, external IP, cookie count, and Microsoft account MFA status to the operator.

Runtime behavior was captured using a custom kernel-mode hooking driver that instruments API calls at the point of execution, producing full hooklogs of the execution chain without modifying the sample on disk.

Infection Cycle

Stage 1 — Loader and In-Memory Execution

The outer binary is an NSIS installer. It drops a small scratch file to %TEMP% and reflectively loads the inner payload via the mexec Rust crate — no second-stage PE touches disk. The inner PE has a .themida section (54 MB virtual) and a .boot stub. The .rdata section measures 7.95 bits/byte entropy, consistent with the XOR encryption scheme used by include-crypt-crypto 0.1.0.

NSIS drops tmpfile
Figure 1: NSIS drops a 484-byte temp scratch file; the main payload loads entirely in memory

The developer's PDB path is embedded in the binary, revealing the loader crate name and the author's username:

developer name- Peter
Figure 2: Build artifact identifying the outer loader crate as ldr, developed by a user named Peter

Stage 2 — Anti-Analysis Checks

Timing gate: Two back-to-back GetTickCount calls measure elapsed time and act as a timing gate. Under hook overhead the delta approaches 94ms, triggering self-termination with a STATUS_DLL_INIT_FAILED (0xc0000142) fake status. In our environment we spoofed the delta to 1ms to pass the check:

Timing gate
Figure 3: Timing gate - without spoofing the 94ms hook overhead causes self-termination. With spoofing the malware proceeds normally.

Virtualisation probes: Numerous NtCreateFile calls attempt to open known VMware and VirtualBox DLLs using CreateDisposition=0x1 (open-existing only). No file is created — the return code alone reveals the environment:

Virtualization
Figure 4: Virtualization probes across VirtualBox and VMware. All use CreateDisposition=0x1 (open-existing only) — no file is created, the return code alone reveals the environment.

Registry checks: The safe-boot key is queried to detect sandboxed environments. An IFEO self-check detects debuggers attached via Image File Execution Options:

Safe boot and IFEO
Figure 5: Safe-boot and IFEO registry probes.

Stage 3 — Chromium Credential and Cookie Theft

The stealer enumerates 27 Chromium profile paths, reading Local Storage\leveldb\ for session tokens and Local State for the DPAPI-protected AES master key. For Chrome 127+ the App-Bound Encryption COM interface is attempted; older profiles fall back to CryptUnprotectData. After AES-GCM decryption of the master key, Login Data and Web Data SQLite databases are opened for passwords and autofill.

browsers accessed
Figure 6: Representative subset of the 27 browser profile paths accessed. Discord's Local State is read for the DPAPI-wrapped AES key.

Stage 4 — Discord Token Extraction

For all four Discord clients (Stable, Canary, PTB, Lightcord), the stealer reads LevelDB log files directly to locate v10-prefixed AES-GCM encrypted tokens. The token is decrypted using the same BCrypt AES key extracted from Local State. Successful decryption was confirmed by the TLS plaintext capture, which showed the ; Domain=discord cookie suffix in the decrypted output.

Discord log files accessed
Figure 7: LevelDB log files read for all four Discord client variants.

After extraction the token is validated against discord.com/api/v9/users/@me before being included in the exfil ZIP.

Stage 5 — Firefox Cookie Theft

Firefox cookies are extracted by reading cookies.sqlite directly and querying the moz_cookies table. The captured exfil ZIP contained 204 bytes of tab-separated cookie data. The format is host / httpOnly / path / secure / expiry / name / value:

session cookies
Figure 8: Cookie content from Gecko/cookies.txt inside the captured exfil ZIP, showing discord.com and google.com session cookies.

Stage 6 — Victim Fingerprinting

Before exfiltration the malware performs an HTTP GET to api.ipify.org to obtain the victim's external IP address. This IP is embedded in the operator notification and used to key the live screenshot endpoint on the C2.

External IP lookup via api.ipify.org before C2 contact
Figure 9: External IP lookup via api.ipify.org before C2 contact.

Stage 7 — C2 Exfiltration

All collected data is packaged into a ZIP archive (STORED compression, no password) and POSTed to myth.cocukporno.lol/f over HTTPS. A hardcoded authentication header myth-key: MYTHX-DB28229E-1WWW is included in every request. TLS plaintext was recovered by hooking BCryptEncrypt on the outbound data before TLS encryption:

Figure 10: Outgoing exfil POST with hardcoded C2 API key, recovered from TLS plaintext via BCryptEncrypt hook.
Figure 10: Outgoing exfil POST with hardcoded C2 API key, recovered from TLS plaintext via BCryptEncrypt hook.

The exfil ZIP contained:

Figure 11: Captured exfil ZIP contents.
Figure 11: Captured exfil ZIP contents.

Stage 8 — Operator Notification

A second POST to myth.cocukporno.lol/e sends a Discord-embed-format JSON payload to the operator. It includes machine name, stolen cookie/password counts, external IP, a live screenshot URL keyed to the victim's IP, and the target's Microsoft account MFA status:

Figure 12: Operator notification. The second embed explicitly reports whether MFA is disabled on the victim's Microsoft account.
Figure 12: Operator notification. The second embed explicitly reports whether MFA is disabled on the victim's Microsoft account.

When C2 TLS fails, the malware posts Rust panic output to a Discord webhook operated by the author. The webhook (ptb.discord.com/api/webhooks/1358142755066478743/...) has since been deleted, returning {"code": 10015}.

Stage 9 — Screenshot Capture and Exfiltration

The malware captures a screenshot of the victim's desktop using the Windows GDI API entirely in memory — no image file is written to disk. Static analysis confirms imports of BitBlt, CreateCompatibleBitmap, CreateCompatibleDC, and CreateDIBSection. Runtime capture was confirmed by the GetDC hook firing during the stealer's execution:

Figure 13: GetDC hook fires during the stealer's execution, confirming a screen device context was acquired for bitmap capture.
Figure 13: GetDC hook fires during the stealer's execution, confirming a screen device context was acquired for bitmap capture.

The captured image is not included in the exfil ZIP sent to /f. Instead, the operator notification (Figure 12) includes a URL pointing to a dedicated screenshot endpoint on the C2 server indexed by the victim's external IP:

Figure 14: The operator notification links to a live screenshot endpoint on the C2, suggesting the screenshot is uploaded to the server separately and viewable on demand by the operator.
Figure 14: The operator notification links to a live screenshot endpoint on the C2, suggesting the screenshot is uploaded to the server separately and viewable on demand by the operator.

Indicators of Compromise

Network

15.png

File

16.png

Strings and Code

17.png

Sonicwall Protection

SonicWall Capture Labs provides protection against this threat via the following signature:

  • GAV: Myth.STL (Trojan)

This threat is also detected by SonicWall Capture ATP with RTDMI™ and the Capture Client endpoint solution.

Share This Article

Neil King

An Article By

Neil King

Principal Threat Researcher

Neil King is a Principal Engineer at SonicWall with more than 15 years of experience in cybersecurity. His work focuses on reverse engineering, malware analysis, and threat research, with a strong interest in applying artificial intelligence to solve complex security challenges.

Related Articles

  • No File, No Trace: How a Fake Invoice Hides a Formbook Loader in Plain Sight
    Read More
  • AI Meets Ransomware : Open‑Weight AI Models Fueling Ransomware Evolution
    Read More
  • DbGate JSON Script Runner Unauthenticated Remote Code Execution
    Read More