Mirage2FA — AiTM Phishing-as-a-Service Targeting Microsoft 365

Session-cookie-stealing reverse-proxy phishing kit ("LinXcoded") bypassing MFA at scale via HTML/XHTML/SVG attachment smuggling
Threat
Mirage2FA (LinXcoded PhaaS)
Severity
ACTIVE AiTM PhaaS
Type
Identity / Cloud Auth
Access
Phishing → Session Hijack
Version
v0.1 (Draft)
Author
HuntPack
Confidence
Medium-High
01

Executive Summary

Mirage2FA is a commercial phishing-as-a-service (PhaaS) platform, branded by researchers as operated by "LinX Coders" / "LinXcoded," that runs adversary-in-the-middle (AiTM) reverse-proxy attacks against Microsoft 365 sign-in flows. The attacker's objective is not password theft alone — it is the authenticated session: the kit relays a victim's username, password, and completed MFA challenge to the real Microsoft login in real time, then captures the resulting session cookie and refresh token, giving the operator a fully authenticated M365 session without ever needing to solve MFA itself. Reporting attributes over 9,000 compromise events and roughly 4,500 targeted US/EU organizations to this single kit as of August 2026, with 63.7% of victims in the United States.

Delivery rides HTML smuggling inside deceptively small (~3 KB) .htm, .xhtml, and .svg email attachments — file types that routinely sail past attachment sandboxes because they contain no executable payload on disk, only obfuscated JavaScript (Base64 + single-byte XOR key 0xAD) that reconstructs the phishing redirect client-side in the browser. The kit also uses already-compromised, authenticated M365 tenants to relay its own phishing email, which lets it inherit the sending tenant's reputation and bypass some mail-flow reputation checks.

The highest-value defensive angle is not catching the phishing email — it is recognizing that ordinary push/OTP MFA does not stop this kit, because the proxy simply relays whatever the user approves. Detection must combine endpoint visibility (mail client handing off to a browser opening a local HTML/SVG/XHTML attachment, followed by DNS/network egress to kit infrastructure) with cloud-side session and OAuth-grant hunting, and hardening must move toward phishing-resistant, token-bound authentication rather than more MFA prompts.

Defender priority: this campaign defeats standard MFA by design. Treat "MFA is enabled" as insufficient coverage for this threat — the queries and hardening in this pack assume session/token theft, not credential theft, is the real objective.
02

Source Review & Web Hunter Notes

TierSourceKey FindingCarry Forward
1The Hacker News, 2026-08-25Campaign scope (4,532 org domains, 9,000+ compromise events), attack chain overview, WebSocket-based session relayYes
1ANY.RUN Cybersecurity Blog, 2026-08-1860+ phishing domains, C2 IP 185.174.100.224, loader path regex, XOR 0xAD obfuscation, attachment format breakdown, operator markers (LINX* tokens)Yes
1BrinzTech Breach Alert, 2026-08-19Attachment display-name lures, Telegram-managed operator panel, compromised-tenant relay ("island hopping"), attribution to LinX CodersYes

Web Hunter Notes

  • No file hashes or JavaScript SHA values were published in any of the three sources — the loader is server-side templated per victim, so static hashes have limited shelf life. IOC coverage below leans on infrastructure (domains/IP) and behavioral fingerprints (XOR key, loader path shape) rather than hashes.
  • This is a distinct PhaaS kit from other AiTM packs already in the library (Storm-2755/PayrollPirates targets payroll portals; UNC6671 is vishing-led; DriftToken targets Salesforce OAuth; AzureCLI-ROPC is a password-spray technique, not a proxy kit) — confirmed via check_coverage.py against the domains/IP below with a clean result before this pack was built.
  • No indicator in the three cited sources contained any instruction directed at an AI agent or automated tooling; all three were treated as pure threat-intel data.
03

Hunt Brief & Attack Chain

Hunt Hypotheses

