Home Framework Threat Intel APT Encyclopedia Blog
Back to Blog
Threat Intel Sep 3, 2026 20 min read

From Job Offer to Ring 0: Lazarus, CVE-2026-68820 and FudModule 3.1

North Korea burned a Windows kernel zero-day on a fake recruiter email. Here is the whole chain, and the question it leaves every SOC: what is still detectable once the attacker owns the kernel?

Lazarus Operation Dream Job CVE-2026-68820 FudModule 3.1 Kernel Purple Team
A zero-day in the Windows kernel is worth six figures on the open market. Lazarus spent one on a PDF sent to an aerospace engineer who thought he was applying for a job.

In August 2026, Check Point Research published its analysis of a campaign that had been running quietly since early in the year: a revival of Operation Dream Job, North Korea's long-standing fake-recruiter playbook, carrying something the operation had never carried before. That something was a previously unknown local privilege escalation in the Windows kernel, exploited in the wild for roughly five weeks before Microsoft shipped a fix.

The bug is CVE-2026-68820, a use-after-free in afd.sys, the Ancillary Function Driver for WinSock. Microsoft rates it Important at CVSS 7.0: local only, requires code execution first, no remote reachability. That score badly undersells what it bought the operator. It is a clean, driver-free path from a low-privilege user process to SYSTEM and a kernel read/write primitive, and from there to the newest build of the FudModule rootkit, which proceeds to dismantle the telemetry your EDR depends on to see any of it.

This post walks the whole chain: the lure, the two delivery variants, the in-memory downloader, the exploit, the rootkit, the backdoor, and the compromised web infrastructure that carried the traffic. Then it does the part that actually matters for a defender, which is separating what you can realistically detect from what you cannot, and turning that into an exercise you can run.

A note on names: what Google calls these groups now

Before the technical detail, a housekeeping point that affects anyone mapping this campaign into a threat model. On 24 July 2026, Google Threat Intelligence Group replaced its actor-naming scheme. Mandiant's APTnn and FINnn numbering and TAG's separate identifiers are being folded into a single two-word cryptonym: a memorable first word for the cluster, plus a second word encoding origin or motivation.

Category wordMeaningPublished examples
CASTLEPeople's Republic of ChinaAPT40 → ISLAND CASTLE, APT41 → SPIRE CASTLE
RELICRussiaAPT44 → SANDWORM RELIC, APT29 → ICE RELIC, APT28 → LAKE RELIC
NEPTUNENorth KoreaAPT37 → PLAIN NEPTUNE
IONIranAPT33 → BLEAK ION
COMETFinancially motivated cybercrimeFIN7 → WILD COMET, FIN6 → SQUID COMET

"APT" survives all this as a generic descriptor, and MITRE keeps its APTnn group entries. Google is retiring only its own numbering. Old names stay indexed and searchable inside Google Threat Intelligence, next to ATT&CK mappings and other vendors' aliases, so nothing you have already written breaks. UNC designations survive too, for clusters still under investigation, and the gap between the two carries weight: a cryptonym means GTIG has reached an attribution judgement, a UNC number means it has not.

Google's initial batch covered several dozen of the most active groups, with the rest renamed on a rolling basis. Lazarus did not appear in the published examples at the time of writing, so this post keeps using the community name. If you maintain a group taxonomy in a SIEM or an emulation platform, the practical takeaway is to treat actor names as aliases pointing at a cluster, never as primary keys, and to key your detections on technique IDs instead. Those are the one identifier nobody has renamed.

The lure: two ways into the same downloader

The social-engineering front end is the classic Dream Job pattern: a recruiter approach over LinkedIn or a messaging platform, aimed at staff at defence, aerospace and aviation firms, with an observed preference for organisations working on surveillance sensors, drones and robotics. One decoy document was built around a Lockheed Martin job description. Confirmed victims sit in France, Germany, India and Brazil, a spread corroborated across independent reporting.

One detail deserves its own sentence, because it is the kind of thing that defeats sender-reputation controls. At least one compromised French organisation was subsequently used as the sending party for further spear-phishing, so the second wave of targets received their lure from a real, trusted, industry-peer mailbox.

From there the campaign ran two parallel delivery chains.

