What: Ontinue has published a teardown of Psychedelic Stealer, the payload of a malware-as-a-service platform called Lunex. The chain starts with a fake Cloudflare CAPTCHA and ends with a full command-and-control agent — abusing AMD's signed PDFWKRNL.sys driver (CVE-2023-20598) to blind endpoint defences instead of killing them.
Who & where: Delivery rides on compromised legitimate Ukrainian websites and targets Ukrainian-speaking users. Ontinue counted 28 unique panels across 13 countries, with C2 panels hosted in Russia, the U.S., the U.K., the Netherlands, France, Germany, Turkey and Bangladesh.
Why it matters: Ontinue confirmed that neither HVCI nor the current Microsoft Vulnerable Driver Blocklist blocks the specific PDFWKRNL.sys variant, despite its hash sitting in the LOLDrivers catalogue since March 2026. BYOVD as a precursor to a commodity infostealer — with quiet callback zeroing rather than noisy process kills — is what makes this campaign worth a closer look.
◈ Table of Contents
01 · Campaign Profile: Lunex MaaS
AttributionLunex is not a single piece of malware; it is a productised platform. Ontinue tracks it as a malware-as-a-service (MaaS) operation whose customer-facing payload is Psychedelic Stealer — a name lifted from the delivered binary, psychedeliclove.exe. Arctic Wolf Labs first documented the stealer itself; Ontinue's researcher Rhys Downing tied it to the wider Lunex platform and mapped the delivery chain end to end.
Scale is the headline. Ontinue enumerated 28 unique Lunex panels spread across 13 countries, and described the operation as actively expanding — either run by a single actor or resold to affiliates. That panel sprawl, combined with a June 2026 sighting of six live C2 panels by researcher Luke Wilkinson (BlueTeamCoolTeam), points to a maturing service rather than a one-off campaign.
| Attribute | Detail |
|---|---|
| Platform name | Lunex (malware-as-a-service) |
| Payload / alias | Psychedelic Stealer (psychedeliclove.exe) |
| Loader | LunexLoader |
| First public reference | June 2026 |
| Panels observed | 28 unique panels across 13 countries |
| Panel hosting | Russia, U.S., U.K., Netherlands, France, Germany, Turkey, Bangladesh |
| Primary victimology | Ukrainian-speaking users via compromised legitimate sites |
| Attribution | Unattributed operator; MaaS model (single actor or resold). Reported as a Russian-nexus infostealer targeting Ukrainian users. |
| Reporting | Ontinue (Rhys Downing); Arctic Wolf Labs (initial stealer doc); BlueTeamCoolTeam (Luke Wilkinson, June 2026) |
Do not read "MaaS" as low-skill. The delivery chain here layers a UAC bypass, a kernel-mode BYOVD defence-evasion step and a browser-resident C2 bridge — capabilities usually reserved for the intrusion set, not the commodity stealer tier.
The targeting is geographically tight but the infrastructure is global. Compromised Ukrainian websites act as the funnel, while the panels and phishing domains that answer to them are scattered across eight hosting countries — a separation that complicates takedown and blurs attribution.
02 · Disclosure Timeline
ChronologyThe pieces of this story landed over several months. The driver at the centre of the chain was flagged as vulnerable years before Lunex weaponised it, and the specific malicious PDFWKRNL.sys variant was catalogued publicly six months before the campaign write-up.
- 12023 — AMD discloses
CVE-2023-20598, an improper-privilege-management flaw in the AMD Radeon graphics driver, fixed in Adrenalin 23.9.2 / Pro 23.Q4. - 2March 2026 — The specific malicious
PDFWKRNL.sysvariant's hash is added to the LOLDrivers project. - 3June 2026 — Earliest public references to Lunex; BlueTeamCoolTeam identifies six active C2 panels.
- 42026 — Arctic Wolf Labs documents the Psychedelic Stealer payload.
- 5September 26, 2026 — Ontinue publishes the full four-stage chain, links it to Lunex, and confirms the HVCI / Vulnerable Driver Blocklist gap.
A driver hash living in LOLDrivers is not the same as it being blocked. LOLDrivers is a knowledge base; enforcement depends on your WDAC policy or the Microsoft blocklist actually carrying and applying that hash.
03 · Initial Access: ClickFix & Clipboard
DeliveryAccess begins on trusted ground. Lunex operators compromise legitimate Ukrainian websites and inject an iframe that renders a counterfeit Cloudflare "verify you are human" CAPTCHA — the now-familiar ClickFix pattern. Ontinue reports the compromised sites belonged to ordinary small businesses: a hair-treatment clinic, a scale-model manufacturer, a specialist bookseller, a psychological facility, a tool retailer and an automotive retailer.
The twist is what the fake CAPTCHA does. Rather than trigger a PowerShell one-liner — the common ClickFix payload SOC teams have learned to hunt — the page copies an msiexec command to the clipboard and instructs the user to paste it into the Windows Run dialog:
The /passive flag suppresses UI, and remote MSI installation via msiexec is a signed, expected Windows behaviour — so the initial download and execution look benign to controls tuned only for powershell.exe spawned from a browser. The MSI (elita.msi) is served from the delivery domain uasputnik[.]com.
Trusted Origin
The lure is served from real, compromised Ukrainian business sites — no typosquat domain to flag in the browser bar.
Clipboard Hand-off
The victim pastes the command themselves, so there is no automated download chain for a proxy to intercept.
MSI, Not PowerShell
msiexec execution sidesteps detections narrowly scoped to powershell.exe under a browser parent.
ClickFix now routinely swaps its final verb. If your only ClickFix rule watches for powershell.exe or mshta.exe launched from a browser, an msiexec /i https://… paste will walk straight past it.
04 · Technical Deep Dive: The BYOVD Chain
Core mechanicsThis is the phase that makes Lunex interesting. Ontinue describes a four-stage attack chain that runs from the MSI to a fully featured C2 agent. The middle two stages — UAC bypass and kernel-mode defence evasion — are the ones a commodity stealer usually skips.
The pasted msiexec /i command pulls elita.msi from uasputnik[.]com and installs quietly under /passive. The MSI stages LunexLoader, the orchestration component responsible for privilege escalation, defence evasion and fetching the final payload.
LunexLoader elevates by abusing the CMSTPLUA auto-elevate COM object — a long-known UAC-bypass technique that lets a medium-integrity process obtain a high-integrity token without a consent prompt. Elevation is the prerequisite for the next step: loading a kernel-mode driver requires administrative rights.
CMSTPLUA abuse surfaces as a COM elevation moniker (Elevation:Administrator!new:{3E5FC7F9-9A51-4367-9063-A120244FBEC7}) instantiated by an unusual, unsigned parent. That COM CLSID is a durable hunt anchor.
With admin rights, LunexLoader drops and loads PDFWKRNL.sys, a legitimately signed AMD Radeon Software kernel driver that is vulnerable to CVE-2023-20598. Per NVD, that flaw (CVSS 3.1 base 7.8, HIGH; CWE-269 improper privilege management) lets a low-privileged user issue crafted IOCTLs to read and write arbitrary physical memory and I/O ports — an arbitrary kernel read/write primitive delivered by a Microsoft-trusted, signed binary.
What Lunex does with that primitive is the notable part. Instead of terminating security processes — which trips tamper-protection alarms and shows up as a missing service — the loader performs PDB-guided kernel callback zeroing. It resolves the offsets of EDR/AV notification callbacks (process-creation, image-load and similar kernel callback arrays) using symbol/PDB information, then writes zeros over those callback entries. The security agents keep running; they simply stop receiving the kernel telemetry they depend on. Ontinue characterises the result as leaving security products "running but blind."
Ontinue validated that neither HVCI nor the current Microsoft Vulnerable Driver Blocklist stops this specific PDFWKRNL.sys variant from loading — a gap that persists even though the hash has been in LOLDrivers since March 2026. Assume the OS-default blocklist is not covering you here.
Callback zeroing is quieter than a kill, but it is not invisible. The driver load event for a graphics driver from a non-standard path, on a host with no AMD GPU, is the tell. Hunt the load, not the (now-absent) callbacks.
With telemetry suppressed, the loader deploys psychedeliclove.exe (SHA-256 06f434695f93d7fd11eeff71358ff69fed79d310a66d993bbcc4ff979c117c90). This is the data-theft and C2 stage: it harvests browser credentials and wallets in one pass, then installs a persistent, browser-resident remote-access bridge. Command-and-control is plain HTTP to 193.178.159[.]128:8080, with a task-tracking file executed_tasks.json recording completed jobs.
05 · Post-Exploitation & Data Theft
ObjectivesPsychedelic Stealer's collection scope is broad for a commodity stealer, and its persistence is unusually resilient because it lives inside the browser.
| Target class | Specifics reported |
|---|---|
| Browser credentials | Chrome, Microsoft Edge, Brave, Yandex, Opera, Opera GX, Vivaldi (Chromium-based) |
| Desktop wallets | Bitcoin Core, Litecoin Core, Exodus, Atomic Wallet, Electrum |
| Wallet extensions | MetaMask, MetaMask Legacy, OKX Wallet, SafePal Wallet |
| Persistence | Registry Run key; scheduled task psychedelicloveUtils (at logon); Chrome Native Messaging Host |
| C2 bridge | Native Messaging Host com.lunex.explorer; 13,200-byte PowerShell embedded in the binary's .rdata section |
The Native Messaging Host (NMH) is the standout. Rather than a standalone RAT, Lunex registers a browser NMH — com.lunex.explorer — backed by a 13,200-byte PowerShell script carried in the stealer's .rdata section. Native Messaging lets a browser extension talk to a local process, and here it becomes a remote filesystem and execution bridge that survives inside the browser's trust boundary. Ontinue enumerated six filesystem actions exposed through it:
- 1list_drives — enumerate drive letters C through Z.
- 2list_dir — list directory contents with file sizes.
- 3read_file — read arbitrary files in 512 KB chunks, up to 524 MB.
- 4write — write arbitrary data to any file path.
- 5download — pull files off the system.
- 6run — execute arbitrary programs; supported payloads include EXE, BAT, MSI and PowerShell.
The malicious browser extension is granted an aggressive permission set — cookies, history, bookmarks, tabs, storage, proxy, scripting, declarativeNetRequest, and all HTTP/HTTPS URLs — turning the browser into both a data source and a live control channel.
Because the C2 bridge is a Native Messaging Host, reimaging the "malware" process is not enough. If the malicious extension and its NMH registration survive, the operator keeps read/write/run access to the endpoint through the browser.
06 · C2 Infrastructure
Infra pivotsCommand-and-control is deliberately unremarkable at the protocol level — plain HTTP — but the surrounding infrastructure gives defenders several pivot points.
| Element | Value | Role |
|---|---|---|
| C2 server | 193.178.159[.]128:8080 | HTTP command-and-control |
| Delivery domain | uasputnik[.]com (176.53.159[.]40) | Hosts elita.msi |
| Job log | executed_tasks.json | Tracks completed C2 tasks on host |
| Panel countries | RU, US, UK, NL, FR, DE, TR, BD | MaaS panel hosting |
Ontinue also linked a set of phishing domains to a Turkey-hosted panel, showing the platform is used for credential-phishing lures beyond the Ukrainian stealer delivery:
| Phishing domain (defanged) | Impersonation theme |
|---|---|
| account-sams-club[.]com | Sam's Club account |
| teamwork-recover-password[.]com | Password recovery |
| namshi-uae[.]com | Namshi (UAE retail) |
| whatsappbusineses[.]com | WhatsApp Business |
| ibraq-perfumes[.]com | Retail / perfumes |
Plain-HTTP C2 on a non-standard port (8080) with a JSON task-log artifact (executed_tasks.json) is a strong composite signature. Beacon detection on unencrypted 8080 to a fresh IP is a cheaper win than deep payload analysis.
07 · DFIR Investigation Steps
Responder runbookIf you suspect a Lunex infection on a host, work the chain in order. Because Stage 3 blinds live EDR, prioritise host-based artifacts that survive callback zeroing — driver load logs, scheduled tasks, browser NMH registrations and network records collected off-host.
- 1Confirm delivery: check browser history and proxy logs for the fake-CAPTCHA site and any request to
uasputnik[.]com/elita.msi. - 2Check clipboard/Run MRU: inspect
HKCU\Software\Microsoft\Windows\CurrentVersion\Explorer\RunMRUfor anmsiexec /i http…entry. - 3Hunt the driver: look for a
PDFWKRNL.sysload event (Sysmon EID 6) from a non-standard path, especially on hosts with no AMD GPU. - 4Enumerate persistence: the scheduled task
psychedelicloveUtilsand the Run key; export both before remediation. - 5Inspect the browser: look for a Native Messaging Host manifest named
com.lunex.explorerand an extension with the aggressive permission set. - 6Pull network records: off-host firewall/NetFlow for HTTP to
193.178.159[.]128:8080. - 7Hash-match: scan for
psychedeliclove.exeby SHA-256 and locateexecuted_tasks.json. - 8Assume EDR blindness: validate agent callback health; if the host was compromised, treat local EDR telemetry from the window after driver load as unreliable.
Collect volatile evidence before you kill the process. The C2 run primitive can have staged additional payloads that will not be captured once you reboot or reimage.
08 · Indicators of Compromise
IOCsAll indicators below are drawn from Ontinue's reporting and corroborating coverage. Defang is applied for safety; re-arm before use in tooling.
| Type | Indicator |
|---|---|
| SHA-256 | 06f434695f93d7fd11eeff71358ff69fed79d310a66d993bbcc4ff979c117c90 (psychedeliclove.exe) |
| Filename | psychedeliclove.exe |
| Filename | elita.msi (delivered installer) |
| Driver | PDFWKRNL.sys (AMD Radeon; CVE-2023-20598) |
| Scheduled task | psychedelicloveUtils |
| Native Messaging Host | com.lunex.explorer |
| Job-log artifact | executed_tasks.json |
| Type | Indicator |
|---|---|
| C2 | 193.178.159[.]128:8080 (HTTP) |
| Delivery domain | uasputnik[.]com |
| Delivery IP | 176.53.159[.]40 |
| Phishing | account-sams-club[.]com |
| Phishing | teamwork-recover-password[.]com |
| Phishing | namshi-uae[.]com |
| Phishing | whatsappbusineses[.]com |
| Phishing | ibraq-perfumes[.]com |
09 · Detection & Hunt Queries
KQL + SPLEach query below is paired KQL (Microsoft Sentinel / Defender) and SPL (Splunk), with a one-line statement of what it finds. Tune paths and field names to your schema.
Finds msiexec pulling an MSI over HTTP/S, the Lunex delivery pattern.
Finds the tell-tale msiexec/http command left in the Run dialog history.
Finds the AMD driver loading — the loud moment before EDR goes blind.
Finds the psychedelicloveUtils task and the com.lunex.explorer Native Messaging Host manifest.
Finds plain-HTTP traffic to the known C2 IP on port 8080.
- Delivery — remote MSI via msiexec and the RunMRU paste artifact
- Evasion — the PDFWKRNL.sys BYOVD driver load event
- Persistence — the psychedelicloveUtils task and com.lunex.explorer NMH
- Command-and-control — HTTP beacon to 193.178.159[.]128:8080
10 · MITRE ATT&CK Mapping
TTPs| Tactic | Technique | ID |
|---|---|---|
| Initial Access | Drive-by Compromise (compromised sites) | T1189 |
| Execution | User Execution: Malicious Copy/Paste (ClickFix) | T1204 |
| Defense Evasion | System Binary Proxy Execution: Msiexec | T1218.007 |
| Priv. Escalation | Abuse Elevation Control: Bypass UAC (CMSTPLUA) | T1548.002 |
| Priv. Escalation | Exploitation for Privilege Escalation (BYOVD, CVE-2023-20598) | T1068 |
| Defense Evasion | Impair Defenses: Disable or Modify Tools (callback zeroing) | T1562.001 |
| Persistence | Registry Run Keys / Startup Folder | T1547.001 |
| Persistence | Scheduled Task/Job (psychedelicloveUtils) | T1053.005 |
| Persistence | Browser Extensions / Native Messaging Host | T1176 |
| Credential Access | Credentials from Web Browsers | T1555.003 |
| Collection | Data from Local System | T1005 |
| Command & Control | Application Layer Protocol: Web (HTTP) | T1071.001 |
| Exfiltration | Exfiltration Over C2 Channel | T1041 |
11 · Mitigation & Hardening
Defensive actionsThe chain has several distinct choke points. You do not need to catch every stage — breaking any one of them stops the objective.
Do not rely on HVCI or the default Microsoft Vulnerable Driver Blocklist for this variant — Ontinue confirmed both miss it. Deploy an explicit WDAC deny rule for the PDFWKRNL.sys hash and, where feasible, block by the driver's signing attributes. Pull the current hash from LOLDrivers into your policy.
- 1Disable the Win+R Run box for standard users via GPO (User Configuration → Administrative Templates → Start Menu and Taskbar → Remove Run menu) where the workflow allows.
- 2Alert on
msiexec.exeinstalling an MSI from anhttp(s)URL — a rare, high-signal event in most fleets. - 3Restrict remote MSI installs via AppLocker / WDAC and block outbound to unknown MSI-hosting domains at the proxy.
- 1Set UAC to always prompt (
ConsentPromptBehaviorAdmin = 2) to raise the cost of CMSTPLUA-style auto-elevation. - 2Enforce an enterprise browser extension allowlist (ExtensionInstallAllowlist) and audit Native Messaging Host manifests as persistence.
- 3Block the IOCs in Phase 08 at proxy/firewall/DNS; add the SHA-256 to EDR custom indicators.
- 4For confirmed hosts, reset all browser-stored credentials and rotate any crypto wallet seeds handled on the machine — assume exfiltration.
- PDFWKRNL.sys is denied by WDAC and no longer loads on any endpoint
- The psychedelicloveUtils task and Run key are removed
- The com.lunex.explorer NMH and malicious extension are removed from every profile
- No host beacons to 193.178.159[.]128:8080; IOCs blocked fleet-wide
- All exposed browser credentials and wallet secrets are rotated
12 · Sources & References
PrimaryCheck your exposure now. Run the file hash, C2 IP and delivery domain from this report through the CyberHawk IOC Scanner to sweep your environment for Lunex indicators, and browse the CyberHawk Threat Intel feed for the latest BYOVD and infostealer coverage. Need a repeatable playbook? Our SOP library covers security-tool tampering and driver-abuse response step by step.
◈ Stay Connected
Follow CyberHawk Threat Intel for threat intelligence, deployment guides and hands-on SOC tooling content.
"They can't exploit you if you are the Exploit."