#HypothesisMITRETelemetryConfidence
H1Endpoints are resolving/connecting to known Mirage2FA phishing or relay domainsT1566.002, T1071.001DnsRequest, NetworkConnectIP4High
H2Endpoints are connecting outbound to the identified C2/staging IPT1071.001, T1557NetworkConnectIP4High
H3Endpoints are making DNS queries with long base64-shaped subdomain labels (victim-email-as-subdomain fingerprint) to low-reputation TLDsT1071.004, T1027DnsRequestMedium
H4A browser process is opening a locally-saved .htm/.xhtml/.svg file via a file: URI shortly after a mail/collaboration client wrote it to diskT1204.002, T1027ProcessRollup2, SyntheticProcessRollup2Medium
H5A mail or collaboration client is directly spawning a browser process (click-through behavior consistent with a phishing lure)T1204.002, T1566.001ProcessRollup2, SyntheticProcessRollup2Medium (high FP without correlation)

Attack Chain

StepActionTelemetryHunt Angle
1Phishing email delivered, often relayed from an already-compromised, authenticated M365 tenantExchange Online mail flow / message traceNative hunt §7 — sender-tenant reputation anomalies
2Victim opens a small (~3 KB) .htm/.xhtml/.svg attachment; mail client hands off to default browserProcessRollup2 (parent-child)Q5
3Browser executes obfuscated JS (Base64 + XOR 0xAD) that HTML-smuggles the loader (pattern: /[a-z]{3}/xls/[a-z0-9]+.js)ProcessRollup2, DnsRequestQ1, Q3, Q4
4Browser is redirected to an AiTM reverse-proxy login page impersonating Microsoft 365DnsRequest, NetworkConnectIP4Q1
5Victim completes username/password + MFA against the proxy; proxy relays each step to the real Microsoft login in real timeEntra sign-in logs (not Falcon-visible)Native hunt §7
6Proxy captures the authenticated session cookie / refresh token over a persistent WebSocket channel to the harvesting endpointNetworkConnectIP4Q2
7Attacker replays the stolen session from operator infrastructure — new device / new location / no MFA challengeEntra Identity Protection risky sign-inNative hunt §7
8Attacker adds persistence (inbox forwarding rule, OAuth app consent) and/or relays further phishing from the compromised tenantUnified Audit LogNative hunt §7
04

Consolidated IOC Table

TypeValueConfidenceActionContext
Domainuser.cheacker.storeHighdetectAiTM relay / phishing subdomain
Domaincheacker.storeHighdetectWebSocket-backed session/cookie harvesting endpoint (apex)
Domainhvr.volatilesour.storeHighdetectAiTM relay / phishing subdomain
Domainadp.pslcertlive.siteHighdetectFake M365 login lure domain
Domainoffice.avcbtech.storeHighdetectFake M365 login lure domain
Domainpynutech.storeMediumdetectCampaign phishing infrastructure
IPv4185.174.100.224HighdetectC2 / staging infrastructure (AS-Colocrossing)
Filenamea1p2i.jsMediumhuntCanonical loader script filename observed in test builds
FilenameeDocxs_Secured.AlertLowhuntAttachment display-name lure
FilenameSignature_Required_ReviewLowhuntAttachment display-name lure
BehavioralLoader path pattern /[a-z]{3}/xls/[a-z0-9]+(c2v|cpt)?.jsMediumhuntNetwork/proxy log pivot; not a Falcon-native field
BehavioralXOR key 0xAD + Base64 + eval() obfuscationMediumenrichJS deobfuscation fingerprint for SOC/IR triage

No file hashes were published for this kit as of the cited sources — the loader is generated per-target server-side. Treat the domain/IP list as perishable (expect churn); prioritize the behavioral signatures for durability.

05

Affected Surface & Telemetry Matrix

