SharePoint Server RCE — CVE-2026-45659
Executive Summary
CVE-2026-45659 is a remote-code-execution flaw (CVSS 8.8) in on-premises Microsoft SharePoint Server, caused by deserialization of untrusted data. An attacker holding only Site Member permissions — no admin rights, no user interaction — can execute arbitrary code on the server in a low-complexity attack. Microsoft shipped the fix on 2026-05-21; a companion deserialization bug CVE-2026-47294 was patched in the same cycle. CISA added CVE-2026-45659 to the Known Exploited Vulnerabilities catalog on 2026-07-01 with a federal remediation deadline of 2026-07-05, despite Microsoft's original "Exploitation Less Likely" rating.
As of publication no atomic IOCs, webshell names, or threat-actor attribution are public — CISA states it is "not known how the vulnerability is being exploited." This pack is therefore behavior-based: it hunts the deserialization-RCE post-exploitation surface that is invariant across SharePoint code-execution bugs — the IIS worker process w3wp.exe spawning shells, script interpreters and compilers, dropping web-accessible .aspx handlers into the SharePoint web root, and beaconing outbound.
Defender priority: (1) Confirm every on-prem SharePoint farm is on the 2026-05-21 build or later — patching is the fix. (2) Run Q1 immediately: w3wp.exe spawning cmd/powershell/csc on a SharePoint server is the single highest-fidelity sign of successful exploitation. (3) After any suspected hit, rotate the farm's ASP.NET machine keys — deserialization/ViewState abuse survives a patch if leaked keys aren't rotated.
Source Review & Web Hunter Notes
| Tier | Source | Key Finding | Carry Fwd |
|---|---|---|---|
| 1 | CISA KEV catalog entry (2026-07-01) | Active exploitation confirmed; BOD remediation due 2026-07-05; exploitation method not disclosed | yes |
| 1 | Microsoft Security Update Guide — CVE-2026-45659 (2026-05-21) | Deserialization RCE, CVSS 8.8, Site-Member auth, SharePoint SE / 2019 / 2016; fixed build 16.0.19725.20280 (SE) | yes |
| 2 | BleepingComputer / The Register (2026-07-02) | KEV addition despite "Exploitation Less Likely"; no named actor or TTP | partial |
| 2 | The Hacker News (2026-07-02) · SOCRadar / Help Net Security | Companion CVE-2026-47294; generic detection guidance (monitor IIS-worker child processes, app-pool recycles, new files in SharePoint dirs) | yes |
| R | MITRE ATT&CK · SharePoint deserialization TTP pattern (T1190 / T1505.003) | Invariant post-exploitation surface for SharePoint code-exec bugs | yes |
Intel gap (honest): exploitation details are not public. Every hunt here is behavior-based against the deserialization-RCE surface; the IOC appendix (§10) ships with REPLACE_WITH_… placeholders rather than fabricated indicators. Re-hunt this pack when a vendor publishes webshell names / infrastructure.
Hunt Brief & Attack Chain
Hunt hypotheses (fidelity-ordered)
- H1 (high): Successful RCE surfaces as
w3wp.exe(SharePoint app pool) spawning a shell or script interpreter. - H2 (high): Webshell installation compiles code on the fly —
w3wp.exespawningcsc.exe/vbc.exe. - H3 (high): A web-accessible handler (
.aspx/.ashx/.asmx) is written under the SharePoint web root byw3wp.exe. - H4 (high): Encoded / download-cradle PowerShell launched from
w3wp.exe. - H5 (medium): Host/domain reconnaissance LOLBins spawned by
w3wp.exe. - H6 (medium): Ingress-tool-transfer LOLBins (certutil/bitsadmin/curl/rundll32/regsvr32/mshta) spawned by
w3wp.exe. - H7 (medium): The SharePoint IIS worker makes anomalous outbound connections to external IPs.
Attack chain
| Step | Behavior | Telemetry | Hunt Angle |
|---|---|---|---|
| 1 · Access | Attacker authenticates with low-priv (Site Member) account | IIS logs / SharePoint auth | §7 IIS/ULS |
| 2 · Exploit | Crafted request triggers unsafe deserialization at a SharePoint endpoint | IIS logs / ULS exceptions | §7 (POST to _layouts) |
| 3 · Code exec | Payload runs as the SharePoint app pool via w3wp.exe | ProcessRollup2 | Q1, Q2, Q4 |
| 4 · Webshell | Attacker drops a persistent .aspx handler in the web root | File-write events | Q3 |
| 5 · Recon | Host/domain enumeration from the server context | ProcessRollup2 | Q5 |
| 6 · Tooling | Download of follow-on tooling | ProcessRollup2 / NetworkConnectIP4 | Q6, Q7 |
| 7 · C2 / lateral | Outbound beacon; pivot to identity/lateral movement | NetworkConnectIP4 / DnsRequest | Q7 |
Consolidated IOC Table
No atomic IOCs are published for CVE-2026-45659 as of 2026-07-03. The "indicators" below are behavioral/config facts drawn from Microsoft's advisory and CISA KEV — not fabricated hashes or C2. Treat the behavior signatures as the detection substrate; add atomic IOCs when a vendor publishes them.
| Type | Value | Conf | Action | Context |
|---|---|---|---|---|
| behavior | w3wp.exe spawning cmd / powershell / csc / mshta on a SharePoint server | high | hunt | Post-exploitation code exec (Q1/Q2/Q4) |
| behavior | New .aspx/.ashx/.asmx written under the SharePoint web root by w3wp.exe | high | hunt | Webshell drop (Q3) |
| behavior | SharePoint IIS worker making outbound connections to external IPs | medium | hunt | Tool download / C2 (Q7) |
| config | SharePoint SE build < 16.0.19725.20280 (2019/2016 pre-May-2026 CU) | high | enrich | Unpatched / exploitable |
| config | Un-rotated ASP.NET machine keys after suspected compromise | medium | enrich | Enables ViewState replay post-patch |
| placeholder | REPLACE_WITH_WEBSHELL_SHA256 / REPLACE_WITH_C2 (when published) | n/a | detect | Reserve for vendor-published atomics |
Affected Surface & Telemetry Matrix
| Surface | Required Telemetry | Priority | Gap Risk |
|---|---|---|---|
| On-prem SharePoint servers (SE / 2019 / 2016) | ProcessRollup2 (w3wp lineage) | Critical | Low — core Falcon coverage |
| SharePoint web root (LAYOUTS / TEMPLATE / _app_bin) | File-write telemetry | High | Medium — depends on file-write event flow |
| Server egress | NetworkConnectIP4 / DnsRequest | High | Medium — server may be behind proxy |
| IIS / SharePoint ULS logs | Non-Falcon: IIS W3C logs, SharePoint ULS | High | High — must be shipped to SIEM |
| Patch / build state | Config management / vuln scan | Medium | Low |
ATT&CK Mapping
| Tactic | Technique | Observed Behavior | Query / Control |
|---|---|---|---|
| Initial Access | T1190 Exploit Public-Facing Application | Deserialization RCE via SharePoint endpoint | §7, patch |
| Execution | T1059.001 PowerShell | Encoded/download PS from w3wp | Q4 |
| Execution | T1059.003 Windows Command Shell | w3wp spawning cmd.exe | Q1 |
| Persistence | T1505.003 Web Shell | .aspx handler dropped in web root | Q3, Q2 |
| Defense Evasion | T1211 / T1027 | ViewState/machine-key abuse; obfuscated payloads | machine-key rotation |
| Discovery | T1082 / T1087 | Host/domain recon from server context | Q5 |
| Command & Control | T1105 Ingress Tool Transfer | LOLBin downloads; outbound beacon | Q6, Q7 |
| Command & Control | T1071.001 Web Protocols | w3wp outbound to external IP | Q7 |
Native Audit-Log Hunts (non-CQL)
- IIS W3C logs — POST requests to SharePoint endpoints under
/_layouts/15/or/_layouts/16/with abnormally large bodies or__VIEWSTATE/__SUSPICIOUSparameters, especially from low-privilege (Site Member) accounts, and 200/500 spikes on those endpoints. - SharePoint ULS logs — deserialization / type-load exceptions and unexpected application-pool recycles or w3wp crashes correlated with the requests above.
- Windows Security 4688 — child processes of
w3wp.exeon SharePoint servers (mirror of Q1/Q2/Q5/Q6 if EDR coverage is partial). - File Integrity Monitoring — new/modified files under
%ProgramFiles%\Common Files\Microsoft Shared\Web Server Extensions\16\TEMPLATE\LAYOUTSand_app_binnot tied to a patch/admin change. - Patch/build audit — confirm farm build is 16.0.19725.20280+ (SE) or the May-2026 CU for 2016/2019.
CrowdStrike LogScale CQL Hunt Queries
Looks for: the SharePoint IIS worker launching a command shell or scripting host — the highest-fidelity sign of successful RCE. FP: some SharePoint solutions and admin scripts legitimately shell out; scope to SharePoint servers and baseline known solution accounts.
// HUNT: SharePoint app pool (w3wp) spawning a shell / interpreter // MITRE: T1190, T1059.003, T1059.001 // CONF: high FP: medium COST: low | REQUIRES: ProcessRollup2 // TUNING: restrict to SharePoint hosts; exclude vetted solution/admin automation #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | ParentBaseFileName=/^w3wp\.exe$/i | FileName=/^(cmd|powershell|pwsh|mshta|wscript|cscript)(\.exe)?$/i | table([ComputerName, aid, UserName, ParentBaseFileName, FileName, CommandLine], limit=200)
Looks for: on-the-fly C#/VB compilation under the app pool — a hallmark of ASP.NET webshell installation. FP: ASP.NET does first-request compilation; baseline expected csc bursts on deploy and alert on compilation outside deploy windows or writing to unusual paths.
// HUNT: w3wp spawning csc/vbc (webshell compilation) // MITRE: T1505.003 // CONF: high FP: medium COST: low | REQUIRES: ProcessRollup2 // TUNING: exclude scheduled deploy windows; alert on off-hours csc from w3wp #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | ParentBaseFileName=/^w3wp\.exe$/i | FileName=/^(csc|vbc)(\.exe)?$/i | table([ComputerName, aid, UserName, FileName, CommandLine], limit=200)
Looks for: a new .aspx/.ashx/.asmx file written into the SharePoint LAYOUTS/TEMPLATE tree by the IIS worker — webshell persistence. FP: patches and legitimate solution deployments write here; correlate with a change window and with Q1/Q2 on the same host.
// HUNT: Web-accessible handler dropped in SharePoint web root // MITRE: T1505.003 // CONF: high FP: medium COST: low | REQUIRES: file-write telemetry // TUNING: exclude CU/patch and vetted solution-deployment windows #event_simpleName=/PeFileWritten|FileCreateInfo|NewScriptWritten/ | ContextBaseFileName=/^w3wp\.exe$/i | TargetFileName=/Web Server Extensions\\1[56]\\TEMPLATE\\LAYOUTS.+\.(aspx|ashx|asmx)$/i | table([ComputerName, aid, ContextBaseFileName, TargetFileName], limit=200)
Looks for: obfuscated or network-fetching PowerShell whose parent is the SharePoint worker — a strong exploitation signal.
// HUNT: Encoded/download PowerShell child of w3wp // MITRE: T1059.001, T1105 // CONF: high FP: low COST: low | REQUIRES: ProcessRollup2 #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | ParentBaseFileName=/^w3wp\.exe$/i | FileName=/^(powershell|pwsh)(\.exe)?$/i | CommandLine=/-enc|-encodedcommand|FromBase64String|DownloadString|DownloadFile|IEX|Invoke-Expression/i | table([ComputerName, aid, UserName, CommandLine], limit=200)
Looks for: host/domain enumeration spawned by the SharePoint worker. FP: monitoring agents occasionally run these; the w3wp parent constraint keeps it tight — investigate any hit.
// HUNT: Discovery LOLBins spawned by w3wp // MITRE: T1082, T1087 // CONF: medium FP: medium COST: low | REQUIRES: ProcessRollup2 // TUNING: exclude known inventory/monitoring agents on SharePoint hosts #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | ParentBaseFileName=/^w3wp\.exe$/i | FileName=/^(whoami|net|net1|nltest|systeminfo|quser|ipconfig|tasklist)(\.exe)?$/i | table([ComputerName, aid, UserName, FileName, CommandLine], limit=200)
Looks for: download/proxy-exec LOLBins launched by the SharePoint worker — follow-on tooling retrieval.
// HUNT: Ingress-tool LOLBins spawned by w3wp // MITRE: T1105 // CONF: high FP: low COST: low | REQUIRES: ProcessRollup2 #event_simpleName=/ProcessRollup2|SyntheticProcessRollup2/ | ParentBaseFileName=/^w3wp\.exe$/i | FileName=/^(certutil|bitsadmin|curl|rundll32|regsvr32|msbuild)(\.exe)?$/i | table([ComputerName, aid, UserName, FileName, CommandLine], limit=200)
Looks for: w3wp.exe making outbound connections. FP: SharePoint legitimately reaches some Microsoft/service endpoints — exclude sanctioned destinations and focus on external, non-corporate IPs.
// HUNT: w3wp outbound network (tool download / C2) // MITRE: T1071.001, T1105 // CONF: medium FP: medium COST: medium | REQUIRES: NetworkConnectIP4 // TUNING: exclude sanctioned SharePoint service endpoints and internal ranges #event_simpleName=/NetworkConnectIP4/ | ContextBaseFileName=/^w3wp\.exe$/i | RemotePort=/^(80|443|8080|4444)$/ | table([ComputerName, aid, ContextBaseFileName, RemoteAddressIP4, RemotePort], limit=200)
CrowdStrike Custom IOA Recommendations
| IOA | Pattern | Exclusions | Action |
|---|---|---|---|
| w3wp → shell/interpreter | Parent w3wp.exe spawning cmd/powershell/csc/mshta on a SharePoint server group | Vetted solution/admin automation accounts | Detect → Block (High) |
| Webshell drop | w3wp.exe writing .aspx/.ashx/.asmx into the LAYOUTS/TEMPLATE tree outside a change window | Patch/deploy windows | Detect (High) |
| w3wp ingress tool | w3wp.exe spawning certutil/bitsadmin/curl | None | Block (Critical) |
Scope every IOA to a SharePoint server host group so the w3wp.exe parent constraint stays meaningful. Promote the w3wp→shell and w3wp→ingress IOAs to prevention after one clean baseline window.
Machine-Readable IOC Appendix
type,value,action,severity,expiration,description,tags sha256,REPLACE_WITH_WEBSHELL_SHA256,prevent,critical,2027-01-03,SharePoint CVE-2026-45659 webshell,cve:2026-45659 domain,REPLACE_WITH_C2,detect,high,2026-10-03,SharePoint RCE follow-on C2,cve:2026-45659 ipv4,REPLACE_WITH_C2_IP,detect,high,2026-10-03,SharePoint RCE follow-on C2,cve:2026-45659
Code exec: w3wp.exe -> cmd/powershell/pwsh/mshta/wscript/cscript Webshell build: w3wp.exe -> csc.exe/vbc.exe Webshell drop: w3wp.exe writes *.aspx/*.ashx/*.asmx under LAYOUTS/TEMPLATE Cradle: w3wp -> powershell with -enc / DownloadString / IEX Recon: w3wp -> whoami/net/nltest/systeminfo/quser Ingress: w3wp -> certutil/bitsadmin/curl/rundll32/regsvr32/msbuild Egress: w3wp.exe outbound to external IP (80/443/8080/4444)
[ ] SharePoint SE build 16.0.19725.20280 or later (May 2026 CU) [ ] SharePoint 2016/2019 May-2026 cumulative update applied [ ] CVE-2026-47294 (companion deserialization bug) also patched [ ] AMSI Full-mode integration enabled + Defender AV running [ ] ASP.NET machine keys rotated (post-patch, esp. if any suspicion) [ ] App pool runs under a low-privilege managed account [ ] Internet-facing farms behind WAF/reverse proxy w/ pre-auth [ ] IIS + SharePoint ULS logs shipped to SIEM
Hunt IIS W3C logs for: - POST to /_layouts/15/ or /_layouts/16/ endpoints with large bodies - requests carrying __VIEWSTATE from Site-Member (low-priv) accounts - 500 -> 200 transitions on a SharePoint endpoint (exploit tuning) - bursts of requests immediately preceding a w3wp child-process hit
Detection Validation Gates
| Gate | Check | Pass Criteria |
|---|---|---|
| Telemetry ready | ProcessRollup2 + file-write + NetworkConnectIP4 flowing from SharePoint hosts | All present in last 24h on the SharePoint host group |
| Scope defined | SharePoint server host group exists in Falcon | Q1–Q7 scoped to that group to keep the w3wp constraint meaningful |
| Benign baseline | Run Q1/Q2/Q5 over 7–14 days; enumerate legit w3wp children (solutions, deploys, monitoring) | Known-good documented and excluded |
| Positive test | Lab: force a benign w3wp→cmd; write a test .aspx under LAYOUTS | Q1 and Q3 fire |
| Promotion | w3wp→shell + w3wp→ingress IOAs clean for one baseline window | Promote to prevent |
Hardening — Tiered & Deployable
- Patch (M1051) — apply the May-2026 SharePoint CU (SE build 16.0.19725.20280+; 2016/2019 latest CU). Patches both CVE-2026-45659 and CVE-2026-47294. Federal deadline 2026-07-05.
- Enable AMSI Full-mode integration (M1049/M1040) + Microsoft Defender AV on every farm server — Microsoft's standing mitigation for SharePoint deserialization/ViewState attacks.
- Rotate ASP.NET machine keys (M1027) after patching, then IISReset — prevents ViewState replay with any keys leaked before the fix.
- Block server egress (M1037) — deny outbound from SharePoint servers except sanctioned destinations, so a webshell can't pull tooling or beacon.
- WDAC / app-control on SharePoint servers (M1038) — deny
w3wp.exefrom launchingcmd/powershell/csc/mshta/certutil; this neuters the entire post-exploitation chain even if a new bug lands. - Least privilege (M1026/M1018) — run the app pool under a low-priv managed account; audit and minimize who holds Site Member on internet-facing sites.
- WAF / reverse proxy pre-auth (M1030) — front internet-facing farms and inspect for deserialization payloads.
- Ship IIS + ULS logs to SIEM (M1047) with the §7 hunts scheduled.
- Reduce exposure (M1030/M1035) — remove SharePoint from direct internet exposure where possible; require VPN/ZTNA + MFA for external access.
- Segment SharePoint tier (M1030) — isolate farm servers so a compromised w3wp can't pivot to identity/lateral targets.
- Migration path — plan movement of internet-facing collaboration off self-hosted on-prem SharePoint where feasible.
Deployable Playbooks
1 · Confirm the patch build (PowerShell, on a farm server)
# Farm build must be 16.0.19725.20280 or later (SE, May 2026 CU) (Get-SPFarm).BuildVersion # Or check the assembly directly: (Get-Item "$env:CommonProgramFiles\Microsoft Shared\Web Server Extensions\16\ISAPI\Microsoft.SharePoint.dll").VersionInfo.ProductVersion
2 · Enable AMSI + verify Defender (Central Admin / PowerShell)
# AMSI Full-mode integration ships in current SharePoint builds and is enabled # via Central Administration > Security > "Manage antimalware / AMSI" (Full mode). # Verify Defender AV is present and running on every farm server: Get-MpComputerStatus | Select-Object AMServiceEnabled, RealTimeProtectionEnabled # Then recycle: IISReset /noforce (run on each server after enabling)
3 · Rotate machine keys + recycle (post-patch)
# Rotate the farm's ASP.NET machine keys using Microsoft's documented # key-rotation procedure for your SharePoint version, then across ALL servers: IISReset /noforce # Re-run Q3/Q7 afterward to confirm no residual webshell or beacon.
4 · WDAC/IOA guard — block w3wp shelling out (concept)
# Falcon Custom IOA (recommended): Parent ImageFileName ends \w3wp.exe # AND Child ImageFileName in (cmd.exe, powershell.exe, csc.exe, mshta.exe, # certutil.exe) on the SharePoint host group -> Block. # WDAC alternative: deny-rule these child binaries when parent is w3wp.exe.
Containment Runbook
| Phase | Actions | Owner | Evidence |
|---|---|---|---|
| Isolate | Network-contain the SharePoint server in Falcon; capture IIS/ULS logs + memory before changes | SOC | Containment ticket, aid |
| Eradicate | Kill webshell/child processes; remove attacker .aspx from LAYOUTS/TEMPLATE; apply the CU; rotate machine keys and service-account creds | IR / SharePoint admin | Playbook 1–3 output |
| Recover | Enable AMSI/WDAC guard; IISReset; validate farm health; re-run Q1–Q7 clean | IT / SOC | Clean hunt re-run |
| Hunt-wide | Sweep all farm servers with Q1–Q7 and IIS/ULS hunts; verify build state across every server; check for lateral movement from the SharePoint tier | Threat Hunt | Coverage-map update |
Detection Coverage Map
| Technique | Behavior | CQL | IOA | Coverage |
|---|---|---|---|---|
| T1190 | Deserialization exploit request | — | — | GAP (IIS/ULS + WAF, §7) |
| T1059.003 / .001 | w3wp → shell / PowerShell | Q1, Q4 | Yes | Good |
| T1505.003 | Webshell compile + drop | Q2, Q3 | Yes | Good |
| T1082 / T1087 | Recon LOLBins | Q5 | — | Partial |
| T1105 | Ingress tooling | Q6 | Yes | Good |
| T1071.001 | w3wp outbound C2 | Q7 | — | Partial |
| Atomic IOCs | Webshell hash / C2 | — | — | GAP (none published — §10 reserved) |
Two gaps are inherent to this pack: the exploit request itself (T1190) is best seen in IIS/ULS/WAF telemetry rather than EDR, and no atomic IOCs are public yet — the §10 CSV is reserved with placeholders and should be filled the moment a vendor publishes webshell/C2 indicators. The behavioral queries Q1–Q6 cover the post-exploitation chain durably. Validation gates in §11 must pass before promoting any query to prevent.
Hunt Summary Ticket
TITLE: SharePoint Server RCE CVE-2026-45659 — Hunt Pack (behavioral)
SEVERITY: High — CVSS 8.8, exploited ITW, KEV due 2026-07-05
SCOPE: On-prem SharePoint SE / 2019 / 2016 servers
HYPOTHESIS: Site-Member-auth deserialization RCE runs code as the app pool;
post-exploitation shows as w3wp.exe spawning shells/compilers/LOLBins,
webshell .aspx drops, and outbound beacons.
QUERIES: Q1 w3wp->shell | Q2 w3wp->csc | Q3 webshell drop | Q4 enc PS
Q5 recon | Q6 ingress LOLBin | Q7 w3wp egress
DO FIRST: Confirm May-2026 build everywhere; run Q1 across the SharePoint group
FINDINGS: ____________________________________________
GAPS: Exploit request (T1190) = IIS/ULS/WAF only; no atomic IOCs published
ACTIONS: Patch (45659 + 47294) + AMSI + machine-key rotation + egress block
+ WDAC/IOA deny w3wp->shell
OWNER: HuntPack
VERSION: v0.2 · 2026-07-03
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 | Access Date |
|---|---|---|---|
| 1 | CISA Known Exploited Vulnerabilities Catalog — CVE-2026-45659 | Active-exploitation confirmation, federal deadline | 2026-07-03 |
| 1 | The Hacker News — SharePoint RCE CVE-2026-45659 Added to CISA KEV | KEV timeline, affected versions, CVSS, privilege requirement | 2026-07-03 |
| 2 | BleepingComputer — CISA: Microsoft SharePoint RCE flaw now actively exploited | Patch date, remediation due date, no-TTP confirmation | 2026-07-03 |
| 2 | Threat-Modeling.com — SharePoint Deserialization RCE (CVE-2026-47294 / 45659) | Companion CVE, affected builds, fixed build number | 2026-07-03 |
| R | MITRE ATT&CK | Technique mapping (T1190, T1505.003, T1059, T1105, T1071.001) | 2026-07-03 |