Vidar Stealer + XMRig Malvertising — Hunt & Hardening Pack

Financially-motivated dual-payload campaign (operator "X3D MINER") documented by Palo Alto Unit 42 on 2026-07-09: malvertising for cracked software → a password-protected .bin archive → a Factory-v3 (UpdateFactory) Go loader, rogue code-signed and file-inflated to ~491 MB to evade sandboxes → fake MpClient.dll sideloaded by a legitimate Windows Defender binary → AMSI patch → drops Vidar stealer (MicrosoftUpdate.exe) and XMRig (MicrosoftEdgeUpdate.exe --config=mgwthmc2.dat + WinRing0x64.sys) → persistence as SystemAgentService masquerading as NisSrv.exe. Defensive hunt & harden pack — no offensive code.
Threat
Vidar stealer + XMRig · Factory-v3 loader · operator X3D MINER
Severity
ACTIVE ITW · 2026
Type
Infostealer + cryptominer · MaaS loader · malvertising
Signature TTP
Fake MpClient.dll sideload · SystemAgentService persistence
Targets
Consumers & SMBs · US / EU
Version
v0.2 · 2026-07-13
Author
HuntPack
01

Executive Summary

Palo Alto Networks Unit 42 documented (report published 2026-07-09, campaign observed from April 2026) a financially-motivated, dual-monetization operation tagged "X3D MINER" that delivers the Vidar infostealer alongside the XMRig Monero miner to consumers and SMBs across the US and EU. Victims are lured by malvertising for cracked/pirated software into downloading a password-protected .bin archive whose obfuscated name and password defeat email-gateway and sandbox detonation.

The archive contains a Factory-v3 (a.k.a. "UpdateFactory") Go-compiled loader — a mature MaaS builder that also produces Lumma loaders. Each build is unique, rogue code-signed (early samples abuse a fake CN=justwatch.com cert issued by a self-signed WR3 CA; a later variant clones *.bleacherreport.com), and file-inflated with null bytes to as much as 491 MB to slip past sandbox size limits. On execution it either runs directly (x64 EXE cluster) or is sideloaded via a fake Go-compiled MpClient.dll that a legitimate Microsoft Defender binary loads by search-order hijack (T1574.002), patches AmsiScanBuffer to blind AMSI, then drops two payloads: Vidar as %TEMP%\MicrosoftUpdate.exe (browser creds, cookies, crypto wallets → exfil to C2 over :443) and XMRig under ...\Microsoft\Windows\Temp\ as MicrosoftEdgeUpdate.exe with libuv-1.dll, the abusable WinRing0x64.sys driver and a mgwthmc2.dat config, mining to pool.supportxmr.com.

Defender priority: The decisive, low-FP tells are Q1 (the SystemAgentService persistence triple — scheduled task + Run key + startup .bat, all pointing at a fake NisSrv.exe), Q3 (a Defender binary loading MpClient.dll from a user/temp path), and Q4 (the XMRig component set + --config=mgwthmc2.dat launch). Unit 42 published a large concrete IOC set (99 loader samples, four C2 IPs, rogue cert serial) — seed the atoms in §9, but the masquerade filenames (NisSrv.exe, MicrosoftEdgeUpdate.exe, MicrosoftUpdate.exe) running from user/temp paths are the durable behavioral layer.

02

Source Review & Web Hunter Notes

TierSourceKey FindingCarry
1 · Vendor researchPalo Alto Unit 42 — "Vidar Stealer Unmasked: Code Signing Abuse, Go Loaders and File Inflation" (2026-07-09)Full chain + large atomic IOC set: Factory-v3 Go loader, rogue certs (justwatch.com / WR3, *.bleacherreport.com), 90+ SHA-256 + imphashes, fake MpClient.dll sideload, AMSI patch, drop paths (MicrosoftUpdate.exe, MicrosoftEdgeUpdate.exe, libuv-1.dll, WinRing0x64.sys, mgwthmc2.dat, NisSrv.exe), SystemAgentService persistence, four C2 IPs :443, pool.supportxmr.com, ip-api.com geo-beaconyes
2 · Vendor pressDark Reading — "Vidar Infostealer Hammers SMBs via Malvertising Campaign"Consumer/SMB targeting; dual monetization (log-market sales + mining); password-protected archive lure; scope framingyes
2 · Vendor pressInfosecurity Magazine · Security Boulevard — campaign summariesVidar + Monero miner via fake software downloads; Factory-v3 MaaS builder shared with Lumma; corroboration of chainyes
3 · RelatedMalwareTips / community notes on the Unit 42 reportGo-compiled fake MpClient.dll sideload detail; loader-as-a-service framingpartial

