Back to Intelligence

CVE-2026-96940: Microsoft Exchange Weak Authorization Flaw — Detection, Hunting, and Remediation Guide

SA
Security Arsenal Team
October 5, 2026
14 min read

Microsoft has shipped out-of-band (OOB) security updates for Microsoft Exchange Server to address CVE-2026-96940, a high-severity weak authorization vulnerability rated CVSS 8.8. The flaw allows an authenticated attacker to elevate privileges over the network — and the practical impact, per reporting, is the ability to read other users' mailboxes.

Let that sink in from a defender's seat: this is not a phishing problem, not a brute-force problem, and not a zero-click RCE. This is a case where any valid low-privilege credential — a compromised user account, a service account, a mailbox belonging to a departed employee that was never disabled — can potentially be leveraged to reach into the mailboxes of your executives, your legal team, your HR department. Every mailbox on the server becomes fair game once the authorization boundary collapses.

PowerShell
Out-of-band releases from Microsoft are not routine. They are reserved for issues Microsoft considers urgent enough to break the Patch Tuesday cadence. Treat this one accordingly.

Technical Analysis

What We Know

AttributeDetail
CVECVE-2026-96940
CVSS8.8 (High)
Vulnerability classWeak authorization / Improper access control (CWE-863, CWE-285 family)
Attack vectorNetwork
Authentication requiredYes — low-privilege authenticated session
User interactionNone
ImpactPrivilege escalation; unauthorized read access to other users' mailboxes
Patch statusOut-of-band security update available from Microsoft

Affected Products

On-premises Microsoft Exchange Server installations — the perennial soft underbelly of enterprise email. Exchange Online (Microsoft 365) is not the target here; Microsoft services its own cloud. The risk sits squarely with organizations running Exchange on-prem or in hybrid configurations where the on-prem server still brokers mailbox access, Autodiscover, and EWS traffic.

Check Microsoft's Security Update Guide entry for CVE-2026-96940 for the exact affected Cumulative Update (CU) and Security Update (SU) builds for your Exchange version. Do not assume your CU level is covered — SUs are CU-specific, and applying the wrong SU will fail or, worse, partially apply.

How the Vulnerability Works — Defender's View

The root cause is weak authorization: the server fails to properly validate whether the authenticated identity is actually entitled to the mailbox resource being requested. In Exchange, mailbox access flows through several protocol surfaces:

  • Exchange Web Services (EWS) — /ews/exchange.asmx — the API backbone used by Outlook, mobile clients, and countless third-party integrations
  • Outlook on the Web (OWA) — /owa/
  • Exchange ActiveSync (EAS) — /Microsoft-Server-ActiveSync
  • MAPI/HTTP and RPC/HTTP — Outlook desktop connectivity

An authorization flaw in this stack means an attacker holding any valid credential can craft requests targeting mailbox resources they do not own — impersonation or direct cross-mailbox access — and the server honors them. From a detection standpoint, this is a data-plane anomaly, not a crash, not a shell, not a suspicious child process. The exploitation looks like legitimate protocol traffic doing illegitimate things.

This matters because it changes your detection strategy: you will not catch this with exploit-signature detections alone. You catch it with mailbox access auditing, cross-mailbox access baselining, and protocol-layer anomaly detection.

Exploitation Prerequisites

  1. Network reachability to an Exchange virtual directory (typically 443/TCP on the Client Access role)
  2. A valid set of credentials for any mailbox on the target server

Prerequisite #2 is why this pairs so dangerously with the credential-stuffing, password-spray, and infostealer ecosystems. Infostealer logs are full of corporate webmail credentials. CVE-2026-96940 is the multiplier that converts one phished user's password into a wholesale mailbox data breach.

Exploitation Status

At the time of publication, Microsoft's advisory language describes the elevation-of-privilege condition under specific circumstances. Because Microsoft issued out-of-band updates, defenders should assume active interest from threat actors and operate under a patch-now posture regardless of whether public PoC code has surfaced. Historically, Exchange privilege-escalation and auth-bypass flaws move from disclosure to weaponization in days, not months — and post-patch reverse engineering of Exchange SUs is a mature discipline among both criminal and state-sponsored actors. Do not wait for confirmation of in-the-wild exploitation to act. Check CISA's Known Exploited Vulnerabilities (KEV) catalog daily for additions.