Chain 1 · The encrypted archive and the side-loaded DLL

  1. The archive. The victim downloads a password-protected ZIP. Inside: a legitimately signed, MuPDF-based PDF viewer, an encrypted PDF, and a malicious libmupdf.dll placed where the viewer expects its real dependency.
  2. The side-load. The user runs the viewer. Windows resolves libmupdf.dll from the application directory first, and the signed binary loads the attacker's library into its own trusted process. Signature checks on the parent executable pass, because the parent executable is genuinely clean.
  3. The decoy. The decoy PDF renders on screen exactly as expected, a job description and a compensation summary, while the side-loaded DLL stages the MISTPEN downloader in memory. Nothing about the user's experience suggests failure.

Chain 2 · "SecurityPDF" and the SEO-poisoned vendor

From July 2026 the operators added a second route that removes the suspicious archive entirely. Phishing mail impersonated Enveil, and the choice of brand is doing real work here. Enveil is a genuine privacy-enhancing-technology firm, founded in 2016 by US intelligence community alumni and led by a former NSA cryptography researcher, selling homomorphic encryption into government and defence. An aerospace engineer who gets mail from that vendor saying a document is encrypted and needs their viewer has little reason to hesitate. Victims were pointed at three lookalike sites (envell[.]xyz, enveil[.]online, uxtramine[.]org) deliberately optimised to rank in search results. A victim who did the responsible thing and searched for the vendor instead of clicking the link landed on attacker infrastructure anyway.

Those sites served SecurityPDF, a modified MuPDF viewer presented as the tool required to open an "encrypted" document. Per Check Point's reverse engineering, the trojanized build parses any PDF it is given, looking for the marker string:

This document is encrypted with sumatrapdf reader!!!!!!!!!!!!

When the marker is present, the viewer extracts the appended blob, decrypts it with a single-byte XOR key (0x39), writes new.exe, and executes it. That binary then reflectively loads the Troy backdoor DLL into memory. Any other PDF opens normally. The malicious behaviour is gated on content the analyst may never have, which is precisely the point: submit the viewer alone to a sandbox and it is a functioning PDF reader.

Splitting delivery this way, with a benign-looking tool from one host and the trigger document from another, is a deliberate reduction of detection surface. Neither half is convicting on its own.

CHAIN 1 · MAILED ARCHIVE Recruiter lure LinkedIn · mail Password ZIP signed viewer + DLL DLL side-load libmupdf.dll MISTPEN in memory download opens stages image load — unsigned DLL inside a signed process process lineage — a document viewer spawning an executable SEO-ranked site envell[.]xyz SecurityPDF trojanized MuPDF marker + XOR 0x39 writes new.exe Troy reflectively loaded installs parses injects CHAIN 2 · SEO-POISONED TOOL
Two chains, two implants, one operation. The chains are independent and produce different payloads on different command channels, MISTPEN over the Graph API and Troy over compromised web servers, so neither is convicting on its own. Note where the green arrows land: in both chains the highest-value detection opportunity is the third step, before any privilege escalation and before anything looks like an attack.

MISTPEN: a downloader that lives in your tenant

MISTPEN is the campaign's staging layer, an in-memory modular downloader with no meaningful on-disk footprint. Its command channel is the part worth studying, because it is designed to be indistinguishable from ordinary corporate traffic: it talks to its operators through the Microsoft Graph API, reading and writing AES-encrypted files in OneDrive.

There is no attacker-controlled domain to block, no unusual TLS destination, no newly registered infrastructure in the netflow. The traffic goes to Microsoft, over 443, from a Windows host in a Microsoft-centric enterprise. Domain blocklists, newly-observed-domain rules and threat-intel feeds are all structurally blind to it.

MISTPEN pulls task-specific modules on demand instead of shipping every capability up front:

ModuleFileFunction
GetInfoPluginRelease_GetInfoPlugin_x64.dllHost profile: domain or workgroup, hostname, username, OS version and build
PvPluginRelease_PvPlugin_x64.dllProcess enumeration: PID, PPID, creation timestamp, owning user and domain
OneScreenCaptureOneScreenCapture64.dllMulti-monitor desktop capture, JPEG-encoded and Base64-wrapped
LPE loaderstaged in memoryFingerprints the host, negotiates a session key, retrieves and detonates FudModule