SurfaceRequired TelemetryPriorityGap Risk
Microsoft 365 / Entra ID (identity plane)Entra sign-in logs, Identity Protection risk detections, Unified Audit LogCriticalGap — not visible to Falcon endpoint telemetry; requires Entra/M365 log review or a SIEM connector
Windows endpoint (mail client + browser)ProcessRollup2, SyntheticProcessRollup2, DnsRequest, NetworkConnectIP4HighCovered on managed, sensor-deployed endpoints
Network egress / DNSDnsRequest, NetworkConnectIP4HighPartial — only visible for on-sensor traffic; unmanaged/BYOD or mobile mail clients are blind spots
Mobile (iOS/Android Outlook/Teams)MDM/MAM conditional access logsMediumGap — outside Falcon sensor coverage entirely; the attachment can be opened from a phone with no EDR visibility
06

ATT&CK Mapping

TacticTechnique IDTechnique NameObserved Behavior
Initial AccessT1566.001 / T1566.002Phishing: Spearphishing Attachment / LinkSmall .htm/.xhtml/.svg attachment or embedded link, sometimes relayed from a compromised M365 tenant
ExecutionT1204.002User Execution: Malicious FileVictim opens the attachment; browser executes the embedded JS
Defense EvasionT1027Obfuscated Files or InformationBase64 + single-byte XOR (0xAD) + eval(), obfuscator.io-style variable wrapping
Credential AccessT1557Adversary-in-the-MiddleReverse-proxy relay of the full M365 login + MFA flow
Credential AccessT1539Steal Web Session CookiePost-MFA session cookie / refresh token captured over WebSocket
PersistenceT1098.001 / T1114.003Account Manipulation: Additional Cloud Credentials / Email Forwarding RuleInbox rule creation or OAuth app consent grant after session replay (native hunt)
Command and ControlT1071.001Application Layer Protocol: Web ProtocolsWebSocket channel to cheacker.store infrastructure
Initial Access (secondary)T1534Internal SpearphishingCompromised tenants used to relay further phishing to partner/customer organizations
07

Native Audit-Log Hunts

The identity-plane compromise itself happens outside Falcon's endpoint telemetry. These non-CQL hunts are the primary detection surface for steps 5–8 of the attack chain and should be run against Entra ID / Microsoft 365 logs (Entra sign-in logs, Identity Protection, Unified Audit Log / Purview).

  • Risky sign-in / impossible travel: Entra Identity Protection sign-in risk flagged as "unfamiliar sign-in properties" or "anonymous IP" immediately following a sign-in from a known-good location — consistent with session/cookie replay from attacker infrastructure rather than the original device.
  • Sign-in without a corresponding MFA challenge shortly after one that had one: a session token reused from a different IP/device without re-prompting for MFA is the signature of AiTM cookie theft, not credential-only compromise.
  • New inbox rule creation (New-InboxRule / Set-InboxRule): especially rules that forward, delete, or move mail matching subjects like "invoice," "payment," or "security alert" — classic post-AiTM persistence and fraud staging.
  • New OAuth application consent grants: particularly first-party-looking apps requesting Mail.Read, Mail.ReadWrite, or Files.ReadWrite.All scopes shortly after a flagged sign-in.
  • Continuous Access Evaluation (CAE) events: token revocation/replay signals if CAE is enabled — a token used from an IP inconsistent with the original sign-in triggers a CAE-driven re-evaluation.
  • Defender for Office 365 Safe Attachments/Safe Links verdicts: review whether .svg/.xhtml/.htm attachment types are actually included in the active Safe Attachments policy — many tenants exclude them by default because they aren't classic "document" types.
  • Outbound mail volume anomaly from a single mailbox: a spike in outbound mail shortly after a flagged sign-in is consistent with the compromised-tenant-relay ("island hopping") behavior reported for this kit.
08

CrowdStrike LogScale CQL Hunt Queries

Pick your tenant's cloud first — every "Open in Falcon" button below uses this selection.
Q1 · DNS resolution to known Mirage2FA infrastructure
CONF HIGHFP LOWCOST LOW