Detection & Response

Strategic Detection Guidance

Because this is an authorization failure, your highest-fidelity telemetry sources are:

  1. IIS logs on Exchange servers (C:\inetpub\logs\LogFiles\W3SVC1 and W3SVC2) — look at cs-username, cs-uri-stem, cs-uri-query, and response sizes. Cross-mailbox access attempts often appear as authenticated requests where the authenticated user does not match the mailbox in the URI or query parameters (e.g., EWS requests with &mbx= targeting a different SMTP address than the authenticating user).
  2. Exchange Mailbox Audit Logging — NonOwner mailbox access events. If auditing is not enabled on every mailbox, enable it now (script below) and treat its absence as a compliance gap.
  3. Admin Audit Logs — watch for unexpected changes to impersonation or delegation settings: ApplicationImpersonation role assignments, Add-MailboxPermission, Set-Mailbox ... -GrantSendOnBehalfTo, New-ManagementRoleAssignment. An attacker who escalates may cement access through legitimate delegation mechanisms.
  4. Post-exploitation behavior — webserver process (w3wp.exe in Exchange app pools) spawning shells or script interpreters, which signals the attacker moved beyond mailbox reading.

SIGMA Rules

YAML
---
title: Exchange IIS Worker Process Spawning Shell or Script Interpreter
id: 9f2c7a41-3b8e-4d5a-9c1f-6e7d8a2b3c4d
status: experimental
description: Detects the Exchange IIS worker process (w3wp.exe in MSExchange app pools) spawning command shells or script interpreters, consistent with post-exploitation following Exchange server compromise such as CVE-2026-96940 privilege escalation chains.
references:
  - https://thehackernews.com/2026/10/microsoft-exchange-flaw-lets.html
  - https://attack.mitre.org/techniques/T1059/
author: Security Arsenal
date: 2026/10/15
tags:
  - attack.execution
  - attack.t1059
  - attack.privilege_escalation
logsource:
  category: process_creation
  product: windows
detection:
  selection_parent:
    ParentImage|endswith: '\w3wp.exe'
    ParentCommandLine|contains:
      - 'MSExchange'
  selection_child:
    Image|endswith:
      - '\cmd.exe'
      - '\powershell.exe'
      - '\pwsh.exe'
      - '\cscript.exe'
      - '\wscript.exe'
      - '\mshta.exe'
      - '\rundll32.exe'
      - '\net.exe'
      - '\net1.exe'
      - '\whoami.exe'
  condition: selection_parent and selection_child
falsepositives:
  - Rare; Exchange app pools should never legitimately spawn shells. Investigate any hit.
level: high
---
title: Exchange IIS Log Cross-Mailbox EWS Access Pattern
id: 4b6e1d92-7a3c-4f8b-b5e2-1c9d0e3f5a6b
status: experimental
description: Detects authenticated EWS or OWA requests where the requested mailbox parameter differs from the authenticated user, a pattern consistent with weak-authorization cross-mailbox access attempts such as CVE-2026-96940 exploitation.
references:
  - https://thehackernews.com/2026/10/microsoft-exchange-flaw-lets.html
  - https://attack.mitre.org/techniques/T1078/
author: Security Arsenal
date: 2026/10/15
tags:
  - attack.collection
  - attack.t1114
  - attack.valid_accounts
  - attack.t1078
logsource:
  category: webserver
  product: windows
  service: iis
detection:
  selection_uri:
    cs-uri-stem|contains:
      - '/ews/exchange.asmx'
      - '/owa/'
  selection_mbx:
    cs-uri-query|contains:
      - 'mbx='
      - 'mailbox='
      - 'smtp='
  filter_own:
    cs-uri-query|contains|windash: ''
  condition: selection_uri and selection_mbx and not filter_own
falsepositives:
  - Legitimate delegate access (admin assistants, shared mailboxes) - baseline known delegations and whitelist authorized delegate pairs
  - Service accounts with ApplicationImpersonation roles - document and suppress per-account
