Microsoft Called This Patch 'Important.' Attackers Called It an Opening.
Step-by-Step: Configuring Security News — CISA: Microsoft SharePoint flaw now exploited
I was on-site with a financial services customer in late 2024 when their SOC flagged anomalous SharePoint activity at 2:47 AM. No alerts from their SIEM. No Defender incident. The detection came from a junior analyst who noticed a pattern in raw logs — an authenticated account pulling site collection data at machine speed. By the time we traced the path, the attacker had been inside the SharePoint environment for eleven days. Authenticated. Trusted. Silent.
🔍 What CISA Actually Said — and What It Means for Enterprise Architecture
CISA's KEV catalog entry for CVE-2024-38094 is terse. It states that the vulnerability allows remote code execution via deserialization of untrusted data in Microsoft SharePoint Server. CISA mandated Federal Civilian Executive Branch (FCEB) agencies patch by October 28, 2024.
What CISA does not explain is the attack chain context. This vulnerability was observed being used as an initial access vector into enterprise networks — not as an isolated SharePoint compromise. Once RCE is achieved on the SharePoint server, attackers move laterally into the broader Windows Server infrastructure, harvest credentials via LSASS dumping, and pivot toward Active Directory.
The CISA advisory is available at: https://www.cisa.gov/known-exploited-vulnerabilities-catalog
Microsoft's security advisory for CVE-2024-38094 is documented under the July 2024 Patch Tuesday release. The patch was classified as Important, not Critical — which is part of why many organizations deprioritized it. That classification reflects exploitability complexity at the time of release, not real-world observed exploitation. By October 2024, CISA confirmed it was being actively exploited in the wild.
---
⚠️ Understanding CVE-2024-38094 — The Technical Reality
CVE-2024-38094 affects Microsoft SharePoint Server 2016, 2019, and SharePoint Server Subscription Edition. It is a deserialization vulnerability in SharePoint's API layer. An authenticated attacker with Site Owner permissions can send a crafted API request that causes the server to deserialize malicious data, resulting in arbitrary code execution in the context of the SharePoint application pool service account.
That last sentence carries enormous weight. The service account running SharePoint typically has elevated privileges across the server farm. On most enterprise deployments I have reviewed, that account also has rights to SQL Server, Active Directory service objects, and often file shares. It is a high-value target.
The prerequisites for exploitation:
- Network access to the SharePoint Server (internal network or exposed to internet)
- Authenticated session with Site Owner or higher permissions
- No additional privilege escalation required on the server itself
This is not a public-facing anonymous exploit. It requires an authenticated account. That requirement is also why it was initially rated Important rather than Critical. But attackers routinely obtain SharePoint credentials through phishing, credential stuffing, or earlier-stage compromises. The authentication bar is not the protection it appears to be.
If your SharePoint Server is accessible from the internet — even through a reverse proxy — and any user accounts are not protected by MFA, CVE-2024-38094 represents a direct path to server-level code execution. Treat this as Critical in your environment regardless of Microsoft's published severity rating.
---
🔐 Step 1: Determine Your Exposure
Before patching, before hunting, before alerting — know what you are protecting.
Identify All SharePoint Server Instances
Run this against your SCCM/Configuration Manager inventory or use Microsoft Defender for Endpoint's software inventory:
Get-WmiObject -ComputerName $servers -Class Win32_Product |
Where-Object { $_.Name -like "*SharePoint*" } |
Select-Object Name, Version, PSComputerName |
Export-Csv -Path "C:\Temp\SharePoint_Inventory.csv" -NoTypeInformationThe affected versions and builds:
| Product | Vulnerable Build | Patched Build | KB Article |
|---|---|---|---|
| SharePoint Server Subscription Edition | < 16.0.17928.20288 | 16.0.17928.20288 | KB5002606 |
| SharePoint Server 2019 | < 16.0.10416.20002 | 16.0.10416.20002 | KB5002607 |
| SharePoint Server 2016 | < 16.0.5461.1000 | 16.0.5461.1000 | KB5002608 |
Reference: https://learn.microsoft.com/en-us/officeupdates/sharepoint-updates
Check Internet Exposure
If your SharePoint Server is published externally, identify whether WAF rules for deserialization attacks are active. Most WAF implementations do not have application-layer SharePoint-specific rules by default.
Test-NetConnection -ComputerName sharepoint.yourdomain.com -Port 443---
🔐 Step 2: Apply the Security Patch
Patching SharePoint Server requires a specific sequence. Skipping steps causes farm instability.
Pre-Patch Checklist
- Document current SharePoint build version on all servers in the farm
- Back up SharePoint configuration and content databases
- Verify all servers in the farm will be patched — partial patching breaks farm consistency
- Schedule during a maintenance window if internal-only exposure (emergency window if internet-facing)
- Notify the SharePoint farm administrator — the patch requires PSConfig execution after installation
Patch Installation Sequence
.\ubersrv2019-kb5002607-fullfile-x64-glb.exe /passive /norestart
cd "C:\Program Files\Common Files\microsoft shared\Web Server Extensions\16\BIN"
.\PSConfig.exe -cmd upgrade -inplace b2b -wait -cmd applicationcontent -install -cmd installfeatures -cmd secureresources -cmd services -installDo NOT run PSConfig until the binary patch is installed on every server in the farm. Running PSConfig on a partially patched farm causes schema version conflicts that require manual database recovery. I have seen this scenario take a farm offline for 18 hours.
Validate the Patch
(Get-SPFarm).BuildVersion
Get-SPServer | Select-Object Name, NeedsUpgrade, Role---
🔍 Step 3: Hunt for Existing Compromise
Patching stops future exploitation. It does not evict an attacker already inside. Before you patch and move on, run a compromise assessment.
SharePoint ULS Log Analysis
SharePoint ULS (Unified Logging Service) logs are the primary forensic source for exploitation attempts. Look for deserialization errors, unexpected API calls, and unusual authenticated activity patterns.
ULS logs are located at: C:\Program Files\Common Files\microsoft shared\Web Server Extensions\16\LOGS
Look for these indicators:
System.Runtime.Serializationexceptions- Unexpected
/_api/endpoint calls with large POST bodies - Activity from service accounts at unusual hours
- Multiple rapid site collection enumeration requests
Microsoft Defender for Endpoint - KQL Hunting
If your SharePoint servers are onboarded to Microsoft Defender for Endpoint, use these queries in Microsoft Defender XDR Advanced Hunting:
// Detect suspicious process execution from SharePoint application pool
DeviceProcessEvents
| where Timestamp > ago(30d)
| where InitiatingProcessFileName in~ ("w3wp.exe", "owstimer.exe")
| where FileName !in~ ("csc.exe", "vbc.exe", "MSBuild.exe") // Known legitimate child processes
| where InitiatingProcessCommandLine has_any ("SharePoint", "WSS")
| project Timestamp, DeviceName, FileName, ProcessCommandLine, InitiatingProcessFileName, InitiatingProcessCommandLine
| order by Timestamp desc// Detect LSASS access originating from SharePoint server processes
DeviceEvents
| where Timestamp > ago(30d)
| where ActionType == "LsassProcessAccess"
| where InitiatingProcessFileName in~ ("w3wp.exe", "owstimer.exe", "spasohost.exe")
| project Timestamp, DeviceName, InitiatingProcessFileName, InitiatingProcessCommandLine, AdditionalFields
| order by Timestamp desc// Detect network connections from SharePoint app pool to internal hosts (lateral movement indicator)
DeviceNetworkEvents
| where Timestamp > ago(30d)
| where InitiatingProcessFileName =~ "w3wp.exe"
| where RemotePort in (445, 135, 5985, 5986, 3389) // SMB, RPC, WinRM, RDP
| where RemoteIPType != "Public"
| project Timestamp, DeviceName, RemoteIP, RemotePort, InitiatingProcessFileName, RemoteUrl
| order by Timestamp descMicrosoft Sentinel — Audit Log Analysis for SharePoint Online (Cloud Telemetry Supplement)
If you have Microsoft Sentinel connected to your Microsoft 365 audit logs, use this KQL to identify anomalous SharePoint access patterns from the same user accounts that have access to your on-premises farm:
// Identify SharePoint access anomalies - unusual volume from single user
OfficeActivity
| where TimeGenerated > ago(30d)
| where RecordType == "SharePoint"
| where Operation in ("FileAccessed", "FileDownloaded", "SiteCollectionAdminAdded")
| summarize OperationCount = count() by UserId, ClientIP, bin(TimeGenerated, 1h)
| where OperationCount > 500
| order by OperationCount desc// Detect SiteCollectionAdmin privilege escalation in audit logs
OfficeActivity
| where TimeGenerated > ago(30d)
| where Operation == "SiteCollectionAdminAdded"
| where RecordType == "SharePoint"
| project TimeGenerated, UserId, Site_Url, TargetUserOrGroupName, ClientIP
| order by TimeGenerated descThese Sentinel queries target SharePoint Online audit telemetry, not on-premises SharePoint Server directly. For on-premises SharePoint Server forensics, your primary sources are ULS logs, Windows Security Event Logs on the server, and MDE telemetry if the server is onboarded. Ensure your SharePoint servers are MDE-onboarded before relying on the Advanced Hunting queries above.
---
🚫 What This Technology Does NOT Solve
Patching CVE-2024-38094 and running the hunt queries addresses a specific, known vulnerability. It does not solve the architectural problems that made this situation possible.
Patching does not address:
- Over-privileged service accounts that amplify post-exploitation impact
- Flat network architectures that enable lateral movement after server compromise
- Missing MDE onboarding for server workloads that blinds the SOC to post-exploitation activity
- SharePoint governance debt — site collections with excess Site Owner grants are persistent attack surface
- The absence of a vulnerability management process that incorporates CISA KEV additions as an emergency trigger
- Credential hygiene across accounts with SharePoint access — if credentials are weak or reused, the authentication barrier for this exploit is negligible
- SharePoint Online migration strategy — organizations still running on-premises SharePoint Server carry infrastructure risk that SharePoint Online eliminates through Microsoft's patch responsibility model
---
📊 Step 5: Establish Ongoing Detection Coverage
Patching once is not a detection strategy. Build durable coverage that catches similar exploitation patterns in the future.
Defender for Endpoint — Custom Detection Rule
// Custom detection: SharePoint w3wp spawning suspicious child processes
// Schedule: Every hour, look back 1 hour
DeviceProcessEvents
| where Timestamp > ago(1h)
| where InitiatingProcessFileName =~ "w3wp.exe"
| where FileName in~ ("cmd.exe", "powershell.exe", "wscript.exe", "cscript.exe", "mshta.exe", "certutil.exe", "bitsadmin.exe")
| where InitiatingProcessCommandLine has_any ("SharePoint", "STS", "WSS")
| project Timestamp, DeviceName, FileName, ProcessCommandLine, InitiatingProcessFileNameCreate this as a Custom Detection Rule in Microsoft Defender XDR under: Hunting > Custom detection rules. Set alert severity to High and map to MITRE ATT&CK T1190 (Exploit Public-Facing Application).
Sentinel Alert Rule — SharePoint Server Lateral Movement
// Sentinel: Detect outbound connections from SharePoint server to internal SMB/WinRM
// Data connector: MDE (DeviceNetworkEvents forwarded via Sentinel connector)
DeviceNetworkEvents
| where TimeGenerated > ago(1h)
| where DeviceName has_any ("sharepoint", "sps", "sp-") // Adjust to your naming convention
| where InitiatingProcessFileName =~ "w3wp.exe"
| where RemotePort in (445, 5985, 5986)
| project TimeGenerated, DeviceName, RemoteIP, RemotePort, InitiatingProcessCommandLine---
---
💡 Step 6: Fix the Governance Process That Created This Exposure
I have been in this conversation dozens of times. The patch existed. The vulnerability was known. The exposure window was four months because a governance process categorized SharePoint as non-critical and scheduled it for a quarterly window.
That is the architectural failure. Not the vulnerability. Not even the lack of detection.
The CISA KEV catalog is one of the most operationally useful signals available to enterprise security teams, and most organizations have not integrated it into their vulnerability management workflow in a meaningful way. It should trigger an automatic exception to standard patch windows. Full stop.
Build this into your vulnerability management governance:
- Subscribe to CISA KEV updates via RSS or API: https://www.cisa.gov/known-exploited-vulnerabilities-catalog
- Any KEV addition affecting software in your environment triggers an emergency patch assessment within 24 hours
- Emergency patch assessment output: patch within 7 days for internet-facing, 14 days for internal-only, documented risk acceptance if delayed
- The decision to delay requires CISO sign-off, not IT management sign-off
$kevData = Invoke-RestMethod -Uri "https://www.cisa.gov/sites/default/files/feeds/known_exploited_vulnerabilities.json"
$msEntries = $kevData.vulnerabilities |
Where-Object { $_.vendorProject -eq "Microsoft" } |
Where-Object { $_.dateAdded -gt (Get-Date).AddDays(-30).ToString("yyyy-MM-dd") } |
Select-Object cveID, vulnerabilityName, dateAdded, dueDate, shortDescription
$msEntries | Format-Table -AutoSize---
🎯 Final Architect Recommendation
I would tell a customer the following directly: deploy the patch today. There is no defensible reason to wait.
If your SharePoint farm is internet-facing and you have not patched CVE-2024-38094, you are operating a CISA-confirmed actively exploited vulnerability with a four-month head start for attackers. That is not a risk to accept. That is a risk to document and escalate to the board if you cannot patch immediately.
If your farm is internal-only, your threat model allows slightly more control, but the compromise chain still ends with lateral movement and Active Directory damage. Internal-only does not mean safe.
What to do in the next 72 hours:
- Patch all SharePoint Server instances regardless of version — all three are affected
- Run the MDE Advanced Hunting queries above and review for indicators before patching
- Verify your SharePoint servers are MDE-onboarded — if they are not, fix that immediately
- Review service account privileges and remove local admin rights from SharePoint service accounts
- Verify MFA enforcement via Conditional Access for all Site Owner level accounts
What to fix in the next 30 days:
- Integrate CISA KEV into your vulnerability management emergency process
- Conduct a full SharePoint Site Owner audit and remove excess grants
- Review network segmentation between SharePoint servers and the rest of your environment
- Begin the business case for SharePoint Online migration — on-premises SharePoint carries infrastructure risk that does not exist in the cloud model
What I would never do:
I would never accept a risk deferral on an actively exploited CISA KEV vulnerability without CISO-level written acknowledgment and a defined remediation date. "We'll get to it next quarter" is not a risk acceptance posture. It is an undocumented liability.
The organizations that handled this well had two things in common: their SharePoint servers were onboarded to MDE, and they had a governance trigger that treated CISA KEV additions as emergency-class events. Everything else is follow-on work. Those two capabilities determine whether you detect exploitation before or after the attacker achieves their objective.
---
🎯 The Takeaway
- If CISA adds a vulnerability to the KEV catalog, treat it as Critical regardless of Microsoft's original severity rating. The KEV designation means active exploitation is confirmed. Your CVSS score is now irrelevant to your patch timeline.
- If your SharePoint Server is internet-facing and unpatched for CVE-2024-38094, initiate an emergency maintenance window immediately. The operational risk of an emergency patch is lower than the security risk of an actively exploited RCE vulnerability on an externally accessible server.
- Always run a compromise assessment before and after patching. Patching without hunting assumes no attacker entered during the exposure window. After a CISA KEV confirmation, that assumption is indefensible.
- If your SharePoint service accounts have local administrator rights or broad domain read permissions, remove them now. The vulnerability's impact multiplies with every excess privilege the service account holds. Least privilege is not a best practice — it is a blast radius control.
- If your vulnerability management process does not have a CISA KEV escalation trigger, build one before the next KEV addition affects your environment. Governance that requires a security incident to trigger emergency patching will always produce four-month exposure windows. The process must be proactive, not reactive.