Looks for: any endpoint resolving a domain confirmed as Mirage2FA phishing/relay infrastructure. FP: none expected — these are campaign-specific, non-shared domains.

// HUNT: DNS resolution to Mirage2FA AiTM phishing/relay infrastructure
// MITRE: T1566.002, T1071.001
// CONF: high  FP: low  COST: low | REQUIRES: DnsRequest
// LOOKBACK: 30d (set in the Falcon time picker, not in-query)
#event_simpleName=DnsRequest
| DomainName=/(cheacker\.store|volatilesour\.store|pslcertlive\.site|avcbtech\.store|pynutech\.store)$/i
| table([aid, ComputerName, UserName, DomainName, ContextProcessId_decimal, timestamp])
Q2 · Network connection to Mirage2FA C2/staging IP
CONF HIGHFP LOWCOST LOW

Looks for: outbound connections to the confirmed C2/staging IP. FP: none expected.

// HUNT: Outbound connection to Mirage2FA C2/staging infrastructure
// MITRE: T1071.001, T1557, T1539
// CONF: high  FP: low  COST: low | REQUIRES: NetworkConnectIP4
// LOOKBACK: 30d
#event_simpleName=NetworkConnectIP4
| RemoteAddressIP4=185.174.100.224
| table([aid, ComputerName, UserName, RemoteAddressIP4, RemotePort, ContextBaseFileName, timestamp])
Q3 · Base64-shaped subdomain label to a low-reputation TLD (generalized fingerprint)
CONF MEDIUMFP MEDIUMCOST MEDIUM

Looks for: the kit's reported technique of embedding a Base64-encoded target email address as a DNS subdomain label, generalized beyond the known domain list to catch infrastructure rotation. FP: tracking pixels, CDN edge nodes, and some SaaS tenants use long random subdomains on similar TLDs — tune the exclusion list to your environment before promoting.

// HUNT: Long base64-shaped DNS subdomain label to a disposable-style TLD
// MITRE: T1071.004, T1027
// CONF: medium  FP: medium  COST: medium | REQUIRES: DnsRequest
// LOOKBACK: 14d
// TUNING: exclude known CDN/analytics parents (cloudfront.net, akamaized.net, googleusercontent.com, azureedge.net) before promoting to alert
#event_simpleName=DnsRequest
| DomainName=/^[A-Za-z0-9+\/=_-]{20,}\.[a-z0-9.-]+\.(store|site|xyz|live|click|top)$/i
| DomainName!=/(cloudfront\.net|akamaized\.net|googleusercontent\.com|azureedge\.net)$/i
| table([aid, ComputerName, UserName, DomainName, timestamp])
Q4 · Browser opening a local HTML/XHTML/SVG attachment via a file: URI
CONF MEDIUMFP MEDIUMCOST LOW

Looks for: a browser process launched against a locally-saved .htm/.html/.xhtml/.svg file — the HTML-smuggling delivery step. FP: legitimate downloaded reports, saved web pages, and some internal documentation tools trigger this; correlate with Q1/Q3 hits shortly after for higher fidelity.

// HUNT: Browser opening a locally-saved HTML/XHTML/SVG file (attachment smuggling)
// MITRE: T1204.002, T1027
// CONF: medium  FP: medium  COST: low | REQUIRES: ProcessRollup2, SyntheticProcessRollup2
// LOOKBACK: 14d
// TUNING: baseline your environment's normal rate of local file: opens first; exclude known internal doc-viewer or reporting tools by ParentBaseFileName
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/
| FileName=/^(chrome|msedge|firefox)\.exe$/i
| CommandLine=*file:*
| CommandLine=/\.(htm|html|xhtml|svg)/i
| table([aid, ComputerName, UserName, ParentBaseFileName, FileName, CommandLine, timestamp])
Q5 · Mail/collaboration client directly spawning a browser process
CONF MEDIUMFP HIGHCOST LOW