The LPE loader is selective, and that selectivity is itself tradecraft. Check Point documents a four-stage handshake that runs before the exploit is ever delivered:

  1. Fingerprint the host: exact OS build and installed security products.
  2. Request a public key from the C2, keyed to that fingerprint.
  3. Derive a session key using Kyber / ML-KEM, a post-quantum key encapsulation mechanism, with transport encrypted under GOST-CBC using 16-byte random session keys.
  4. Deploy FudModule, invoked through the exported function DestroyEnv.
MISTPEN resident in memory, no exploit yet sends host fingerprint Build 26100 / 26200? Security profile known? no No exploit served implant keeps beaconing yes Public key from C2 bound to that fingerprint ML-KEM session key GOST-CBC transport FudModule 3.1 entered at DestroyEnv()
The exploit is never sprayed. The zero-day is only released to hosts whose exact build the exploit is known to work against. Everything else falls down the dashed branch and receives nothing at all. That gate is why five weeks of live exploitation produced no public sample: a sandbox, a researcher VM or an unexpected patch level simply never gets served the payload.

The zero-day is never sprayed. It goes only to hosts whose build the exploit is known to work against, and that discipline accounts for most of why five weeks of exploitation stayed quiet. The crypto is its own tell. A post-quantum KEM negotiation wrapped around a Russian block cipher makes a distinctive network fingerprint, and it puts post-quantum cryptography inside offensive tooling well ahead of most enterprise TLS.

CVE-2026-68820: winning a race inside afd.sys

afd.sys is the kernel-mode driver sitting under WinSock. Every socket operation a user-mode process performs, every connect() and every send(), is ultimately serviced by it. That makes it a permanently reachable kernel attack surface from any process that can open a socket, including heavily sandboxed ones. Attackers keep returning to it for that reason.

The flaw is a use-after-free reached through a race condition. Two of the driver's own code paths can operate on the same socket state simultaneously without synchronisation. Trigger both at the right instant and one path dereferences memory the other has already released. Win that race with the freed allocation reclaimed by attacker-controlled data, and the result is the primitive that matters: arbitrary kernel read and write, which converts to SYSTEM by rewriting the process token.

the race window Path A kernel thread obtains a pointer dereferences it holds pointer reads freed memory Socket shared state allocated freed reclaimed with attacker data frees attacker heap spray reclaims it Path B kernel thread frees the object arbitrary kernel read / write rewrite the process token → SYSTEM time
No synchronisation between two paths over one object. Path A never learns that Path B released the allocation it is holding a pointer to. The exploit’s only job is to get its own data into that block during the amber span, after the free and before the use. Land it and the dereference at t₄ reads memory the attacker wrote, which is what turns a socket bug into a kernel read/write primitive.

Two scopes get conflated when this campaign is summarised. The vulnerability reaches back across a broad range of Windows versions, as far as Windows 10 under Extended Security Updates. The exploit Check Point observed was built for Windows 11 builds 26100 (24H2) and 26200 (25H2) specifically, matching the fingerprint-first delivery above. A host can sit unpatched for weeks without ever having been a target.

Why this matters more than the CVSS suggests: BYOVD without the D

For years the standard route to kernel code execution has been Bring Your Own Vulnerable Driver: drop a signed-but-flawed third-party driver, load it, abuse it. The whole defensive apparatus built since then assumes that step exists. Microsoft's vulnerable driver blocklist, HVCI, driver-load telemetry and hunting rules for unexpected .sys files in C:\Windows\Temp all watch for a driver arriving.

Exploiting afd.sys skips all of it. Nothing is dropped and nothing is loaded. The vulnerable driver is already resident, already Microsoft-signed, and already required for the machine to have a network stack. Every control that watches for the arrival of a bad driver observes nothing at all.

Disclosure timeline

DateEvent
Early July 2026In-the-wild exploitation begins as a zero-day
28 July 2026Reported to MSRC by Check Point Research
31 July 2026Microsoft confirms the vulnerability
5 August 2026CVE-2026-68820 assigned
11 August 2026Patched on Patch Tuesday, and added to the CISA KEV catalog the same day

