Microsoft's September V2 Exchange Server updates fix CVE-2026-96940, a network-accessible privilege-escalation flaw that can expose other users' mailboxes. It stacks on top of September's earlier Exchange fixes for remote-code execution and mailbox-takeover risk — and on-premises administrators need to confirm they have the V2 patches installed, not just the September baseline.
If you manage one Exchange server, that's a to-do item. If you're an MSP tech or NOC engineer responsible for Exchange across 15 client environments, that's a project: build the server list, verify current builds per client, get patch approvals, schedule reboots around each client's maintenance windows, watch services during the reboot, verify the new build, and produce evidence for every client that asks "are we patched?"
The tooling most MSPs run makes that project three times harder than it needs to be. Here's exactly where the time goes — and how to get it back.
The Problem in Depth: One Patch, Five Tools, Zero Shared Truth
Discovery is archaeology
The first question — which client servers still run on-premises Exchange? — has no single answer in a fragmented stack. Your RMM has the device inventory. Your monitoring tool has its own asset list that drifted from reality eight months ago. Your documentation lives in a wiki nobody updated since the last tech left. So someone greps through device lists manually, pings the senior engineer, and hopes the DR environment is in scope. Thirty to forty-five minutes gone before a single patch is downloaded.
Build numbers don't read themselves
Exchange patch levels aren't human-readable. A server reporting build 15.2.xxxx.yyy means nothing without cross-referencing Microsoft's update history. Most MSPs handle this with per-tech scripts, RDP sessions, or manual file-version checks. There is no unified report that says: 14 servers vulnerable, 2 already patched, 1 offline. The exposure assessment becomes an afternoon instead of a filter click.
The reboot breaks your monitoring story
Exchange security updates stop services and almost always require a reboot. When your patch tool and your monitoring tool don't share a data model, two failure modes appear constantly:
- The pager storm: the patch tool reboots the server on schedule, your separate monitoring platform sees Exchange services die and fires critical alerts, a tech not assigned to the change starts troubleshooting at 11pm, and nobody trusts the alert channel afterward.
- The silent gap: alerts are suppressed for a maintenance window that ends before the reboot finishes. MSExchangeTransport hangs on the way back up, mail flow for one client is down, and the first notification is the client's office manager asking why Outlook is broken. Forty minutes of unplanned downtime that your monitoring obligation was supposed to prevent.
Verification and proof are manual
After patching, every client wants confirmation. In a fragmented stack that means RDPing into each server, pulling the build number, confirming the Transport and Information Store services actually started, screenshotting, and pasting into an email. Multiply by client count. Multiply again by emergency patches per quarter. Your senior techs — the people who should be designing client architectures — spend their weeks copy-pasting evidence.
None of these are technology failures in isolation. They're architectural failures: RMM, patching, monitoring, and helpdesk built as separate products with separate databases, stitched together with integrations that break quietly. The workflow of patch, watch, verify, report crosses all four tools, so every emergency patch pays the integration tax all over again — in missed SLAs, ticket spikes, and burned-out technicians.
How AlertMonitor Collapses the Workflow
AlertMonitor was designed multi-tenant from day one, and that changes an emergency patch cycle from a fire drill into a checklist.
One inventory across every client. Every device from every client lives in a single NOC view with strict tenant isolation. Filter by installed application — "Microsoft Exchange Server" — or by role tag, and you have the live cross-client exposure list in under a minute, current build included. Discovery stops being archaeology.
Patch policies that respect client boundaries. Define per-client patch policies with their own approval requirements, maintenance windows, and reboot behavior. Assign the V2 update once; AlertMonitor deploys it per client on each client's schedule and tracks compliance per server. "Are we done?" becomes a dashboard answer — per client, per server, per patch.
Maintenance windows that suppress and re-arm automatically. Because patching and alerting share the same platform, scheduling a patch window suppresses the matching alerts for that device group and re-enables them the moment the window closes. No pager storm during a planned change. No silent gap afterward. If MSExchangeTransport fails to start post-reboot, the alert fires immediately, routes to the on-call tech's queue, and the client's SLA clock starts — you know in seconds, not when the phones light up.
Health and compliance on the same screen. Post-patch you care about two things: is the build right, and is the server actually healthy? AlertMonitor puts patch compliance and live service, disk, and performance monitoring on the same client dashboard, so "patched and healthy" is one view instead of two consoles.
One ticket trail. When a user files "Outlook is slow" after the change, the helpdesk entry sits next to the change and monitoring history for that endpoint. Closing the loop attaches verification evidence to the client record, and per-client compliance reporting becomes a filter and an export — not a Friday-afternoon spreadsheet session.
The measurable difference: an emergency Exchange patch that used to consume 2–3 days of scattered effort across the team becomes a same-day, verified rollout with a client-ready report. Fewer SLA misses, fewer after-hours pages, and senior techs doing senior-tech work.
Practical Steps: Run This Week's Exchange Patch Cycle Properly
Whether you're on AlertMonitor today or still stitching tools together, here's the sequence that closes out CVE-2026-96940 cleanly.
Step 1 — Build your exposure list. With PowerShell remoting enabled, pull the exact Exchange build from every server:
$servers = Get-Content "C:\MSP\ExchangeServers.txt"
$results = foreach ($server in $servers) {
$build = Invoke-Command -ComputerName $server -ScriptBlock {
$exe = Join-Path $env:ExchangeInstallPath "Bin\Exsetup.exe"
if (Test-Path $exe) { (Get-Item $exe).VersionInfo.FileVersion }
else { "ExchangeInstallPath not found" }
}
[PSCustomObject]@{ Server = $server; Build = $build }
}
$results | Export-Csv "C:\MSP\Exchange-Builds.csv" -NoTypeInformation
$results
Compare each build against the V2 release number in Microsoft's update history. That's your vulnerable list — in AlertMonitor, this same list is a saved inventory filter across all clients.
Step 2 — Pre-flight check. Never patch a sick server; you'll never know what caused the outage:
# Core Exchange services should be running before the patch window
Get-Service MSExchangeTransport, MSExchangeIS, MSExchangeFrontEndTransport |
Select-Object Name, Status, StartType
# Databases should all be mounted
Get-MailboxDatabase -Status |
Select-Object Name, Server, Mounted |
Sort-Object Server
Step 3 — Check for pending reboots so your patch window doesn't stack two unexpected restarts:
foreach ($server in (Get-Content "C:\MSP\ExchangeServers.txt")) {
$pending = Invoke-Command -ComputerName $server -ScriptBlock {
$cbs = Test-Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\RebootPending"
$wu = Test-Path "HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\WindowsUpdate\Auto Update\RebootRequired"
[PSCustomObject]@{ CBS = $cbs; WU = $wu }
}
[PSCustomObject]@{
Server = $server
RebootPending = ($pending.CBS -or $pending.WU)
}
}
Step 4 — Verify post-patch. Build matches the V2 release, services running:
Invoke-Command -ComputerName "EX01-ClientA" -ScriptBlock {
$build = (Get-Item (Join-Path $env:ExchangeInstallPath "Bin\Exsetup.exe")).VersionInfo.FileVersion
$svc = Get-Service MSExchangeTransport, MSExchangeIS
[PSCustomObject]@{
Build = $build
TransportStatus = ($svc | Where-Object Name -eq 'MSExchangeTransport').Status
InfoStoreStatus = ($svc | Where-Object Name -eq 'MSExchangeIS').Status
}
}
Step 5 — The same cycle inside AlertMonitor:
- Unified inventory → filter installed software = "Microsoft Exchange Server" across all clients; save it as a dynamic group.
- Assign the V2 update to your per-client Exchange patch policies; each deploys in its approved maintenance window.
- Alert suppression is handled by the window automatically — nobody pages the NOC for a planned reboot.
- Watch service health and the reboot on the same client dashboard; if Transport hangs, the alert routes to on-call with SLA timers already running.
- Export the per-client patch compliance report and attach it to the client's ticket. Evidence delivered.
That final report — per client, per server, build-verified — is the deliverable that turns "I think we're patched" into "here's your evidence," and it takes seconds.
The Bottom Line
Out-of-band Exchange patches aren't going away, and CVE-2026-96940 won't be the last one that lands mid-quarter. MSPs that handle these calmly aren't working harder — they run one platform where inventory, patching, monitoring, and ticketing share the same data model. When the next V2 update drops, your response is a workflow, not a fire drill: filter, assign, watch, export, done. Your clients get faster, provable protection. Your techs get their evenings back.
Related Resources
AlertMonitor MSP Operations & Team Efficiency AlertMonitor Platform Overview Book a Demo MSP Operations & Team Efficiency Resources
Is your security operations ready?
Get a free SOC assessment or see how AlertMonitor cuts through alert noise with automated triage.