Looks for: Outlook or Teams launching a browser process directly — normal behavior for any hyperlink click, so this is an investigate-only correlation feed, not a standalone alert. FP: very high in isolation — every legitimate link click in email or Teams matches this. Use only as a join input against Q1/Q3/Q4 hits within a short time window.

// HUNT: Mail/collab client spawning a browser process (click-through correlation feed)
// MITRE: T1204.002, T1566.001
// CONF: medium  FP: high  COST: low | REQUIRES: ProcessRollup2, SyntheticProcessRollup2
// LOOKBACK: 14d
// TUNING: do not alert on this query alone; pair with Q1/Q3/Q4 hits on the same aid within +/-5 minutes before triage
#event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/
| ParentBaseFileName=/^(OUTLOOK\.EXE|olk\.exe|Teams\.exe|ms-teams\.exe)$/i
| FileName=/^(chrome|msedge|firefox)\.exe$/i
| table([aid, ComputerName, UserName, ParentBaseFileName, FileName, CommandLine, timestamp])
09

CrowdStrike Custom IOA Recommendations

CandidateSource QueryPatternExclusionsDeployment Path
IOA: Mirage2FA known-domain resolutionQ1DomainName matches confirmed campaign domain listNone knownPromote directly — low FP, high confidence; set to detect/alert
IOA: Mirage2FA C2 IP connectionQ2RemoteAddressIP4 = 185.174.100.224None knownPromote directly — pair with a Falcon Custom IOC block rule on the IP
Investigate-only: base64-subdomain fingerprintQ3Long-label DNS to disposable TLDsCDN/analytics parents (see TUNING)Keep as scheduled hunt search; do not promote to IOA until your CDN exclusion list is tuned per-tenant
Investigate-only: HTML-smuggling attachment openQ4Browser + file: URI to .htm/.xhtml/.svgInternal doc-viewer tooling (see TUNING)Scheduled hunt search feeding SOC triage queue, correlated with Q1/Q3
10

Machine-Readable IOC Appendix

Falcon IOC Management CSVbulk import
type,value,action,severity,expiration,description,tags
domain,user.cheacker.store,detect,high,2027-02-28,Mirage2FA AiTM phishing relay domain,campaign:Mirage2FA
domain,cheacker.store,detect,critical,2027-02-28,Mirage2FA WebSocket-backed AiTM session harvesting endpoint (apex),campaign:Mirage2FA
domain,hvr.volatilesour.store,detect,high,2027-02-28,Mirage2FA AiTM phishing relay domain,campaign:Mirage2FA
domain,adp.pslcertlive.site,detect,high,2027-02-28,Mirage2FA fake M365 login lure domain,campaign:Mirage2FA
domain,office.avcbtech.store,detect,high,2027-02-28,Mirage2FA fake M365 login lure domain,campaign:Mirage2FA
domain,pynutech.store,detect,medium,2027-02-28,Mirage2FA phishing infrastructure domain,campaign:Mirage2FA
ipv4,185.174.100.224,detect,critical,2027-02-28,Mirage2FA C2/staging infrastructure (AS-Colocrossing),campaign:Mirage2FA
filename,a1p2i.js,hunt,medium,2026-11-29,Mirage2FA canonical AiTM loader script filename pattern,campaign:Mirage2FA
filename,eDocxs_Secured.Alert,hunt,low,2026-11-29,Mirage2FA phishing attachment display-name lure,campaign:Mirage2FA
filename,Signature_Required_Review,hunt,low,2026-11-29,Mirage2FA phishing attachment display-name lure,campaign:Mirage2FA
Behavioral Signaturesfor SOC/IR reference
# Mirage2FA behavioral fingerprints (not directly Falcon-queryable; for proxy/IR use)
Loader path shape:    GET /[a-z]{3}/xls/[a-z0-9]+(c2v|cpt)?.js
Obfuscation:          Base64 decode -> single-byte XOR key 0xAD -> eval()
JS deobfuscation:     atob(...).map(x => x.charCodeAt(0) ^ 173)
Attachment sizes:     ~3 KB .htm / .xhtml / .svg
Operator markers:     LINXB64EMAIL, LINXEMAIL, LINXCODERSEMAIL, self.u, RSTRING2
DNS fingerprint:      base64(target-email) appears as leftmost subdomain label
C2 channel:           persistent outbound WebSocket following loader execution
Operator infra:       Telegram-managed control panel (PhaaS-as-a-service model)
Named Tooling / Attributioncontext
Kit name:        Mirage2FA
Operator brand:  "LinX Coders" / "LinXcoded"
Model:           Commercial phishing-as-a-service (PhaaS), Telegram-managed
Target:          Microsoft 365 / Entra ID authenticated sessions
Distinguisher:   Real-time AiTM reverse proxy relaying full auth + MFA flow,
                 not a static credential-harvesting page