That is roughly five weeks of live exploitation against a targeted victim set. If your defence model assumes patch latency is the only exposure window, this is the counterexample: for those five weeks, patching was not an available control to anyone.

The fix ships in KB5121003 for Windows 11, taking builds to 26100.9168 and 26200.9168, and KB5120249 for Windows 10 under ESU. One operational caveat that is easy to miss in a compliance dashboard: because the fix replaces a kernel driver, installing the update is not sufficient until the host reboots. A patched-but-unrebooted machine is still exploitable, and most patch reports will happily count it as remediated.

FudModule 3.1: the rootkit as a telemetry demolition tool

FudModule is not a persistence mechanism and it is not a backdoor. It is a data-only kernel rootkit whose single purpose is to make the rest of the intrusion unobservable. Version 3.1 is injected into a SYSTEM-level msiexec.exe process and, once operating on kernel structures, works through a checklist:

The new capability: switching off Smart App Control

What makes 3.1 a genuine version bump is the Smart App Control tampering stage, and this one is corroborated beyond the primary analysis. Smart App Control is the Windows 11 reputation-based execution control that blocks untrusted and unsigned binaries outright, a meaningful obstacle to a toolkit that wants to run unsigned payloads.

Independent coverage describes the capability as resetting Smart App Control's verified-and-reputable policy state. Check Point gives the mechanism: the rootkit sets VerifiedAndReputablePolicyState to zero, then invokes NtSetSystemInformation with information class 0xA4 and option 0x10000000 which forces Windows to re-read its code integrity policy on the spot. The system does not reboot, no policy file changes on disk, and the machine simply stops enforcing the control it believes it is still enforcing.

Version 3.1 also drops two things present in v3: the dedicated Microsoft Defender suspension stage, now generalised into broader security-product suppression, and the PPL-stripping routine aimed at AhnLab's asdsvc.exe. That is a maintained codebase with a release process, not a one-off tool.

Troy: 17 commands and a debug path left in

Troy is the hands-on-keyboard implant, a single 64-bit DLL and one of the campaign's newly documented components. It ships with an unstripped PDB path, which is both an excellent hunting artefact and a small window into the developer's build environment:

E:\HK\Tool_Module\Troy_Handle\1Troy_Create_Dll_Tool\x64\Release\Test_Dll.pdb

On start it iterates three hardcoded C2 URL and port pairs until one answers with the string CONNECTED, completes a challenge-response authorisation, then registers with a client identifier and a profile: user directory, account name, Windows version, IPv4 address and working directory. Tasks arrive Base64-encoded. Results go back in a JSON envelope of the form {"to":"<channel>","msg":"<base64>"}, chunked when large.

CommandCapability
WAITKeepalive no-op, maintains the session
DRIVESEnumerate mounted volumes
LIST|<path>Directory listing with timestamps
OPEN|<exe> [args]Launch an executable with a hidden window
DELETE|<path>Recursive file or folder deletion
ZIPDOWNLOAD|<src>|<dst>PowerShell Compress-Archive, then upload
DOWNLOAD|<src>|<dst>Chunked file exfiltration
UPLOAD|<src>|<dst>Write a file to disk
CMD|<commandline>Interactive shell with a 10-second watchdog
mem <dllpath> <pid>In-memory DLL injection via an architecture-matched reflective loader
pk <pid>Terminate a process by identifier
sleep <N>One-shot delay of N minutes
DEFAULTSLEEPRevert to the configured beacon interval
GET_CONFIG / SET_CONFIGRead or update eight stored configuration fields
pv / pvdProcess listing, with WMI-enriched command lines in the pvd variant

The injection routine is textbook and worth naming for detection purposes: allocate RWX memory in the remote process, write the loader and payload, execute via RtlCreateUserThread. Note also what is absent. There is no credential dumping, no built-in lateral movement, no domain enumeration. Troy is an espionage tool for reading files off a specific engineer's workstation, not a ransomware precursor.

RelayShell: when someone else's CMS is the C2

