A SharePoint parser that trusts whatever XML soup lands on /_layouts/ — again
CVE-2026-58644 is a CWE-502 unsafe deserialization in Microsoft Office SharePoint Server (on-premises). An unauthenticated HTTP POST to a vulnerable handler causes the server to reconstruct an attacker-supplied .NET object graph, yielding RCE as the SharePoint app-pool identity (typically a domain-joined service account with rights across the farm). It is paired with CVE-2026-50522 — the same Pwn2Own Berlin research cluster that spawned the July 2025 ToolShell chain and the May 2026 CVE-2026-45659 refresh. Affected: SharePoint Server 2016, 2019, and Subscription Edition prior to the July 2026 cumulative update; SharePoint Online is not affected.
The CRITICAL / 9.8 vendor label is accurate. Vector AV:N/AC:L/PR:N/UI:N is exactly right for a network-reachable, pre-auth BinaryFormatter-style bug on a product whose entire value proposition is to be reachable by users. Given the same code family already burned tens of thousands of farms in 2025, we treat this as CRITICAL and expect exploitation within days of PoC release, not months.
4 steps from start to impact.
Discover an exposed SharePoint farm
http.title:"SharePoint") or FOFA / Censys dorks on /_layouts/15/ and MicrosoftSharePointTeamServices headers. Post-ToolShell, mass-scanning botnets already maintain live inventories of on-prem farms.- SharePoint 2016/2019/SE reachable on TCP/80 or TCP/443
- Handler path not blocked by upstream WAF/reverse proxy
- Well-run enterprises front SharePoint with AAD App Proxy / Cloudflare Access / Zscaler ZPA, blocking anonymous handler access
- Some farms are intranet-only behind VPN
Deliver deserialization payload
TypeConfuseDelegate or TextFormattingRunProperties) and POSTs it to the vulnerable endpoint — expect a ToolShell-style POST to /_layouts/15/ToolPane.aspx or a sibling handler. The server deserializes and executes the gadget in the w3wp.exe context.- Reachable vulnerable endpoint
- Public ysoserial.net gadget still works against the target .NET Framework version
- AMSI for SharePoint (enabled by default on SE and on 2016/2019 with recent CUs) inspects deserialization payloads and blocks known gadgets
- Machine key rotation post-ToolShell breaks reuse of stolen keys but not this bug
w3wp.exe spawning cmd.exe/powershell.exe catch stage 2Establish persistence and steal machine keys
ValidationKey and DecryptionKey from web.config / farm config DB. This turns a transient RCE into durable, key-signed __VIEWSTATE re-entry that survives patching.- Write access to
_layouts/orTEMPLATE(default for app-pool) - Ability to read farm SQL config or registry-stored keys
- File integrity monitoring on
_layouts/catches new .aspx files - Read-only OS partition or DSC drift enforcement blocks webshell drop
w3wp.exe → whoami/net/nltest reconPivot to domain and data
- Farm account has typical over-privilege (very common)
- No tiering / no Protected Users group for service accounts
- Tier-0 isolation and gMSA usage limit lateral movement
- SQL auditing on content DB egress flags mass reads
The supporting signals.
| In-the-wild status | Not yet KEV-listed as of 2026-07-15 (disclosed same day). Sibling CVE-2026-45659 and CVE-2026-20963 are already KEV. Historical base rate: ToolShell-family bugs hit mass exploitation within 7–14 days of PoC. |
|---|---|
| Proof-of-concept | No public PoC on GitHub yet. Expect soulsec/ToolShell-2026 style repos within a week; ysoserial.net gadgets are directly reusable. |
| EPSS | Baseline ~8–15% at t+1 day for unauth SharePoint RCE; historically climbs to >90th percentile within 72 hours of first PoC (per FIRST data on the 2025 ToolShell CVEs). |
| KEV status | Not listed 2026-07-15. Precedent (CVE-2026-20963 added 2026-03-18) suggests KEV addition within 2–14 days if exploitation observed. |
| CVSS vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H — network reachable, no auth, no user click, full CIA. Vendor label is accurate, not inflated. |
| Affected versions | SharePoint Server 2016, 2019, and Subscription Edition prior to the July 2026 CU. SharePoint Online / Microsoft 365 not affected. |
| Fixed versions | Apply July 2026 Patch Tuesday SharePoint security updates (KB IDs in the MSRC advisory). Must also rotate ASP.NET machine keys post-patch (ToolShell lesson). |
| Exposure data | Shodan shows roughly 8–12k internet-facing on-prem SharePoint farms globally; Censys confirms similar order. That's the reachable population — every one is a same-day target. |
| Disclosure | 2026-07-14 as part of Microsoft's July Patch Tuesday; discussed in ZDI's July 2026 review and Cisco Talos advisory. |
| Credit | Research cluster tied to Pwn2Own Berlin 2026 (paired with CVE-2026-50522). Reported via ZDI. |
noisgate verdict.
Verdict stays CRITICAL because the single most decisive factor is role multiplier: SharePoint on-prem is a canonically internet-facing collaboration server holding regulated data, and the affected component IS the high-value role — no friction argument breaks the floor. The ToolShell precedent (July 2025) and the CVE-2026-45659 refresh (May 2026) prove this bug class reaches mass exploitation inside two weeks, so the friction audit only trims 0.2 points off the vendor 9.8.
Why this verdict
- Unauth network RCE, no user interaction — every friction knob in the CVSS vector is at worst-case. There is no authentication gate, no UI gate, no complexity gate to erode the score.
- Role multiplier — SharePoint IS a high-value role: on-prem farms host regulated documents (HR, legal, source, contracts), run under domain-joined service accounts that are routinely over-privileged, and connect to content DBs holding years of business record. Chain ends in domain-adjacent takeover + mass data egress. This is a canonical high-value-role component — floor is CRITICAL.
- Base-rate multiplier — the identical bug class (SharePoint XOML/BinaryFormatter deserialization) has produced ToolShell (2025), CVE-2026-20963 (KEV March 2026), and CVE-2026-45659 (KEV May 2026). Threat actors already have the tooling, dorks, and gadget chains warm.
- Friction audit narrows only slightly: (a) SharePoint Online is unaffected, cutting the customer base but leaving a five-figure internet-exposed on-prem population; (b) AMSI-for-SharePoint blocks *known* gadgets but historically gets bypassed within days; (c) organizations behind AAD App Proxy or ZTNA are shielded. Net adjustment: 9.8 → 9.6.
Why not higher?
9.8 is already the vendor ceiling and the CVSS 3.1 vector is fully maxed. We shave 0.2 only to acknowledge that a meaningful minority of enterprises publish SharePoint via AAD App Proxy / Cloudflare Access / ZTNA, and Microsoft's AMSI for SharePoint raises the bar against off-the-shelf ysoserial gadgets — enough to delay, not defeat, exploitation.
Why not lower?
Downgrading to HIGH would require breaking the CRITICAL floor set by role. That demands installed-base evidence that <10% of affected farms occupy the high-value role — the opposite is true here (essentially 100% of on-prem SharePoint farms are collaboration + content stores). A generic 'requires internet exposure' argument fails because the product's design intent IS to be user-reachable.
What to do — in priority order.
- Apply the July 2026 SharePoint CU immediately — This is the only true fix. Deploy within 3 days per the noisgate CRITICAL mitigation SLA — and treat it as hours-not-days given the ToolShell base rate. Test in a single farm, then push farm-wide with
PSConfig.exe/Install-SPService. - Rotate ASP.NET machine keys after patching — ToolShell taught the industry that patched farms with stolen keys remain compromised. Run
Update-SPMachineKey(or manualweb.configrotation +iisreset) on every WFE/App server the same window you patch. Do this within the same 3-day window. - Block or authenticate
/_layouts/15/ToolPane.aspxand adjacent handlers at the edge — If patching will slip beyond 72 hours, add a WAF / reverse-proxy rule denying anonymous POSTs to layout handlers, or front the farm with AAD App Proxy requiring MFA-gated pre-auth. Deploy the WAF rule within 24 hours. - Enable AMSI integration for SharePoint and Defender AV in Full mode — In on-prem SharePoint 2016/2019/SE, verify
Set-SPSecurityHardeningPolicy -EnableAntimalwareScan $trueand that Defender real-time protection is active on WFEs. Buys hours against commodity gadgets. Do today. - Hunt for the ToolShell webshell family and gadget indicators — Search WFEs for new .aspx under
%CommonProgramFiles%\Microsoft Shared\Web Server Extensions\1[56]\TEMPLATE\LAYOUTS, especiallyspinstall*.aspx. Pull IIS logs for POSTs toToolPane.aspxsince 2026-07-14. - Isolate the SharePoint farm service account — Migrate to gMSA, remove local admin on non-SharePoint hosts, add to Protected Users, and enforce Tier-1 boundary. This shrinks blast radius the next time this bug class recurs — which it will.
- IP allowlisting alone — SharePoint's user population is by definition broad; allowlists get subverted through VPN-connected user endpoints that are themselves the initial-access point.
- Disabling PowerShell on WFEs — the gadget chain executes inside w3wp.exe via .NET reflection; it doesn't need
powershell.exeto land initial code. - MFA on SharePoint login — the bug is pre-auth. MFA never fires.
- Snapshotting/rollback after compromise — if machine keys were stolen pre-snapshot, restoration reinstates the compromised keys. Rotate keys, don't just roll back.
Crowdsourced verification payload.
Run on each SharePoint WFE/App server as a local admin (elevated PowerShell). Invoke as .\Check-CVE-2026-58644.ps1. It reads the installed SharePoint build via the SharePoint PSSnapin (or registry fallback) and compares against the July 2026 CU floor. Emits VULNERABLE, PATCHED, or UNKNOWN and sets exit code accordingly.
#Requires -Version 5.1
# Check-CVE-2026-58644.ps1
# Verifies whether a SharePoint on-prem WFE has the July 2026 CU applied.
# Exit codes: 0=PATCHED, 1=VULNERABLE, 2=UNKNOWN
$ErrorActionPreference = 'Stop'
# Minimum patched builds per branch (July 2026 CU floor).
# Update these to the exact KB build numbers from MSRC once published.
$fixed = @{
'16.0.5' = [Version]'16.0.5500.10000' # Subscription Edition July 2026 CU
'16.0.10' = [Version]'16.0.10417.20000' # SharePoint 2019 July 2026 CU
'16.0.4' = [Version]'16.0.4999.10000' # SharePoint 2016 July 2026 CU
}
function Get-SPBuild {
try {
Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction Stop
return (Get-SPFarm).BuildVersion
} catch {
$reg = 'HKLM:\SOFTWARE\Microsoft\Shared Tools\Web Server Extensions\16.0\WSS'
if (Test-Path $reg) {
$v = (Get-ItemProperty $reg).Version
if ($v) { return [Version]$v }
}
return $null
}
}
$build = Get-SPBuild
if (-not $build) {
Write-Output 'UNKNOWN: SharePoint not detected on this host.'
exit 2
}
$branchKey = '{0}.{1}.{2}' -f $build.Major, $build.Minor, $build.Build.ToString().Substring(0,1)
$match = $fixed.GetEnumerator() | Where-Object { $build -lt [Version]'16.0.6000' -and $_.Key -like ($build.Major.ToString()+'.'+$build.Minor.ToString()+'*') } | Select-Object -First 1
# Simpler compare: find nearest branch by build ranges
$floor = $null
if ($build.Build -lt 6000) { $floor = $fixed['16.0.4'] } # 2016 branch
elseif ($build.Build -lt 11000) { $floor = $fixed['16.0.10'] } # 2019 branch
else { $floor = $fixed['16.0.5'] } # SE branch
Write-Output ("Detected build: {0}" -f $build)
Write-Output ("Required floor: {0}" -f $floor)
if ($build -ge $floor) {
Write-Output 'PATCHED'
exit 0
} else {
Write-Output 'VULNERABLE'
exit 1
}
If you remember one thing.
/_layouts/15/ToolPane.aspx as a stop-gap for any farm that can't patch same-week; (5) hunt for spinstall*.aspx and w3wp.exe child-process anomalies since 2026-07-14. Fleet-wide remediation SLA is 90 days, but on-prem SharePoint has zero excuse to consume that budget — target complete remediation inside 14 days.Sources
- ZDI — The July 2026 Security Update Review
- CISA — SharePoint Hardening Alert (July 2026)
- Cisco Talos — Microsoft Patch Tuesday July 2026
- Trellix — ToolShell Unleashed: Decoding the SharePoint Attack Chain
- FortiGuard Labs — Inside the ToolShell Campaign
- Akamai — SharePoint RCE: Exploitations, Detections, Mitigations
- SecurityWeek — CISA Warns of Actively Exploited SharePoint Vuln
- The Hacker News — SharePoint RCE CVE-2026-45659 Added to KEV
What defenders are saying.
Crowdsourced verification outputs.
Results submitted by users who ran the verification payload against their environment.