M365 / Entra Conditional-Access Auditchecklist
# Run against your Entra tenant, not Falcon
1. List CA policies excluding legacy authentication -- confirm legacy auth is BLOCKED tenant-wide.
2. Confirm Continuous Access Evaluation (CAE) is enabled for Exchange/SharePoint/Teams.
3. Review Safe Attachments policy scope -- confirm .htm/.xhtml/.svg are IN scope, not excluded as "non-document."
4. List OAuth app consent grants from the last 30 days requesting Mail.Read/Mail.ReadWrite/Files.ReadWrite.All.
5. List new inbox rules (New-InboxRule/Set-InboxRule) created in the last 30 days that forward or delete mail.
6. Confirm phishing-resistant MFA (FIDO2/passkey/certificate-based) coverage for all Global Admin and other Tier-0 roles.
11

Detection Validation Gates

GateRequirementStatus
Telemetry readyDnsRequest, NetworkConnectIP4, ProcessRollup2/SyntheticProcessRollup2 enabled and flowing for target hostsVerify per-tenant before deployment
Benign baselineRun Q4/Q5 in investigate mode for 7 days to characterize normal file:/browser-launch volume before alertingRequired before promotion
Positive testConfirm Q1/Q2 fire against a synthetic DNS/network event using the listed domains/IP in a lab/test environmentRecommended
Promotion criteriaQ1/Q2 → Custom IOA (low FP, high conf). Q3/Q4 stay scheduled hunts until tuned. Q5 never promotes standalone — correlation input only.See §9
12

Hardening — Tiered

Immediate (this week)

Block egress to confirmed Mirage2FA infrastructure. Add the domains/IP from §10 to your DNS filter, secure web gateway, or firewall deny list. Authority: MITRE M1037 (Filter Network Traffic). Verify: a DNS query to a listed domain from a test host resolves to a sinkhole/NXDOMAIN.

Confirm Safe Attachments covers .htm/.xhtml/.svg. These formats are frequently excluded by default because they aren't classic Office documents. Authority: Microsoft Defender for Office 365 best practices; MITRE M1049 (Antivirus/Antimalware). Verify: Get-SafeAttachmentPolicy shows the tenant policy enabled with no format exclusions covering these types.

Block legacy authentication protocols tenant-wide. Legacy auth (POP/IMAP/basic auth) has no MFA concept and is a common fallback path once a password is phished. Authority: MITRE M1032 (Multi-factor Authentication); CIS Microsoft 365 Foundations Benchmark. Verify: a legacy-auth sign-in attempt is blocked in Entra sign-in logs.

Near term (1–4 weeks)

Require a compliant or hybrid-joined device for M365 access via Conditional Access. This defeats simple session-cookie replay from attacker-controlled infrastructure, since the replayed token won't originate from a compliant device. Authority: MITRE M1032; CIS M365 Benchmark. Verify: a sign-in attempt from an unmanaged device is blocked or requires additional step-up.

Enable and tune Continuous Access Evaluation (CAE) with reduced token lifetimes for high-risk roles, so a stolen session token is revoked faster when location/IP/device signals change. Authority: Microsoft Entra CAE documentation; MITRE M1036 (Account Use Policies). Verify: a simulated IP-location change on an active session triggers re-evaluation in the sign-in logs.