Decisions: This campaign is unusually IOC-rich — Unit 42 published dozens of loader SHA-256s, imphashes, a rogue cert serial, four Vidar C2 IPs and the full drop-path set — so those are seeded as detect/prevent in §9. Because the loader is polymorphic (unique per build) and abuses rotating code-signing, the durable signal is behavioral: the SystemAgentService/NisSrv.exe persistence triple, the Defender-binary MpClient.dll sideload, and the XMRig drop-set under \Microsoft\Windows\Temp\. The four C2 IPs are seeded but perishable. No victim names are used; detections are TTP-based.

03

Hunt Brief & Attack Chain

Working hypothesis: A user downloads a cracked-software lure (password-protected .bin), runs a rogue-signed Factory-v3 loader that sideloads a fake MpClient.dll, patches AMSI, then drops Vidar (MicrosoftUpdate.exe) for credential theft and XMRig (MicrosoftEdgeUpdate.exe + WinRing0x64.sys) for mining, and persists as SystemAgentService / NisSrv.exe.

StepBehaviorTelemetryHunt Angle
1 · DeliveryMalvertising → cracked-software page → password-protected .bin archive (obfuscated name)Browser download / DnsRequestN1
2 · Execution / evasionRogue-signed Factory-v3 Go loader; file-inflated to ~491 MB; sideloads fake MpClient.dll; patches AmsiScanBufferProcessRollup2, PeFileWritten, module loadQ3 / Q5, N2
3 · Stealer dropVidar as %TEMP%\MicrosoftUpdate.exe; harvest browser creds/cookies/walletsProcessRollup2, PeFileWrittenQ2
4 · Miner dropXMRig set under \Microsoft\Windows\Temp\: MicrosoftEdgeUpdate.exe, libuv-1.dll, WinRing0x64.sys, mgwthmc2.dat; launch --config=mgwthmc2.datProcessRollup2, PeFileWrittenQ4
5 · PersistenceSystemAgentService: scheduled task (onlogon) + HKCU\...\Run + startup .bat, all → NisSrv.exe -sProcessRollup2, reg/asep eventsQ1
6 · C2 / exfil / miningVidar → C2 IPs on :443; XMRig → pool.supportxmr.com; geo-beacon ip-api.comNetworkConnectIP4, DnsRequestQ6

Affected surface & telemetry

SurfaceRequired TelemetryPriorityGap Risk
Windows endpoints (user workstations)Process lineage + command line (ProcessRollup2)CriticalLow — standard sensor
Module-load surfaceDLL/module load events (for MpClient.dll sideload)HighMedium — confirm module-load telemetry is on
File system (temp / AppData / startup)File create events (TargetFileName)HighLow — drop paths are fixed and specific
Egress / DNSNetworkConnectIP4, DnsRequest to SIEMHighLow — mining pool + geo-beacon are strong tells
04

Consolidated IOC Table

Atomic IOCs below are from the Unit 42 report. The loader is polymorphic (unique per build) and rotates code-signing, so hashes/certs age quickly; the four C2 IPs are perishable. The durable signal is behavioral — the SystemAgentService/NisSrv.exe persistence triple, the MpClient.dll sideload, and the XMRig drop-set under \Microsoft\Windows\Temp\. Full copy-ready lists in §9.
TypeValueConfActionContext
SHA-256 (loader A)097a87cfa4a5186aba3bba096866692951bde59c6f0c2e8c1c4a599246d14da8highpreventFactory-v3 x64 EXE loader (file-inflated)
SHA-256 (loader B)0a6a67a2fc4d79ec1cd8afc5b8b7a5e69a406e53d57a7334e097c5d0644de5f6highpreventx64 DLL loader (fake MpClient.dll sideload)
Imphashd42595b695fc008ef2c56aabd8efd68emediumhuntCluster A EXE loaders (import-hash pivot)
Imphashd8b31f8c03e0c76ff245ed05a15ffe6cmediumhuntCluster B DLL loaders (MpClient sideload)
Code-sign certCN=justwatch.com · issuer WR3 · serial 2f:7e:f0:15:7d:17:62:5c:09:86:91:ce:f1:ff:7d:63highdetectRogue signing cert (Variant A); block by serial
Filename / path%TEMP%\MicrosoftUpdate.exehighdetectVidar stealer drop (masquerade)
Filename / path…\Microsoft\Windows\Temp\MicrosoftEdgeUpdate.exehighdetectXMRig launcher (legit EdgeUpdate lives in Program Files)
FilenameWinRing0x64.sys · libuv-1.dll · mgwthmc2.dathighdetectXMRig driver + dependency + config in Temp
PersistenceSystemAgentService → NisSrv.exe -s (task + Run key + StartUp .bat)highdetectMasquerades as Defender NIS; runs from AppData
SideloadMpClient.dll (fake, Go-compiled) loaded by Defender binaryhighdetectDLL search-order hijack (T1574.002)
IPv4 (C2)136.243.203.109 · 136.243.203.111 · 116.203.243.208 · 138.199.246.13mediumdetectVidar C2 over :443 (perishable)
Domainpool.supportxmr.com · ip-api.commediumhuntXMRig mining pool; geo-beacon (ip-api dual-use)
Actor / tagX3D MINER · Factory-v3 (UpdateFactory) · Telegram ci0iiifmediumenrichMaaS affiliate; builder shared with Lumma
05