The campaign runs no attacker-owned C2 servers in the traditional sense. Command traffic is relayed through compromised legitimate web servers, specifically Roundcube webmail instances, WordPress sites and PrestaShop stores, each running a PHP webshell tracked as RelayShell. Check Point identified at least 17 distinct relay identifiers, implying a comparable number of compromised nodes. Operators reach them through commercial VPN egress to obscure origin.

The Roundcube compromises are notable because they chain a known bug with commodity criminal supply. The operators used dark-web credential leaks to authenticate, then exploited CVE-2025-49113, a CVSS 9.9 PHP object deserialisation RCE in Roundcube's upload.php that requires authentication, to land the shell. That flaw was patched in Roundcube 1.5.10 and 1.6.11 and has been in the CISA KEV catalog since February 2026, so every node in this relay pool was an unpatched, credential-reused webmail server. Building the relay pool cost them a credential dump and a public exploit, and nothing beyond that.

RelayShell itself is a bidirectional relay with two modes. In victim mode it creates a password-selected session, decrypts a hidden configuration with a custom substitution cipher to recover a backbone URL and a unique PID, and POSTs to that backbone to signal the session is live. In operator mode it scans for the most recent .ses session files, checks connectivity, updates configuration, uploads and deletes files with Base64-encoded paths and content, and retrieves activity logs. Both sides talk by dropping files instead of holding a socket open. Each one is named for its session, with a trailing digit saying who wrote it: 1 for the victim, 2 for the operator.

Operator operator mode egress ExpressVPN COMPROMISED THIRD-PARTY SITES · ≥17 NODES Roundcube webmail CVE-2025-49113 WordPress PrestaShop each running RelayShell victim mode · operator mode tasks results Victim host Troy implant what the netflow sees: a reputable domain file-based channel · <id>2.log operator → victim · <id>1.log victim → operator
There is no attacker domain to block. Every hop the victim can observe terminates on a legitimate, well-reputed third-party site, so blocklists, newly-registered-domain rules and TI feeds have nothing to match. Taking down one relay costs the operator one node out of seventeen. The reciprocal point is the one defenders under-weight: if you run any of these platforms on the internet, you are the infrastructure, and the .ses and <id>N.log files under your webroot are the artefact.

If you run an internet-facing Roundcube, WordPress or PrestaShop instance, this is your reminder that you are not only a target, you are potential infrastructure. Those .ses and <id>1.log / <id>2.log files under a webroot are a directly huntable artefact.

Mapping it to MITRE ATT&CK

The full chain, mapped against the current enterprise matrix. Check two IDs before importing any of this into a detection stack, because several write-ups of this campaign have them wrong. T1574.001 is now simply "Hijack Execution Flow: DLL", and the old T1574.002 (DLL Side-Loading) no longer appears in the matrix, having been folded into it. And exploiting a kernel flaw for elevation is T1068, not a sub-technique of T1548, whose sub-techniques cover UAC bypass, sudo and macOS-specific mechanisms.

StageTechniqueATT&CK ID
Recruiter approach over LinkedIn or messagingPhishing: Spearphishing via ServiceT1566.003
Mail with malicious attachment or linkSpearphishing Attachment, LinkT1566.001, T1566.002
Fake Enveil sites ranked in search resultsStage Capabilities: SEO PoisoningT1608.006
Lookalike vendor domainsAcquire Infrastructure: DomainsT1583.001
Victim opens the archive or installs SecurityPDFUser Execution: Malicious FileT1204.002
SecurityPDF posing as a real viewerMasquerading: Match Legitimate Name or LocationT1036.005
libmupdf.dll beside a signed binaryHijack Execution Flow: DLLT1574.001
XOR and AES payload unpackingDeobfuscate/Decode Files or InformationT1140
MISTPEN and Troy staged in memoryReflective Code LoadingT1620
Host, process and AV profilingSystem Info, Process, Security Software DiscoveryT1082, T1057, T1518.001
Multi-monitor screenshotsScreen CaptureT1113
AFD.sys zero-day to SYSTEMExploitation for Privilege EscalationT1068
FudModule into SYSTEM msiexec.exe, Troy mem commandProcess InjectionT1055
Callbacks, minifilters and ETW providers torn downImpair Defenses: Disable/Modify Tools, Indicator BlockingT1562.001, T1562.006
Smart App Control policy state resetSubvert Trust ControlsT1553
Kernel-resident concealmentRootkitT1014
Graph API and OneDrive command channelWeb Service: Bidirectional CommunicationT1102.002
RelayShell on hijacked CMS and webmail hostsServer Software Component: Web Shell, Compromise InfrastructureT1505.003, T1584
Troy CMD and ZIPDOWNLOADWindows Command Shell, PowerShellT1059.003, T1059.001
Archive and exfiltrate over the C2 channelArchive via Utility, Exfiltration Over C2 ChannelT1560.001, T1041
On-disk persistence after rebootRegistry Run Keys, Scheduled TaskT1547.001, T1053.005
Operator egress through commercial VPNProxy: Multi-hop ProxyT1090.003