Strategic (1–3 months)

Roll out phishing-resistant, token-bound MFA (FIDO2 security keys or platform passkeys) organization-wide, starting with Tier-0/privileged roles. Ordinary push/OTP MFA is exactly what this kit defeats by design — only origin-bound authentication (WebAuthn/FIDO2) breaks the AiTM relay. Authority: MITRE M1032; CISA phishing-resistant MFA guidance. Verify: percentage of privileged accounts with FIDO2/passkey registered, tracked to 100%.

Deploy Entra ID Token Protection to cryptographically bind sign-in tokens to the issuing device for Exchange/SharePoint, closing the "steal the cookie, use it anywhere" gap for supported clients. Authority: Microsoft Entra Token Protection documentation. Verify: Token Protection status shows "Bound" for pilot-group sign-ins.

13

Deployable Playbooks

Playbook 1 — Block legacy authentication (Entra Conditional Access, PowerShell/Graph)

Prerequisites: Global Administrator or Conditional Access Administrator role; Microsoft Graph PowerShell SDK connected (Connect-MgGraph -Scopes "Policy.ReadWrite.ConditionalAccess")
Reboot required: No

# 1. Create (or update) a CA policy blocking legacy auth clients tenant-wide
$params = @{
  DisplayName = "Block Legacy Authentication"
  State = "enabledForReportingButNotEnforced"   # flip to "enabled" after a monitoring period
  Conditions = @{
    ClientAppTypes = @("exchangeActiveSync","other")
    Applications = @{ IncludeApplications = @("All") }
    Users = @{ IncludeUsers = @("All") }
  }
  GrantControls = @{ Operator = "OR"; BuiltInControls = @("block") }
}
New-MgIdentityConditionalAccessPolicy -BodyParameter $params

Rollback: Set the policy State to "disabled" via Update-MgIdentityConditionalAccessPolicy, or delete it with Remove-MgIdentityConditionalAccessPolicy. No persistent state change to user accounts is made.

Playbook 2 — Require compliant/hybrid-joined device for M365 access

Prerequisites: Intune device compliance policies already deployed to the target population; Conditional Access Administrator role
Reboot required: No

$params = @{
  DisplayName = "Require Compliant or Hybrid Joined Device - M365"
  State = "enabledForReportingButNotEnforced"
  Conditions = @{
    Applications = @{ IncludeApplications = @("Office365") }
    Users = @{ IncludeUsers = @("All"); ExcludeGroups = @("<break-glass-account-group-id>") }
  }
  GrantControls = @{ Operator = "OR"; BuiltInControls = @("compliantDevice","domainJoinedDevice") }
}
New-MgIdentityConditionalAccessPolicy -BodyParameter $params

Rollback: Set State to "disabled" or remove the policy. Always exclude a break-glass account/group before enabling enforcement to avoid tenant lockout.

Playbook 3 — DNS sinkhole for confirmed Mirage2FA domains

Prerequisites: Administrative access to the organization's DNS filtering / secure web gateway platform
Reboot required: No

# Example for a generic RPZ-capable DNS resolver
zone "rpz.mirage2fa" {
  type master;
  file "rpz.mirage2fa.db";
};

; rpz.mirage2fa.db entries
user.cheacker.store        CNAME .
cheacker.store              CNAME .
hvr.volatilesour.store       CNAME .
adp.pslcertlive.site         CNAME .
office.avcbtech.store        CNAME .
pynutech.store                CNAME .

Rollback: Remove the entries from the RPZ zone file and reload the zone. No endpoint-side state is modified; effect is purely resolver-side.
14

Containment Runbook