ATT&CK Mapping

TacticTechniqueObserved BehaviorQuery / Control
Resource DevelopmentT1608.001 / T1588.003 — Malvertising / Code-signing CertsCracked-software ads; rogue justwatch.com / bleacherreport.com certsN1
ExecutionT1204.002 — User Execution: Malicious FilePassword-protected .bin run by the victimN1, Q5
Defense EvasionT1574.002 — DLL Search Order HijackingFake MpClient.dll sideloaded by a Defender binaryQ3
Defense EvasionT1562.001 — Impair Defenses: AMSI patchAmsiScanBuffer patched to E_INVALIDARGQ3, Q5
Defense EvasionT1027.001 / T1036.005 — File Inflation / Masquerading491 MB null-padding; NisSrv.exe / MicrosoftEdgeUpdate.exe namesQ2, Q4, Q5
PersistenceT1053.005 / T1547.001 — Scheduled Task / Run Key + StartupSystemAgentService task + Run value + StartUp .batQ1
Credential Access / CollectionT1555 / T1005 — Creds from Stores / Data from Local SystemVidar harvests browser creds, cookies, crypto walletsQ2, Q6
ImpactT1496 — Resource HijackingXMRig mining Monero to pool.supportxmr.com; abuses WinRing0x64.sysQ4, Q6
Exfiltration / C2T1041 / T1071 — Exfil over C2 / Web ProtocolsVidar → C2 IPs on :443; ip-api.com geo-beaconQ6
06

Native Audit-Log Hunts

HuntSourceLogicResponse
N1 · Cracked-software downloadProxy / DNS / browser-download logsDownloads of password-protected .bin archives from cracked-software / malvertising domains, then execution on the same hostQuarantine; hunt the host for Q1/Q3/Q4
N2 · Oversized inflated PEEDR file-write / mail-gatewayExecutable files hundreds of MB in size that compress to a few MB (null-byte inflation to evade sandboxes)Decompress-before-scan; submit compressed sample
N3 · Rogue code-signingWindows 4688 w/ signer / EDR signer fieldExecutables signed by untrusted CN justwatch.com / issuer WR3, or a cloned *.bleacherreport.com chain not in the MS trust storeBlock by cert serial; hunt for the drop-set
N4 · Scheduled task / Run-key creationWindows Security 4698 / 4657 (Run key)Creation of task or Run value SystemAgentService pointing at NisSrv.exe -s under AppDataIsolate; confirm masquerade; engage IR
07

CrowdStrike LogScale CQL Hunt Queries

Pick your tenant's cloud first — every "Open in Falcon" button below uses this selection.
Field names validated against the Falcon event reference; process hunts include SyntheticProcessRollup2. Q3 needs module-load telemetry enabled for the MpClient.dll branch; the process-parent branch works without it. Loader hashes are polymorphic — lean on the behavioral queries (Q1/Q3/Q4) and treat Q5 hashes as a fast historical sweep. Run 30–90 days.
Q1 · SystemAgentService persistence triple (task + Run key + StartUp .bat → NisSrv.exe)
CONF HIGHFP LOWCOST LOW

Looks for: the campaign's persistence value SystemAgentService, the schtasks … onlogon registration, or any NisSrv.exe running outside System32 (the real Defender NIS lives in Program Files). Accomplishes: the single highest-fidelity signal. FP: low — this exact name+path combination is unique to the campaign.

// HUNT: Vidar/XMRig SystemAgentService persistence (T1053.005 / T1547.001 / T1036.005)
// CONF: high  FP: low  COST: low | REQUIRES: ProcessRollup2 + Reg events
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2|RegGenericValueUpdate|AsepValueUpdate/
| (CommandLine=/schtasks(\.exe)?\s.{0,120}SystemAgentService|SystemAgentService.{0,80}NisSrv/i
   or RegValueName=/^SystemAgentService$/i
   or RegStringValue=/\\Microsoft\\Windows\\Temp\\NisSrv\.exe/i
   or ImageFileName=/\\Users\\[^\\]+\\.{0,60}\\NisSrv\.exe$/i)
| table([@timestamp, aid, ComputerName, UserName, FileName, ImageFileName, RegValueName, RegStringValue, CommandLine], limit=200)
| sort(@timestamp, order=desc)
Q2 · Vidar stealer drop (MicrosoftUpdate.exe masquerade in %TEMP%)
CONF HIGHFP LOWCOST LOW

Looks for: a process named MicrosoftUpdate.exe running or written under a user Temp path — Vidar's masquerade drop. Accomplishes: catches the stealer stage. FP: low — legitimate Windows update binaries do not run from \Users\…\Temp\.