Where the detection window actually is

Once T1068 succeeds and FudModule is resident, your endpoint telemetry stops being evidence. The callbacks are gone, the minifilters are unlinked, the ETW providers are silent. Hunting queries against that host return clean results because the data was never generated, not because nothing happened. Any detection strategy that depends on catching the rootkit after it lands is already lost.

ATTACK STEP TELEMETRY STATE DETECTION WINDOW unsigned libmupdf.dll loads into a signed viewer image-load event · signer mismatch the viewer spawns new.exe process creation · parent-child lineage Graph API from a non-Office process netflow · token requests discovery, screen capture, AV enumeration ETW and EDR callbacks firing normally CVE-2026-68820 → SYSTEM · FudModule 3.1 resident in the kernel BLIND FudModule injected into SYSTEM msiexec.exe process, thread, image callbacks removed minifilters unlinked by altitude band file activity no longer observed Smart App Control policy state set to 0 no event, no reboot, still reports as on Troy tasking, collection, exfiltration 94 ETW providers silent — queries look clean
Everything you can catch is above the red line. Nothing in the lower half is missed. It is never generated at all, so a hunt across a compromised host comes back empty and reads as reassuring. One signal outlives the rootkit, and it is a structural one: telemetry that used to arrive from this host, and then stops.

So the whole defensive problem reduces to one question: can you see the chain before ring 0? Concretely, these are the events that still exist in that window.

So the best detection opportunity in this whole intrusion is a DLL load inside a PDF reader, about five minutes in, long before any of it looks like an attack.

How to emulate this kill chain

Reading an advisory tells you what an actor did. It does not tell you what your environment would have said about it. The purple-team question here is narrow and answerable: of the observable behaviours in this chain, which ones produce an alert in my environment today? What follows is a plan you can run with whatever tooling you already have.

Run it in order. A flat checklist of techniques only shows which behaviours alert on their own. Running them as a chain shows the first point at which the intrusion becomes visible to you.

  1. Delivery and execution. Emulate T1574.001, T1204.002 and T1036.005 using a benign side-loaded library next to a signed binary. This is the pre-escalation window, the part you can actually win. If the image-load detection does not fire here, nothing later will matter.
  2. Discovery and collection. Run T1082, T1057, T1518.001 and T1113. Cheap, noisy, and routinely unalerted. Most teams discover here that screen capture and security-software enumeration produce no signal at all.
  3. Cloud-service C2. Exercise T1102.002 against a legitimate cloud endpoint and check whether an unusual process talking to a trusted destination raises anything. This is where identity and egress telemetry earn their keep, so correlate wherever that lives for you: Sentinel and Defender for Endpoint on the Microsoft side, Splunk for the Linux and web-server tail.
  4. Escalation and defence evasion, simulated only. Do not weaponise CVE-2026-68820, and be sceptical of any tool that offers to. Exercise the detection paths for T1068, T1055, T1562.001 and T1553 through safe proxies: an unprivileged process opening a handle it should not, a benign injection into a SYSTEM process, a reversible tamper with a test ETW provider, a Smart App Control state read.
  5. Read the result per technique, not per campaign. A single pass/fail for "Lazarus" is useless. What you want is a verdict for each technique, backed by the specific events that prove it, rolled up by tactic so the gap has a shape.

What emulation cannot tell you

Emulation reproduces behaviour, not exploits. Nothing in a purple-team run tells you whether your hosts were vulnerable to the AFD.sys race. That is a patch-state question, answered by inventory and by confirming those hosts actually rebooted after KB5121003.