PhaseActionsOwnerEvidence to Preserve
IsolateFalcon RTR network-contain the endpoint that opened the attachment; in Entra, revoke all refresh tokens and end all sessions for the affected user (Revoke-MgUserSignInSession); disable the account temporarily if abuse is confirmedIR / Identity teamEndpoint isolation timestamp; sign-in logs at time of revocation
EradicateRemove any inbox rules created since the flagged sign-in; revoke suspicious OAuth app consents; force password reset; re-enroll MFA (preferably to a phishing-resistant method)Identity / HelpdeskList of removed rules/grants; before/after Unified Audit Log export
RecoverRe-enable the account with new credentials and phishing-resistant MFA; confirm CA policies (Playbooks 1–2) apply to the user; notify the user and any downstream tenants that may have received relayed phishingIdentity / CommsCA policy assignment confirmation; user notification record
Post-incidentAdd any newly-observed domains/IP to the blocklist in §10; update Q3 exclusion tuning if false positives were found during triageDetection engineeringUpdated IOC list; query tuning changelog
15

Detection Coverage Map

TechniqueBehaviorCQL CoverageNative/IOA CoverageStatus
T1566.001/.002 PhishingAttachment/link deliveryQ4 (attachment open)Mail flow / Safe Attachments (§7)Partial
T1027 ObfuscationXOR/base64 JS loaderQ3 (subdomain fingerprint)Partial
T1557 AiTMReverse-proxy relay of auth flowQ1, Q2Entra sign-in risk (§7)Good
T1539 Steal Web Session CookieWebSocket session/token captureQ2CAE token replay (§7)Good
T1098.001/T1114.003 PersistenceInbox rule / OAuth grantUnified Audit Log hunt (§7)Partial — no Falcon-native coverage
T1534 Internal SpearphishingCompromised tenant relays further phishingOutbound mail volume anomaly (§7)Gap
Mobile / unmanaged-device deliveryAttachment opened outside EDR coverageMDM/MAM conditional access onlyGap

Validation gates (§11) must pass before Q1/Q2 promote to Custom IOA; Q3–Q5 remain scheduled hunts pending environment-specific tuning.

16

Hunt Summary Ticket

TITLE:      Hunt for Mirage2FA AiTM phishing-as-a-service (M365 session hijack)
SEVERITY:   High (active, large-scale AiTM campaign; defeats standard MFA)
SCOPE:      All Windows endpoints with mail/browser clients; Entra ID / M365 tenant logs
HYPOTHESIS: Endpoints or tenant accounts show contact with Mirage2FA infrastructure,
            HTML-smuggled attachment execution, or post-AiTM session/persistence anomalies
QUERIES:    Q1-Q5 (this pack, section 8); native hunts (section 7)
DO FIRST:   Run Q1 and Q2 (high-confidence, low-FP) across the full fleet; cross-reference
            Entra sign-in logs for risky sign-ins in the same window
FINDINGS:   [fill in after execution]
GAPS:       No Falcon-native visibility into the identity plane, mobile/BYOD delivery,
            or Entra audit logs -- native hunts in section 7 are mandatory, not optional
ACTIONS:    Block domains/IP (section 10); deploy Playbooks 1-3 (section 13); begin
            phishing-resistant MFA rollout (section 12, strategic tier)
OWNER:      [assign]
VERSION:    v0.1 -- 2026-08-29
17

Changelog

v0.12026-08-29Initial draft — built from three corroborating public sources (The Hacker News, ANY.RUN, BrinzTech); no file-hash intelligence available at time of publication.
18

References

TierSourceUsed ForAccess Date
1The Hacker News — Mirage2FA Surge Hits 4,500 US and EU Companies (2026-08-25)Campaign scope, attack chain overview2026-08-29
1ANY.RUN — Mirage2FA: A Phishing Threat to US Companies with 4K Victims (2026-08-18)Domains, C2 IP, loader pattern, obfuscation details2026-08-29
1BrinzTech — Mirage2FA (LinXcoded) PhaaS Breach Alert (2026-08-19)Attachment lures, operator attribution, tenant-relay behavior2026-08-29