// HUNT: Vidar stealer drop MicrosoftUpdate.exe (T1036.005 / T1555)
// CONF: high  FP: low  COST: low
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2|PeFileWritten/
| (ImageFileName=/\\Users\\[^\\]+\\.{0,40}\\Temp\\MicrosoftUpdate\.exe$/i
   or TargetFileName=/\\Users\\[^\\]+\\.{0,40}\\Temp\\MicrosoftUpdate\.exe$/i)
| table([@timestamp, aid, ComputerName, UserName, ImageFileName, TargetFileName, SHA256HashData, CommandLine], limit=200)
| sort(@timestamp, order=desc)
Q3 · Fake MpClient.dll sideload + AMSI-patch parent (Defender binary)
CONF HIGHFP MEDCOST LOW

Looks for: a fake MpClient.dll written to or loaded from a user/temp path (the real one lives under Program Files\Windows Defender). Accomplishes: catches the search-order-hijack execution stage. FP: medium — scope to non-standard paths; a MpClient.dll outside the Defender directory is the signal.

// HUNT: Vidar loader MpClient.dll sideload (T1574.002 / T1562.001)
// CONF: high  FP: medium  COST: low
// TUNING: exclude \Program Files\Windows Defender\ and \Program Files\Microsoft Defender\ paths
#event_simpleName=/PeFileWritten|ProcessRollup2|SyntheticProcessRollup2/
| (TargetFileName=/\\Users\\[^\\]+\\.{0,80}\\MpClient\.dll$/i
   or TargetFileName=/\\Windows\\Temp\\MpClient\.dll$/i
   or ImageFileName=/\\Users\\[^\\]+\\.{0,80}\\MpClient\.dll$/i)
| table([@timestamp, aid, ComputerName, UserName, TargetFileName, ImageFileName, SHA256HashData], limit=200)
| sort(@timestamp, order=desc)
Q4 · XMRig miner drop & launch (MicrosoftEdgeUpdate.exe --config=mgwthmc2.dat + WinRing0x64.sys)
CONF HIGHFP LOWCOST LOW

Looks for: the XMRig component set under \Microsoft\Windows\Temp\ or the tell-tale --config=mgwthmc2.dat launch, plus the abusable WinRing0x64.sys/libuv-1.dll in a temp path. Accomplishes: catches the miner stage. FP: low for the specific config/path; the fake MicrosoftEdgeUpdate.exe location is the discriminator (legit EdgeUpdate lives in Program Files).

// HUNT: Vidar-campaign XMRig miner drop/launch (T1496 / T1036.005)
// CONF: high  FP: low  COST: low
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2|PeFileWritten/
| (CommandLine=/--config=\s*mgwthmc2\.dat|MicrosoftEdgeUpdate\.exe.{0,40}mgwthmc2/i
   or TargetFileName=/\\Microsoft\\Windows\\Temp\\(MicrosoftEdgeUpdate\.exe|libuv-1\.dll|WinRing0x64\.sys|mgwthmc2\.dat)$/i
   or ImageFileName=/\\Microsoft\\Windows\\Temp\\MicrosoftEdgeUpdate\.exe$/i)
| table([@timestamp, aid, ComputerName, UserName, FileName, ImageFileName, TargetFileName, CommandLine], limit=200)
| sort(@timestamp, order=desc)
Q5 · Known Factory-v3 loader hashes (historical sweep)
CONF HIGHFP LOWCOST LOW

Looks for: execution of any of the published Factory-v3 loader SHA-256s. Accomplishes: a fast, decisive historical sweep. FP: none — exact-hash match. Note the loader is polymorphic, so a clean result does not clear the host — pair with Q1/Q3/Q4. Full hash list in §9.

// HUNT: Vidar Factory-v3 loader by known hash (T1204.002 / T1027.001)
// CONF: high  FP: low  COST: low | polymorphic loader — behavioral queries carry coverage
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2|PeFileWritten/
| SHA256HashData=/^(097a87cfa4a5186aba3bba096866692951bde59c6f0c2e8c1c4a599246d14da8|201594c9d173bba6cb509407ecba378c19b93da0a81a2182a913c480e6dbb54e|35dde1b2482b12582820a861e7c46f10721af6b75052fc872c05d2230a4e8ca1|0a6a67a2fc4d79ec1cd8afc5b8b7a5e69a406e53d57a7334e097c5d0644de5f6|488d941b7b4428b0f4a0e5495e3857b9b96215fb3e7f164b06640d59096425e6)$/i
| table([@timestamp, aid, ComputerName, UserName, FileName, ImageFileName, SHA256HashData], limit=max)
| sort(@timestamp, order=desc)
Q6 · C2 / mining-pool / geo-beacon network
CONF HIGHFP MEDCOST LOW