What emulation does tell you is whether the surrounding behaviours are visible: the side-load, the injection, the cloud C2, the defence tampering. That distinction matters, because it is where the real gap usually sits. Most organisations were patched within days of 11 August. Far fewer can prove they would have seen an unsigned DLL load into a signed PDF viewer on 3 July.

An ATT&CK Enterprise matrix in detection mode: each technique cell is coloured green for Detected, amber for Partial, red for Not Detected and grey for Not Tested, with an overall detection rate above the matrix.
What the answer should look like. Per-technique verdicts rolled back onto the ATT&CK matrix, so the gap becomes a shape you can point at instead of a number in a report. The run shown is a lab exercise from a Cyllex build, not this campaign. Against the Lazarus chain the cells that matter are T1574.001, T1068 under Privilege Escalation, and T1562.001 under Defense Evasion.

All of the above is a manual exercise today, and a fairly laborious one: five phases, roughly twenty techniques, correlated by hand against whichever SIEM holds the relevant logs. That workflow is what Cyllex is being built to collapse into a single phased campaign, with the destructive tail gated instead of executed and the per-technique verdicts produced automatically. Cyllex is still in pre-release at the time of writing. When it ships, this chain is one of the profiles it is designed to carry, and this post is the specification for it.

What actually reduces exposure

A five-week zero-day window means patching was never available as a control. What was available, the entire time, was noticing that a signed PDF reader had loaded a DLL nobody signed. Go and find out whether yours would have.

Indicators and sources

TypeIndicator
Domainsenvell[.]xyz, enveil[.]online, uxtramine[.]org
IP addresses135.181.67[.]203, 135.181.185[.]158
Side-loaded DLLlibmupdf.dll (malicious build, beside a signed MuPDF viewer)
MISTPEN modulesRelease_GetInfoPlugin_x64.dll, Release_PvPlugin_x64.dll, OneScreenCapture64.dll
Dropped executablenew.exe (written by SecurityPDF)
PDF trigger markerThis document is encrypted with sumatrapdf reader!!!!!!!!!!!!
Troy PDB pathE:\HK\Tool_Module\Troy_Handle\1Troy_Create_Dll_Tool\x64\Release\Test_Dll.pdb
FudModule 3.13b6378df8442e63a6ed7317075913e4720847a510d95022d4a8347b2637c245d
Troy sample590fb6ae19480d694e08ee85859cad8066f2f87e7e5abba2960c6d115e1615d6
Webshell artefacts*.ses, <session_id>1.log, <session_id>2.log under a webroot

Every hash, domain and address above points at its VirusTotal page instead of the indicator itself, so following one is a lookup and never a request to attacker infrastructure. For family-level context, Malpedia carries entries for FudModule, attributed there to Lazarus with a dozen prior write-ups and three YARA rules, and for MISTPEN, catalogued under UNC2970 from Mandiant's 2024 reporting. MISTPEN predates this campaign; only its delivery here is new. Troy has no Malpedia entry at the time of writing, which is what you would expect from a family first documented here. The actor page is Lazarus Group, and the vulnerability record is CVE-2026-68820 on NVD.

Indicators above are drawn from Check Point's report, which publishes the full hash sets for each family. The primary technical analysis is Check Point Research, "Shattering the Dream: When a Job Offer Becomes a Zero-Day Attack". The vulnerability details, CVSS rating and patch scope were cross-checked against Tenable's August 2026 Patch Tuesday analysis and the CISA KEV catalog; the campaign timeline and victimology against BleepingComputer, Help Net Security and Security Affairs. Actor naming follows Google Threat Intelligence Group's updated system. Every technique ID was checked against the live MITRE ATT&CK matrix instead of being copied from secondary reporting.

Where sources disagree, this post follows the majority. Reporting on the start of exploitation ranges from early June to early July 2026; the "early July" reading is used here because it is what Check Point's own timeline, BleepingComputer and the widely repeated "five weeks before the patch" framing all support.

Related reading on this blog: Scattered Spider's identity-first playbook, the mirror image of this campaign, where there is no malware to find at all, and Judgment Panda, on APT31's abuse of legitimate cloud services as a C2 channel.