level: medium
---
title: Exchange Impersonation or Delegation Privilege Modification
id: 2d8f4a15-6c9b-4e7d-a3f1-8b2c5d6e7f90
status: experimental
description: Detects PowerShell execution of Exchange cmdlets that grant mailbox permissions, impersonation roles, or send-on-behalf rights - a common persistence mechanism after privilege escalation on Exchange servers.
references:
  - https://thehackernews.com/2026/10/microsoft-exchange-flaw-lets.html
  - https://attack.mitre.org/techniques/T1098/
author: Security Arsenal
date: 2026/10/15
tags:
  - attack.persistence
  - attack.t1098
  - attack.privilege_escalation
logsource:
  category: process_creation
  product: windows
detection:
  selection:
    CommandLine|contains:
      - 'Add-MailboxPermission'
      - 'New-ManagementRoleAssignment'
      - 'ApplicationImpersonation'
      - 'Add-ADPermission'
      - 'GrantSendOnBehalfTo'
      - '-AccessRights FullAccess'
  condition: selection
falsepositives:
  - Legitimate Exchange administration - alert should route to change-management correlation; verify against approved change tickets
level: high

A note on the cross-mailbox rule: rule two will require tuning. Every environment has legitimate delegation — executive assistants, shared mailboxes, service accounts with ApplicationImpersonation. Do not deploy it and walk away. Baseline for one week, build a delegation allow-list, then alert on new cross-mailbox pairs. That is where this rule earns its keep.

KQL — Microsoft Sentinel / Defender

This hunts authenticated EWS/OWA activity from IIS logs ingested into Sentinel (via the W3CIISLog table or Azure Monitor agent) where a single source IP or authenticated identity touches an abnormal number of distinct mailboxes — the statistical signature of someone enumerating a mail store they shouldn't have access to. It also hunts for delegation/impersonation changes in Office 365 / Exchange admin audit telemetry.

KQL — Microsoft Sentinel / Defender
// Hunt 1: Single identity or source IP accessing an abnormal volume of distinct mailboxes via EWS/OWA
// Requires IIS logs from Exchange servers ingested into W3CIISLog (or adjust table name to your ingestion path)
let TimeWindow = 24h;
let DistinctMailboxThreshold = 15;  // Tune per environment; executives' assistants legitimately touch a handful
W3CIISLog
| where TimeGenerated > ago(TimeWindow)
| where csUriStem has_any ("/ews/exchange.asmx", "/owa/")
| where isnotempty(csUserName) and csUserName != "-"
| extend RequestedMailbox = tostring(extract(@"(?i)(?:mbx|mailbox|smtp)=([^&]+)", 1, csUriQuery))
| where isnotempty(RequestedMailbox)
| where RequestedMailbox !contains csUserName  // requested mailbox differs from authenticated identity
| summarize DistinctMailboxes = dcount(RequestedMailbox),
            Mailboxes = make_set(RequestedMailbox, 50),
            SourceIPs = make_set(cIP, 10),
            FirstSeen = min(TimeGenerated),
            LastSeen = max(TimeGenerated)
    by csUserName, Computer
| where DistinctMailboxes >= DistinctMailboxThreshold
| order by DistinctMailboxes desc;

// Hunt 2: Exchange delegation / impersonation privilege grants (post-escalation persistence)
// Uses OfficeActivity (Exchange admin audit) if connected, else falls back to Windows process events
OfficeActivity
| where TimeGenerated > ago(7d)
| where Operation in~ ("Add-MailboxPermission", "New-ManagementRoleAssignment",
                       "Set-Mailbox", "Add-ADPermission", "New-ManagementRole")
| extend Parameters = tostring(Parameters)
| where Parameters has_any ("FullAccess", "ApplicationImpersonation", "GrantSendOnBehalfTo", "AccessRights")
| project TimeGenerated, UserId, Operation, Parameters, ClientIP, ResultStatus
| order by TimeGenerated desc;

// Hunt 3: Exchange w3wp.exe spawning suspicious child processes (post-exploitation)
DeviceProcessEvents
| where TimeGenerated > ago(7d)
| where InitiatingProcessFileName =~ "w3wp.exe"
| where InitiatingProcessCommandLine has "MSExchange"
| where FileName in~ ("cmd.exe", "powershell.exe", "pwsh.exe", "cscript.exe",
                      "wscript.exe", "mshta.exe", "rundll32.exe", "net.exe",
                      "whoami.exe", "nltest.exe", "adfind.exe")