Looks for: outbound to the four Vidar C2 IPs on :443, DNS for pool.supportxmr.com (XMRig), or the ip-api.com geo-beacon. Accomplishes: network-side confirmation. FP: C2 IPs and mining pool are strong; ip-api.com is dual-use (some legit apps query it) — treat that branch as pivot, alert on the pool + C2 IPs.

// HUNT: Vidar C2 + XMRig pool + geo-beacon (T1041 / T1071 / T1496)
// CONF: high  FP: medium  COST: low
// TUNING: alert on the C2 IPs + pool.supportxmr.com; keep the ip-api.com branch pivot-only (dual-use)
#event_simpleName=/NetworkConnectIP4|DnsRequest/
| (RemoteAddressIP4=/^(136\.243\.203\.109|136\.243\.203\.111|116\.203\.243\.208|138\.199\.246\.13)$/
   or DomainName=/^(pool\.supportxmr\.com|ip-api\.com)$/i)
| table([@timestamp, aid, ComputerName, UserName, RemoteAddressIP4, RemotePort, DomainName], limit=200)
| sort(@timestamp, order=desc)
08

CrowdStrike Custom IOA Recommendations

IOA NameField PatternsBenign ExclusionsDeployment Path
Vidar — SystemAgentService persistenceCmdLine schtasks … SystemAgentService / RegValue SystemAgentService / NisSrv.exe outside System32None expectedCustom IOA → Process Creation + Reg, critical, Detect+Block
Vidar — XMRig launcherCmdLine --config=mgwthmc2.dat / image \Microsoft\Windows\Temp\MicrosoftEdgeUpdate.exeNone — real EdgeUpdate runs from Program FilesCustom IOA → Process Creation, high, Detect+Block
Vidar — MpClient.dll sideloadModule/file MpClient.dll outside \Program Files\…Defender\None expected in user/temp pathsCustom IOA → Process Creation; block by cert serial
Q1, Q4 and Q2/Q3 are strong Detect+Block promotions (near-zero FP). Q5 is a hash sweep — pair with Falcon Custom IOC import of the §9 hash list. Q6 alerts on the C2 IPs + mining pool; keep the ip-api.com branch pivot-only. Because the loader is polymorphic and rogue-signed, prefer behavioral IOAs + cert-serial blocking over hash-only detection.
09

Machine-Readable IOC Appendix

Grouped IOC Quick-Copy

One-click blocks for Falcon IOC Management, behavioral detection, and audit. Unit 42 published a large atom set — seed the hashes/IPs, but the loader is polymorphic so keep the persistence + sideload + XMRig-drop behaviors as the durable layer.

Falcon IOC Management CSVbulk import
type,value,action,severity,expiration,description,tags
sha256,097a87cfa4a5186aba3bba096866692951bde59c6f0c2e8c1c4a599246d14da8,prevent,high,2026-10-11,Vidar Factory-v3 x64 EXE loader,campaign:VidarX3D
sha256,201594c9d173bba6cb509407ecba378c19b93da0a81a2182a913c480e6dbb54e,prevent,high,2026-10-11,Vidar Factory-v3 x64 EXE loader,campaign:VidarX3D
sha256,35dde1b2482b12582820a861e7c46f10721af6b75052fc872c05d2230a4e8ca1,prevent,high,2026-10-11,Vidar Factory-v3 x64 EXE loader,campaign:VidarX3D
sha256,0a6a67a2fc4d79ec1cd8afc5b8b7a5e69a406e53d57a7334e097c5d0644de5f6,prevent,high,2026-10-11,Vidar loader DLL (MpClient sideload),campaign:VidarX3D
sha256,488d941b7b4428b0f4a0e5495e3857b9b96215fb3e7f164b06640d59096425e6,prevent,high,2026-10-11,Vidar loader DLL (MpClient sideload),campaign:VidarX3D
ipv4,136.243.203.109,detect,medium,2026-10-11,Vidar C2 :443,campaign:VidarX3D
ipv4,136.243.203.111,detect,medium,2026-10-11,Vidar C2 :443,campaign:VidarX3D
ipv4,116.203.243.208,detect,medium,2026-10-11,Vidar C2 :443,campaign:VidarX3D
ipv4,138.199.246.13,detect,medium,2026-10-11,Vidar C2 :443,campaign:VidarX3D
domain,pool.supportxmr.com,detect,medium,2026-10-11,XMRig Monero mining pool,campaign:VidarX3D
Behavioral Signatureskill-chain detection
Delivery: malvertising -> cracked-software page -> password-protected .bin (obfuscated name)
Loader:   Factory-v3 Go loader ; rogue-signed ; null-padded to ~491 MB (sandbox evasion)
Sideload: fake Go MpClient.dll loaded by a Defender binary (search-order hijack)
Evasion:  patch AmsiScanBuffer first 6 bytes -> E_INVALIDARG (AMSI blind)
Stealer:  %TEMP%\MicrosoftUpdate.exe (Vidar) -> browser creds/cookies/wallets -> C2 :443
Miner:    \Microsoft\Windows\Temp\MicrosoftEdgeUpdate.exe --config=mgwthmc2.dat
          + libuv-1.dll + WinRing0x64.sys ; pool.supportxmr.com
