APT28 PRISMEX — Operation Neusploit (CVE-2026-21509)
Executive Summary
Operation Neusploit (Zscaler ThreatLabz, Jan 2026) is an APT28 (Fancy Bear, Russia GRU) espionage campaign exploiting CVE-2026-21509, a security-feature-bypass in how Microsoft Office handles RTF files (affects Office 2016/2019, LTSC 2021/2024, and M365 Apps; Microsoft shipped an out-of-band fix on 26 Jan 2026). APT28 sends crafted RTF/Word documents in phishing emails; CERT-UA reported abuse against 60+ central-government addresses in Ukraine.
The exploited document delivers a dropper that deploys MiniDoor — an Outlook email stealer assessed to be a stripped variant of the APT28-linked NotDoor Outlook backdoor — and PixyNetLoader (the "PRISMEX" loader), which in turn loads a Covenant Grunt implant for hands-on C2 (observed using filen.io for staging/exfil). Because the actor abuses Office and a known C2 framework, detection centers on the Office-document exploit lineage, the Outlook-stealer behavior, and the loader → Covenant Grunt chain.
Source Review & Web Hunter Notes
| Tier | Source | Key Finding | Carry |
|---|---|---|---|
| 1 · Vendor research | Zscaler ThreatLabz — Operation Neusploit | APT28 + CVE-2026-21509; MiniDoor/PixyNetLoader/Covenant Grunt; CEE/Ukraine targeting | yes |
| 1 · Vendor research | Picus — CVE-2026-21509 APT28 Office zero-day | RTF security-feature-bypass mechanism; OOB patch 26 Jan 2026; affected Office versions | yes |
| 1 · News / CERT | The Hacker News / CERT-UA | 60+ Ukrainian government addresses; MiniDoor = stripped NotDoor; Covenant Grunt | yes |
| 2 · Vendor | Hive Pro / Security Affairs | Operation Neusploit advisory; espionage focus; payload chain | partial |
Decisions: patch-first (CVE-2026-21509 OOB fix closes the exploit); behavior-anchored on the Office-RTF lineage + MiniDoor Outlook-stealer + PixyNetLoader→Covenant Grunt; geopolitically scoped (CEE/Ukraine gov) so relevant orgs run at elevated priority; Covenant is a public framework, so detect its grunt behavior, not a fixed hash.
Hunt Brief & Attack Chain
Working hypothesis: A user opens a phishing RTF/Word; CVE-2026-21509 triggers a dropper that installs MiniDoor (Outlook email theft) and PixyNetLoader, which loads a Covenant Grunt for hands-on espionage and exfil via filen.io.
| Step | Behavior | Telemetry | Hunt Angle |
|---|---|---|---|
| 1 · Phishing | RTF/Word attachment to gov/high-value targets | Mail gateway | N1 |
| 2 · Exploit | CVE-2026-21509 RTF bypass → dropper executes | ProcessRollup2 | Q1; patch |
| 3 · MiniDoor | Outlook email stealer (NotDoor variant) installed/persisted | registry; Outlook VBA; proc | Q3; N3 |
| 4 · PixyNetLoader | "PRISMEX" loader stages the next implant | ProcessRollup2; file | Q2 / Q4 |
| 5 · Covenant Grunt | Covenant C2 implant for hands-on control | ProcessRollup2; net | Q4 / Q5 |
| 6 · Exfil | Email/data exfil (filen.io staging) | NetworkConnectIP4; DNS | Q5; N4 |
Affected surface & telemetry
| Surface | Required Telemetry | Priority | Gap Risk |
|---|---|---|---|
| Office (RTF) endpoints | Process lineage; Office version inventory | Critical | Low — patch + lineage |
| Outlook (MiniDoor) | Outlook VBA / registry; mail-client behavior | High | Medium — VBA/registry telemetry |
| Loader / Covenant C2 | Process lineage + egress | High | Medium — Covenant is generic |
| Mail / exfil | Mail gateway; proxy (filen.io) | Medium | Medium — staging service |
Consolidated IOC Table
| Type | Value | Conf | Action | Context |
|---|---|---|---|---|
| CVE | CVE-2026-21509 (Office RTF) — patched 26 Jan 2026 | high | detect | Patch closes it |
| Behavior | Office (winword/RTF) spawning a dropper / unusual child | high | detect | Exploit outcome — flagship |
| Malware | MiniDoor (NotDoor variant) — Outlook email stealer | medium | hunt | Outlook persistence/exfil |
| Malware | PixyNetLoader ("PRISMEX") → Covenant Grunt | medium | hunt | Loader → C2 implant |
| Network | filen.io staging/exfil; Covenant Grunt HTTP C2 | medium | hunt | C2 / exfil |
ATT&CK Mapping
| Tactic | Technique | Observed Behavior | Query / Control |
|---|---|---|---|
| Initial Access | T1566.001 — Spearphishing Attachment | Phishing RTF/Word to gov targets | N1 |
| Execution | T1203 — Exploitation for Client Execution | CVE-2026-21509 RTF bypass | Q1; patch |
| Persistence / Collection | T1137 / T1114 — Office persistence / email collection | MiniDoor Outlook stealer | Q3; N3 |
| Execution / Defense Evasion | T1574 / T1620 — Loader / in-memory load | PixyNetLoader stages Covenant Grunt | Q2, Q4 |
| Command & Control | T1071.001 — Web protocols (Covenant) | Covenant Grunt HTTP C2 | Q4, Q5 |
| Exfiltration | T1567.002 — Exfil to cloud (filen.io) | Email/data exfil via staging service | Q5; N4 |
Native Audit-Log Hunts
| Hunt | Source | Logic | Response |
|---|---|---|---|
| N1 · Phishing RTF | Mail gateway | RTF/Word attachments to executive/government mailboxes; CEE/Ukraine-themed lures | Quarantine + detonate; warn recipients |
| N2 · Office patch inventory | Software inventory | Office builds missing the 26 Jan 2026 OOB fix for CVE-2026-21509 | Force-patch; the fix |
| N3 · Outlook persistence | Outlook VBA / registry (LoadMacroProviderOnBoot, VbaProject.OTM) | Unexpected Outlook VBA project / startup macros (MiniDoor) | Remove; investigate mailbox |
| N4 · Covenant / filen.io egress | Proxy / DNS | Covenant Grunt HTTP C2 patterns; connections to filen.io | Block; identify the host |
CrowdStrike LogScale CQL Hunt Queries
SyntheticProcessRollup2. CEE/Ukraine-government orgs should run at elevated priority. Covenant is a public framework — tune Q4/Q5 to your environment.Looks for: Word/Office spawning shells/loaders/LOLBins (CVE-2026-21509 exploit outcome). Accomplishes: catches the RTF-exploit chain. FP: some macro-enabled docs — flag non-Office children + RTF context.
// HUNT: APT28 Office RTF exploit lineage (CVE-2026-21509) // MITRE: T1203, T1566.001 | CONF: high FP: low-med COST: low // FP NOTES: macro-enabled docs; flag winword spawning shells/loaders, esp. from .rtf #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | ParentBaseFileName=/^(winword|excel|powerpnt|wordview)\.exe$/i | FileName=/^(cmd|powershell|pwsh|mshta|wscript|cscript|rundll32|regsvr32|msiexec|certutil|curl)\.exe$/i | table([@timestamp, ComputerName, UserName, ParentBaseFileName, FileName, CommandLine], limit=200)
Looks for: a PE written to %TEMP%/%AppData% by an Office-spawned process (PixyNetLoader / MiniDoor drop). FP: correlate with Q1 on the same host.
// HUNT: APT28 dropper writing PixyNetLoader/MiniDoor to a user path // MITRE: T1105, T1574 | CONF: medium FP: medium COST: low // TUNING: correlate to Q1 (Office-spawned); flag PE/dll writes to %TEMP%/%AppData% #event_simpleName=/PeFileWritten|NewExecutableWritten/ | ContextBaseFileName=/^(winword|cmd|powershell|mshta|rundll32)\.exe$/i | TargetFileName=/\\(Temp|AppData)\\.+\.(exe|dll)$/i | table([@timestamp, ComputerName, UserName, ContextBaseFileName, TargetFileName, SHA256HashData], limit=200)
Looks for: Outlook VBA / macro-on-boot registry changes (the NotDoor/MiniDoor persistence). Accomplishes: the email-stealer install. FP: sanctioned Outlook macros — rare; verify.
// HUNT: MiniDoor / NotDoor Outlook email-stealer persistence // MITRE: T1137, T1114 | CONF: med-high FP: low-med COST: low // TUNING: Outlook VBA is rare in most orgs; alert on VbaProject.OTM / LoadMacroProviderOnBoot #event_simpleName=/AsepValueUpdate|RegGenericValueUpdate|PeFileWritten/ | (RegObjectName=/\\Office\\.+\\Outlook\\.+(LoadMacroProviderOnBoot|Security\\Level)/i or TargetFileName=/\\Outlook\\VbaProject\.OTM$/i) | table([@timestamp, ComputerName, UserName, RegObjectName, RegStringValue, TargetFileName], limit=200)
Looks for: a user-path binary spawning a .NET-host process or known Covenant Grunt behavior (rundll32/regsvr32 loading a temp DLL; GruntStager strings). FP: correlate with Q1/Q2; Covenant is generic — tune.
// HUNT: PixyNetLoader -> Covenant Grunt // MITRE: T1574, T1071.001 | CONF: medium FP: medium COST: low // TUNING: Covenant is a public framework; correlate to Q1/Q2 + tune GruntStager indicators #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | (CommandLine=/(GruntStager|Grunt\.exe|Covenant|csc\.exe.+\\Temp\\.+\.cs)/i or (FileName=/^(rundll32|regsvr32)\.exe$/i and CommandLine=/\\(Temp|AppData)\\.+\.dll/i)) | table([@timestamp, ComputerName, UserName, ParentBaseFileName, FileName, CommandLine], limit=200)
Looks for: DNS/connections to filen.io (staging/exfil) or Covenant C2 from a user-path binary. FP: filen.io is a legit service — flag from a non-sanctioned process; correlate with Q4.
// HUNT: APT28 C2 / exfil (filen.io staging / Covenant) // MITRE: T1071.001, T1567.002 | CONF: medium FP: medium COST: med // TUNING: filen.io is legitimate; flag from non-sanctioned processes; correlate to Q4 #event_simpleName=DnsRequest | DomainName=/(^|\.)filen\.io$/i | ContextBaseFileName!=/^(filen|filen-desktop)\.exe$/i | table([@timestamp, ComputerName, ContextBaseFileName, DomainName], limit=200)
Looks for: Office process versions predating the 26 Jan 2026 OOB fix. Accomplishes: exposure inventory — the patch is the fix. FP: low; cross-check build numbers per channel.
// HUNT: vulnerable Office build inventory (CVE-2026-21509) // MITRE: T1203 | CONF: medium FP: low COST: low // TUNING: map FileVersion to the 26 Jan 2026 OOB patched builds per Office channel #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | FileName=/^winword\.exe$/i | groupBy([ComputerName, FileVersion], function=count()) | table([ComputerName, FileVersion, _count], limit=200)
CrowdStrike Custom IOA Recommendations
| IOA Name | Field Patterns | Benign Exclusions | Deployment Path |
|---|---|---|---|
| APT28 — Office spawns dropper | Parent *\winword.exe; Child cmd/powershell/mshta/rundll32/certutil.exe | Sanctioned macro/automation (allow-list) | Endpoint Security → Custom IOA → Process Creation, Detect+Block |
| APT28 — Outlook VBA persistence | Write to *\Outlook\VbaProject.OTM or LoadMacroProviderOnBoot | Sanctioned Outlook macros (rare) | Custom IOA → File Write / registry |
Machine-Readable IOC Appendix
Grouped IOC Quick-Copy
One-click blocks for detection and patch audit. The patch is the fix; payloads/infra rotate — behavior is durable. Add per-incident atoms during triage.
winword.exe spawning cmd/powershell/mshta/rundll32/certutil (RTF exploit outcome) PE/DLL written to %TEMP%/%AppData% by an Office-spawned process (PixyNetLoader/MiniDoor) Outlook VBA persistence: VbaProject.OTM write / LoadMacroProviderOnBoot (MiniDoor = NotDoor variant) rundll32/regsvr32 loading a temp DLL, or GruntStager/csc.exe compiling from %TEMP% (Covenant) DNS/connection to filen.io from a non-sanctioned process (staging/exfil) Vulnerable Office build predating the 26 Jan 2026 OOB fix
MiniDoor # Outlook email stealer (stripped variant of NotDoor; APT28-linked) NotDoor # APT28 Outlook backdoor (parent of MiniDoor) PixyNetLoader # the "PRISMEX" loader -> stages the implant Covenant Grunt# public C2-framework implant used for hands-on control # Actor: APT28 / Fancy Bear (Russia GRU). Campaign: Operation Neusploit. # Targeting: Central/Eastern European + Ukrainian government (CERT-UA: 60+ addresses)
CVE-2026-21509 # Microsoft Office RTF security-feature-bypass (APT28 zero-day) # Out-of-band fix released 26 Jan 2026. Affects: # Office 2016, Office 2019, Office LTSC 2021, Office LTSC 2024, M365 Apps for Enterprise # Verify Office build vs the OOB patched build for your channel; force-update laggards. # Defense-in-depth: block RTF at the mail gateway; disable legacy RTF where possible.
Patch CVE-2026-21509 (26 Jan 2026 OOB) fleet-wide — the fix Block/strip RTF + macro-enabled Office attachments at the mail gateway ASR: block Office apps from creating child processes; block executable content from email Disable Outlook VBA / macros (GPO) unless explicitly required Egress: alert on filen.io from non-sanctioned processes; tune Covenant C2 detection CEE/Ukraine-gov orgs: elevated monitoring + threat-intel feeds
Hardening — Tiered & Deployable
Patch the Office flaw, cut RTF/macro delivery, and constrain Office child processes.
- Patch CVE-2026-21509 (26 Jan 2026 OOB) fleet-wide — M1051. The fix. Inventory laggards (Q6/N2).
- Block/strip RTF + macro-enabled Office attachments at the gateway — M1021. Cuts delivery.
- ASR: block Office apps from creating child processes; block executable content from email — M1042. Breaks the exploit chain (Q1).
- Disable Outlook VBA / macros via GPO — M1042. Neuters MiniDoor persistence (Q3).
- PowerShell CLM + script-block logging; WDAC for LOLBins — M1038 / M1040. Blunts the dropper/loader.
- Egress control: alert on filen.io + tune Covenant C2 detection — M1037.
- Protected Outlook config; monitor VbaProject.OTM — M1018. Feeds Q3/N3.
- Application allowlisting; default-deny LOLBin abuse — M1038.
- Phishing-resistant MFA; high-value-user protections — M1032. Gov/exec targeting.
- Elevated monitoring for CEE/Ukraine-gov orgs + APT28 threat intel — M1047.
Containment Runbook
| Phase | Actions | Owner | Evidence |
|---|---|---|---|
| Isolate | Network-contain the host; preserve the RTF + dropped payloads + Outlook VBA project | SOC L2 | Containment timestamp; Q1 event; RTF |
| Triage | Map RTF → dropper → MiniDoor/PixyNetLoader → Covenant timeline; assess mailbox theft; find C2/filen.io | IR | Process tree; mailbox review; C2 |
| Eradicate | Remove MiniDoor (Outlook VBA) + loader + Covenant Grunt; block C2; reset credentials used on the host | IR | Removal log; cred reset |
| Recover | Rebuild if hands-on Covenant access occurred; rotate creds; review exfiltrated email/data scope | IR + IT | Rebuild ticket; exfil scope |
| Harden | Patch CVE-2026-21509; block RTF/macros; ASR; promote Q1/Q3 IOAs | Detection Eng | Patch coverage; IOA enabled |
Detection Coverage Map & Validation
| Technique | Behavior | CQL | IOA | Coverage |
|---|---|---|---|---|
| T1203 | RTF exploit (Office→dropper) | Q1, Q6 | IOA-1 | Good + patch |
| T1105 / T1574 | Loader drop | Q2 | — | Partial correlate to Q1 |
| T1137 / T1114 | MiniDoor Outlook stealer | Q3 | IOA-2 | Good where VBA unused |
| T1574 / T1071.001 | PixyNetLoader → Covenant | Q4 | — | Partial Covenant generic |
| T1071.001 / T1567.002 | C2 / filen.io exfil | Q5 | — | Partial + proxy (N4) |
| T1566.001 | Phishing RTF delivery | — | — | GAP mail gateway (N1) |
Validation gates: (1) confirm process + (ideally) Outlook VBA/registry + proxy telemetry; (2) baseline any sanctioned Office macros / filen.io use; (3) lab-test a benign winword → cmd (Q1) and a benign VbaProject.OTM write (Q3); (4) patch CVE-2026-21509 + promote Q1/Q3; keep Q2/Q4/Q5 correlated. CEE/Ukraine-gov: elevated priority.
Hunt Summary Ticket
TITLE: Hunt — APT28 PRISMEX / Operation Neusploit (CVE-2026-21509)
SEVERITY: Critical (nation-state espionage; exploited Office zero-day)
SCOPE: Office endpoints (RTF); high-value/government users; CEE/Ukraine elevated
HYPOTHESIS: Phishing RTF (CVE-2026-21509) -> dropper -> MiniDoor (Outlook stealer, NotDoor
variant) + PixyNetLoader -> Covenant Grunt -> hands-on espionage / filen.io exfil.
QUERIES RUN: Q1 Office->dropper (IOA) | Q2 loader drop | Q3 MiniDoor Outlook persistence (IOA) |
Q4 PixyNetLoader->Covenant | Q5 filen.io/Covenant C2 | Q6 vulnerable Office build
+ Native N1-N4 (phishing RTF, Office patch, Outlook persistence, C2/filen.io)
DO FIRST: Patch CVE-2026-21509; then Q1, Q3 — escalate any hit (nation-state)
FINDINGS: <pending analyst execution>
GAPS: Phishing delivery (mail gw); Covenant is a generic framework (tune)
ACTIONS: Patch OOB fix; block RTF/macros; ASR (Office child processes); disable Outlook VBA;
promote Q1/Q3; elevated monitoring for CEE/Ukraine-gov
OWNER: HuntPack
VERSION: v0.3 - 2026-06-12
Changelog
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.References
| Tier | Source | Used For |
|---|---|---|
| 1 | Zscaler ThreatLabz — Operation Neusploit | APT28 attribution, payload chain, targeting |
| 1 | Picus — CVE-2026-21509 (APT28 Office zero-day) | RTF SFB mechanism, OOB patch, affected versions |
| 1 | The Hacker News — APT28 uses Office CVE-2026-21509 | MiniDoor=NotDoor variant; PixyNetLoader; Covenant Grunt; CERT-UA |
| 2 | Hive Pro — Operation Neusploit · Security Affairs | Advisory; espionage focus; chain |
HuntPack v0.3 · APT28 PRISMEX / Operation Neusploit · Generated 2026-06-12 · Defensive use only — no offensive code. Patch CVE-2026-21509 (the fix); behavioral hunts cover the Office-RTF lineage, MiniDoor Outlook theft, and the loader→Covenant chain. Covenant is a public framework — tune to your environment. Validate field names before promoting any query.