| project TimeGenerated, DeviceName, FileName, ProcessCommandLine,
          InitiatingProcessCommandLine, AccountName
| order by TimeGenerated desc;

Velociraptor VQL

For rapid endpoint triage on Exchange servers — particularly to establish whether the worker process has spawned anything it shouldn't, and to enumerate active network sessions to the Exchange web ports by unexpected remote hosts:

VQL — Velociraptor
-- Hunt: Exchange w3wp.exe child processes and active 443 sessions on Exchange servers
-- Deploy as a hunt scoped to your Exchange server group

LET procs = SELECT Pid, Ppid, Name, CommandLine, Exe, Username, CreateTime
FROM pslist()
WHERE Name =~ '(?i)w3wp|cmd|powershell|pwsh|cscript|wscript|mshta|rundll32'

LET suspicious_children = SELECT Pid, Ppid, Name, CommandLine, Username, CreateTime,
       get(field='Cmdline') AS FullCmd
FROM pslist()
WHERE Ppid IN (SELECT Pid FROM pslist() WHERE Name =~ '(?i)w3wp')
  AND Name =~ '(?i)cmd|powershell|pwsh|cscript|wscript|mshta|rundll32|net|whoami'

LET exchange_listeners = SELECT Pid, Name, LocalAddr, LocalPort, RemoteAddr, RemotePort, Status
FROM netstat()
WHERE LocalPort IN (443, 444) AND Status =~ '(?i)ESTABLISHED|LISTEN'

SELECT * FROM suspicious_children
UNION ALL
SELECT NULL AS Pid, NULL AS Ppid, Name, NULL AS CommandLine, NULL AS Username,
       NULL AS CreateTime,
       format(format='listener %v:%v -> %v:%v [%v]',
              args=[LocalAddr, LocalPort, RemoteAddr, RemotePort, Status]) AS FullCmd
FROM exchange_listeners

Remediation

1. Patch — This Is the Priority

Microsoft has released out-of-band security updates for CVE-2026-96940. Your sequence:

  1. Identify your Exchange version and current CU/SU level (script below).
  2. Download the correct SU for your CU from the Microsoft Security Update Guide entry for CVE-2026-96940 — SUs are CU-specific.
  3. If you are more than one CU behind, update the CU first. Do not stack an SU onto an unsupported CU and call it done.
  4. Run the Exchange HealthChecker script after patching to confirm the build registers as patched.
  5. Test in your ring-0 environment if you have one, but do not let a lab validation cycle delay production patching beyond days. An OOB Exchange release is a patch-now event.

2. Verify and Harden — Verification Script

Run this from an elevated Exchange Management Shell on each Exchange server:

PowerShell
# --- CVE-2026-96940 verification and hardening script ---
# 1. Report Exchange build so you can confirm SU application against the MSRC advisory
Write-Host "=== Exchange Build Inventory ===" -ForegroundColor Cyan
Get-Command Exsetup.exe | ForEach-Object { $_.FileVersionInfo } |
  Select-Object ProductVersion, FileVersion | Format-List

# Also pull installed Exchange updates from the registry (more reliable than Exsetup alone)
Get-ItemProperty HKLM:\SOFTWARE\Microsoft\ExchangeServer\v15\Setup -ErrorAction SilentlyContinue |
  Select-Object MsiProductMajor, MsiProductMinor, MsiBuildMajor, MsiBuildMinor
Get-HotFix | Where-Object { $_.Description -match 'Security Update' } |
  Sort-Object InstalledOn -Descending | Select-Object -First 10 HotFixID, Description, InstalledOn

# 2. Confirm mailbox audit logging is enabled org-wide (critical for detecting cross-mailbox access)
Write-Host "`n=== Mailbox Audit Logging Status ===" -ForegroundColor Cyan
$orgConfig = Get-OrganizationConfig
if (-not $orgConfig.AuditDisabled) {
  Write-Host "Org-level mailbox auditing: ENABLED" -ForegroundColor Green
} else {
  Write-Host "Org-level mailbox auditing: DISABLED - enabling now" -ForegroundColor Red
  Set-OrganizationConfig -AuditDisabled $false
}