Persist:  SystemAgentService = task(onlogon) + HKCU\...\Run + StartUp .bat -> NisSrv.exe -s
Recon:    ip-api.com/json geo-beacon ; HWID from C: volume serial
Named Artifacts & Pathsfile / task / cert
%TEMP%\MicrosoftUpdate.exe                              # Vidar stealer
...\Microsoft\Windows\Temp\MicrosoftEdgeUpdate.exe      # XMRig launcher
...\Microsoft\Windows\Temp\libuv-1.dll                  # XMRig dependency
...\Microsoft\Windows\Temp\WinRing0x64.sys              # XMRig kernel driver (abusable)
...\Microsoft\Windows\Temp\mgwthmc2.dat                 # XMRig Monero config
...\Microsoft\Windows\Temp\NisSrv.exe                   # persistence copy of loader
MpClient.dll                                            # fake Go DLL (sideload) ; real one in Defender dir
Task/Run value: SystemAgentService                      # -> NisSrv.exe -s (onlogon)
StartUp\FEbJCNWOCKMJ.bat                                # startup persistence
Cert: CN=justwatch.com / issuer WR3 / serial 2f:7e:f0:15:7d:17:62:5c:09:86:91:ce:f1:ff:7d:63
Campaign & Attributionenrich / pivot
Operator:   X3D MINER (financially motivated MaaS affiliate)
Builder:    Factory-v3 / "UpdateFactory" (Go 1.25.9) — also builds Lumma loaders
Imphash:    d42595b695fc008ef2c56aabd8efd68e (EXE cluster)
            d8b31f8c03e0c76ff245ed05a15ffe6c (DLL / MpClient cluster)
Cert B:     CN=*.bleacherreport.com (cloned GlobalSign Atlas issuer) — Variant B
Telegram:   ci0iiif ; notification tag "X3D MINER - NEW LOG"
Targets:    consumers + SMBs ; US / EU ; dual monetization (log sales + mining)
10

Hardening — Tiered & Deployable

Entry is user-run cracked software, and the loader leans on rogue code-signing, DLL sideloading and an abusable driver. Cut off untrusted execution, validate signatures, and make the fixed drop-paths unusable.

Immediate — Block the atoms, alert on persistence
  • Block the published atoms nowM1031. Import the §9 CSV: loader SHA-256s prevent, C2 IPs + pool.supportxmr.com detect. Block the rogue cert by serial.
  • Alert on the SystemAgentService persistence + NisSrv.exe-outside-System32 patternM1040 / M1018. Deploy Q1/N4 as detections; the name+path combination is unique to the campaign.
  • Enable the Microsoft vulnerable-driver blocklist / HVCIM1050. Blocks the abusable WinRing0x64.sys the miner loads.
  • Enable Falcon ransomware/behavioral prevention + Tamper Protection; monitor AMSI-bypass behaviorM1040. The loader patches AmsiScanBuffer — behavioral prevention doesn't rely on AMSI.
Near term — Constrain execution & sideloading (pilot first)
  • Block execution from user Temp / AppData / Downloads with WDAC/AppLocker or ASRM1038. Breaks the Vidar/XMRig/NisSrv.exe drop-and-run pattern (Q2/Q4/Q1).
  • Enforce Authenticode chain validation; block untrusted/self-signed publishersM1045. The loader relies on rogue WR3/cloned certs that are not in the MS trust store (N3).
  • Scan files regardless of size (decompress padding before size limits)M1049. Defeats the 491 MB null-inflation sandbox-evasion trick (N2).
  • Block/monitor MpClient.dll loaded outside the Defender directoryM1038 / M1040. Directly targets the sideload (Q3).
  • Egress-filter mining pools and known stealer C2; DNS RPZ for *.supportxmr.comM1037. Chokes the miner and Vidar exfil (Q6).
Strategic — Reduce attack surface
  • User-application control / software allow-listing; remove local-admin from standard usersM1038 / M1026. Removes the cracked-software execution path at the root.
  • Phishing-resistant MFA + rapid session/cookie revocation on stealer hitsM1032 / M1017. Vidar's value is stolen cookies/sessions — invalidate them fast.
  • Web filtering / ad-network reputation to blunt malvertisingM1021. Cuts the delivery vector before download.

Deployable Playbook — Detect the drop-set & persistence (PowerShell, report-only)

# 1. Vidar/XMRig drop-set under the AppData Temp path (defensive scan; report only).
$t = Join-Path $env:APPDATA 'Microsoft\Windows\Temp'
'MicrosoftEdgeUpdate.exe','libuv-1.dll','WinRing0x64.sys','mgwthmc2.dat','NisSrv.exe' | ForEach-Object {
  $p = Join-Path $t $_
  if (Test-Path $p) { [pscustomobject]@{ File=$_; Path=$p; SHA256=(Get-FileHash $p -Algorithm SHA256).Hash } }
}
if (Test-Path (Join-Path $env:TEMP 'MicrosoftUpdate.exe')) { "Vidar drop present: $env:TEMP\MicrosoftUpdate.exe" }

# 2. SystemAgentService persistence (scheduled task + Run key + startup .bat).
Get-ScheduledTask -TaskName 'SystemAgentService' -ErrorAction SilentlyContinue | Select TaskName, State
Get-ItemProperty 'HKCU:\SOFTWARE\Microsoft\Windows\CurrentVersion\Run' -ErrorAction SilentlyContinue |
  Select-Object -ExpandProperty SystemAgentService -ErrorAction SilentlyContinue
Get-ChildItem "$env:ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp\*.bat" -ErrorAction SilentlyContinue |
  Select-String -Pattern 'NisSrv' -List | Select Path

# 3. Fake MpClient.dll outside the Defender directory.
Get-ChildItem "$env:USERPROFILE" -Recurse -Filter 'MpClient.dll' -ErrorAction SilentlyContinue |
  Where-Object FullName -notmatch 'Windows Defender|Microsoft Defender' |
  Select-Object FullName, @{n='SHA256';e={(Get-FileHash $_.FullName -Algorithm SHA256).Hash}}
⚠ All snippets above are read-only (scan/report). Remediation (removing the task/Run value/files) should follow the containment runbook after evidence capture. Pilot ASR/WDAC user-path blocks on a ring before fleet rollout.
11

Containment Runbook

PhaseActionsOwnerEvidence
IsolateNetwork-contain any host with Q1/Q2/Q3/Q4 hits; block the four C2 IPs + pool.supportxmr.com; cut the XMRig processSOC L2Containment timestamps; Q1/Q4 events
TriageReconstruct download → loader → MpClient.dll sideload → Vidar/XMRig drop → persistence timeline; capture the loader, NisSrv.exe and mgwthmc2.dat; confirm which browsers/wallets Vidar accessedIRProcess timeline; recovered samples/hashes
EradicateRemove the SystemAgentService task + Run value + StartUp .bat, the XMRig drop-set, MicrosoftUpdate.exe and the fake MpClient.dll; reset all credentials and revoke browser sessions/cookies Vidar could have stolen; block the rogue cert serialIRCred-reset + session-revoke log; removed artifacts
RecoverRebuild or clean-verify affected endpoints; confirm no residual persistence or driver; restore user access with fresh credentials/MFAIR + ITClean-scan evidence
HardenBlock §9 atoms; deploy Q1/Q3/Q4 IOAs Detect+Block; enable vuln-driver blocklist; block user-path execution; enforce Authenticode validation; scan-regardless-of-sizeDetection EngIOC + IOA status
12

Detection Coverage Map & Validation

TechniqueBehaviorCQLIOACoverage
T1608 / T1204.002Malvertising → cracked-software executionGAP native proxy/download review (N1)
T1574.002 / T1562.001MpClient.dll sideload + AMSI patchQ3IOA-3Partial needs module-load telemetry for full coverage
T1555 / T1005Vidar stealer drop & harvestQ2Good masquerade path decisive
T1496XMRig miner drop & launchQ4IOA-2Good config + path + driver
T1053.005 / T1547.001SystemAgentService persistenceQ1IOA-1Good task + Run + StartUp
T1027.001Polymorphic rogue-signed loaderQ5Partial hash sweep only — behaviorals carry it
T1041 / T1071 / T1496C2 / mining-pool / geo-beaconQ6Good C2 + pool; ip-api pivot-only

Validation gates: (1) confirm ProcessRollup2 with command line and that file events carry TargetFileName; verify module-load telemetry is enabled for Q3's MpClient.dll branch; (2) exclude the real Defender directories in Q3 and legitimate ip-api.com callers in Q6 before alerting; (3) because the loader is polymorphic, treat Q5 as a sweep and rely on Q1/Q3/Q4 for durable coverage; (4) lab-test a benign scheduled-task create and a benign ip-api.com lookup to confirm Q1/Q6 don't over-fire; (5) promote Q1/Q3/Q4 to Custom IOA Detect+Block; import the §9 hash list as Custom IOCs; block the rogue cert serial. The drop-path names, SystemAgentService value and --config=mgwthmc2.dat launch are tenant-agnostic and safe to deploy as-is.

13

Hunt Summary Ticket