# 3. Enforce per-mailbox auditing and flag any mailbox with auditing off
$unaudited = Get-Mailbox -ResultSize Unlimited | Where-Object { -not $_.AuditEnabled }
if ($unaudited) {
  Write-Host "Enabling auditing on $($unaudited.Count) mailboxes..." -ForegroundColor Yellow
  $unaudited | Set-Mailbox -AuditEnabled $true
}

# 4. Inventory dangerous delegations - review every entry in this output manually
Write-Host "`n=== FullAccess Delegations (review all) ===" -ForegroundColor Cyan
Get-Mailbox -ResultSize Unlimited | Get-MailboxPermission |
  Where-Object { $_.AccessRights -match 'FullAccess' -and $_.IsInherited -eq $false -and $_.User -notmatch 'NT AUTHORITY' } |
  Select-Object Identity, User, AccessRights | Format-Table -AutoSize

Write-Host "`n=== ApplicationImpersonation Role Assignments (review all) ===" -ForegroundColor Cyan
Get-ManagementRoleAssignment -Role ApplicationImpersonation |
  Select-Object Name, RoleAssignee, RoleAssigneeType | Format-Table -AutoSize

# 5. Confirm Extended Protection is enabled (mitigates auth relay against Exchange)
Write-Host "`n=== Extended Protection Check ===" -ForegroundColor Cyan
Import-Module WebAdministration
Get-WebConfigurationProperty -Filter "system.webServer/security/authentication/windowsAuthentication" `
  -PSPath "IIS:\Sites\Default Web Site\EWS" -Name extendedProtection -ErrorAction SilentlyContinue |
  Select-Object @{n='ExtendedProtection';e={$_.tokenChecking}}

Write-Host "`nDone. Cross-reference build against MSRC CVE-2026-96940 advisory for SU confirmation." -ForegroundColor Cyan

3. Interim Risk Reduction (If You Cannot Patch Immediately)

There is no clean configuration workaround for a server-side authorization flaw, but you can shrink the blast radius:

  • Restrict external exposure of EWS and OWA. If EWS does not need to be internet-facing, block it at the edge. Force remote users through VPN or a modern access proxy. Every exposed virtual directory is attack surface.
  • Enforce MFA on all Exchange-facing authentication paths — and where legacy auth is still enabled on EWS/EAS, disable it now. Legacy auth bypasses MFA and hands this vulnerability to anyone with a password-sprayed credential.
  • Enable Extended Protection for Authentication on Exchange if not already done (Microsoft has been pushing this since 2022; it kills NTLM relay against Exchange virtual directories).
  • Rotate credentials for any account suspected of compromise — remember, exploitation requires one valid credential. Audit infostealer exposure for your domain.
  • Increase IIS and mailbox audit log retention and ship Exchange IIS logs to your SIEM today if they aren't already there. You cannot retroactively hunt logs you never collected.

4. Post-Patch Actions

  • Hunt backward through IIS and mailbox audit logs for the cross-mailbox patterns described above — patching closes the door but tells you nothing about whether someone already walked through it.
  • Review every FullAccess delegation and ApplicationImpersonation assignment (the script above dumps both). Anything you cannot attribute to a documented business need gets removed.
  • Monitor CISA KEV for CVE-2026-96940 addition — KEV listing triggers binding remediation deadlines for federal agencies and should trigger your internal SLA regardless of sector.
  • Brief your incident response retainer or internal IR team on this scenario now. A cross-mailbox data-access incident has legal, privacy, and notification implications that differ from a typical intrusion — counsel should be in the loop early if hunting turns up evidence of access.

The Bottom Line

CVE-2026-96940 is dangerous precisely because it is quiet. No shellcode, no webshell drop, no process crash — just legitimate-looking protocol traffic reading mailboxes it has no business reading, riding on a credential that was probably already compromised months ago. Your defenses must match that profile: patch the server, audit the mailboxes, baseline the delegations, and hunt the access patterns. Organizations that only patch and never hunt will never know whether the flaw was used against them before the update landed.

Related Resources

Security Arsenal Managed SOC Services AlertMonitor Platform Book a SOC Assessment soc-mdr Intel Hub

Is your security operations ready?

Get a free SOC assessment or see how AlertMonitor cuts through alert noise with automated triage.