TITLE:        Hunt — Vidar Stealer + XMRig Malvertising (Factory-v3, operator X3D MINER)
SEVERITY:     High (active ITW; credential theft + resource hijacking; SMB/consumer targeting)
SCOPE:        Windows user workstations; anywhere cracked-software may be run
HYPOTHESIS:   Malvertising -> password-protected .bin -> rogue-signed Factory-v3 Go loader
              (inflated ~491 MB) -> fake MpClient.dll sideload + AMSI patch -> Vidar
              (%TEMP%\MicrosoftUpdate.exe) + XMRig (\Windows\Temp\MicrosoftEdgeUpdate.exe
              --config=mgwthmc2.dat, WinRing0x64.sys) -> persist as SystemAgentService / NisSrv.exe.
DISCLOSED:    Unit 42 2026-07-09 (campaign from Apr 2026)
QUERIES RUN:  Q1 SystemAgentService persistence (IOA) | Q2 Vidar drop | Q3 MpClient.dll sideload* (IOA) |
              Q4 XMRig drop/launch (IOA) | Q5 known-hash sweep | Q6 C2/pool/geo-beacon
              (* = needs module-load telemetry for full coverage)
DO FIRST:     Q1, Q4, Q3 -- escalate any hit; Q2 confirms stealer; Q6 confirms exfil/mining
FINDINGS:     <pending analyst execution>
GAPS:         Delivery (malvertising/download) is native-log only; loader is polymorphic (Q5 sweep only)
ACTIONS:      Block §9 atoms + rogue cert serial; enable vuln-driver blocklist; block user-path exec;
              enforce Authenticode validation; scan-regardless-of-size; deploy Q1/Q3/Q4 IOAs;
              reset creds + revoke sessions on any Vidar hit
OWNER:        HuntPack
VERSION:      v0.2 - 2026-07-13
14

Changelog

v0.22026-07-24CQL correctness pass. All table() calls now carry an explicit row limit: the default is 200 and truncation is silent, so a capped result was indistinguishable from a complete one. Atomic-IOC sweeps (filters over 5+ hashes or C2 IPs) use limit=max so a wide infection is never silently under-scoped; behavioural hunts use limit=200, where exceeding the cap indicates the query needs tuning. Where present, event names that do not exist in the Falcon data model were corrected (e.g. ServiceInstalled is a Sysmon concept, not a Falcon event; ElfFileWritten is ELFFileWritten) — such queries could never return a row. No detection logic, fields, or IOCs changed.
v0.12026-07-13Initial pack built to the review-v2 gold layout (fixed left-sidebar scrollspy TOC, collapsible, cloud selector inside the CQL section, per-card Copy/Open-in-Falcon, Grouped IOC Quick-Copy grid, coverage+validation, .ticket). Sourced from the Palo Alto Unit 42 report "Vidar Stealer Unmasked: Code Signing Abuse, Go Loaders and File Inflation" (2026-07-09), Dark Reading, Infosecurity Magazine and Security Boulevard: full chain (malvertising cracked-software lure, password-protected .bin, rogue-signed file-inflated Factory-v3 Go loader, fake MpClient.dll sideload + AMSI patch, Vidar drop as MicrosoftUpdate.exe, XMRig drop-set under \Microsoft\Windows\Temp\ with WinRing0x64.sys and --config=mgwthmc2.dat, SystemAgentService/NisSrv.exe persistence triple, four C2 IPs :443, pool.supportxmr.com, ip-api.com geo-beacon). 6 CQL + 4 native hunts, 3 IOA candidates; loader SHA-256s, C2 IPs, mining pool and rogue cert seeded as atomic IOCs (loader flagged polymorphic — behavioral queries carry coverage). Teal (C2/exfil) theme.
15

References

TierSourceUsed For
1Palo Alto Unit 42 — Vidar Stealer Unmasked: Code Signing Abuse, Go Loaders and File InflationFull chain + atomic IOCs (loader SHA-256s + imphashes, rogue cert serial, drop paths, SystemAgentService persistence, MpClient.dll sideload, AMSI patch, C2 IPs, mining pool, geo-beacon), MITRE mapping, X3D MINER / Factory-v3 attribution
2Dark Reading — Vidar Infostealer Hammers SMBs via Malvertising CampaignConsumer/SMB targeting; dual monetization; password-protected archive lure; scope
2Infosecurity Magazine — New Campaign Delivers Vidar Stealer and Monero Crypto Miner · Security Boulevard — Vidar Uses Fake Software DownloadsChain corroboration; Factory-v3 MaaS builder shared with Lumma; fake-download delivery

HuntPack v0.1 · Vidar Stealer + XMRig Malvertising (Factory-v3 · operator X3D MINER) · Generated 2026-07-13 · Defensive use only — no offensive code. The Factory-v3 loader is polymorphic and rotates rogue code-signing, so the published hashes/certs and the four C2 IPs are perishable — the durable signal is the behavioral kill-chain (SystemAgentService/NisSrv.exe persistence, MpClient.dll sideload, XMRig drop-set under \Microsoft\Windows\Temp\, --config=mgwthmc2.dat launch). Validate field names, confirm module-load telemetry, and tune the Defender-path / ip-api.com exclusions in your tenant before promoting any query to alerting.