← Back to Feed CACHED · 2026-07-15 06:26:51 · CACHE_KEY CVE-2026-58644
CVE-2026-58644 · CWE-502 · Disclosed 2026-07-14

Deserialization of untrusted data in Microsoft Office SharePoint

ASSESSED — NOISGATE V0.5
Vendor
Reassessed
Verdict:
Do you agree?
01 · The Real Story

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.

"Unauth RCE in a canonically internet-exposed collaboration tier with a live ToolShell playbook — the CRITICAL floor holds."
02 · The Attack Path

4 steps from start to impact.

STEP 01

Discover an exposed SharePoint farm

Attacker enumerates internet-facing SharePoint using Shodan (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.
Conditions required:
  • SharePoint 2016/2019/SE reachable on TCP/80 or TCP/443
  • Handler path not blocked by upstream WAF/reverse proxy
Where this breaks in practice:
  • Well-run enterprises front SharePoint with AAD App Proxy / Cloudflare Access / Zscaler ZPA, blocking anonymous handler access
  • Some farms are intranet-only behind VPN
Detection/coverage: Shodan and Censys both tag SharePoint versions; GreyNoise tags for ToolShell-family probes exist and light up within hours of PoC drop
STEP 02

Deliver deserialization payload

Attacker crafts a gadget chain with ysoserial.net (typically 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.
Conditions required:
  • Reachable vulnerable endpoint
  • Public ysoserial.net gadget still works against the target .NET Framework version
Where this breaks in practice:
  • 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
Detection/coverage: IIS logs show anomalous POSTs to layout handlers; Defender for Endpoint has ToolShell-family signatures; Splunk/Sentinel CIM searches on w3wp.exe spawning cmd.exe/powershell.exe catch stage 2
STEP 03

Establish persistence and steal machine keys

Once code runs as the app-pool account, attackers drop an ASPX webshell (spinstall0.aspx pattern from ToolShell) and exfiltrate ValidationKey and DecryptionKey from web.config / farm config DB. This turns a transient RCE into durable, key-signed __VIEWSTATE re-entry that survives patching.
Conditions required:
  • Write access to _layouts/ or TEMPLATE (default for app-pool)
  • Ability to read farm SQL config or registry-stored keys
Where this breaks in practice:
  • File integrity monitoring on _layouts/ catches new .aspx files
  • Read-only OS partition or DSC drift enforcement blocks webshell drop
Detection/coverage: Defender AV flags the spinstall0.aspx family; EDR catches w3wp.exe → whoami/net/nltest recon
STEP 04

Pivot to domain and data

The SharePoint farm account is domain-joined and typically has SPN-bearing rights, database owner on the content DBs, and network reachability to DCs. Attacker uses Rubeus for Kerberoasting, SharpHound/BloodHound to map paths, and dumps content DBs (HR, legal, source, PII) directly via the trusted DB connection.
Conditions required:
  • Farm account has typical over-privilege (very common)
  • No tiering / no Protected Users group for service accounts
Where this breaks in practice:
  • Tier-0 isolation and gMSA usage limit lateral movement
  • SQL auditing on content DB egress flags mass reads
Detection/coverage: AD auditing on TGS requests, EDR on LSASS access, DLP on SharePoint content DB SELECT volumes
03 · Intelligence Metadata

The supporting signals.

In-the-wild statusNot 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-conceptNo public PoC on GitHub yet. Expect soulsec/ToolShell-2026 style repos within a week; ysoserial.net gadgets are directly reusable.
EPSSBaseline ~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 statusNot listed 2026-07-15. Precedent (CVE-2026-20963 added 2026-03-18) suggests KEV addition within 2–14 days if exploitation observed.
CVSS vectorCVSS: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 versionsSharePoint Server 2016, 2019, and Subscription Edition prior to the July 2026 CU. SharePoint Online / Microsoft 365 not affected.
Fixed versionsApply 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 dataShodan 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.
Disclosure2026-07-14 as part of Microsoft's July Patch Tuesday; discussed in ZDI's July 2026 review and Cisco Talos advisory.
CreditResearch cluster tied to Pwn2Own Berlin 2026 (paired with CVE-2026-50522). Reported via ZDI.
04 · The Call

noisgate verdict.

Final Verdict
= UNCHANGED to CRITICAL (9.6/10)

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.

HIGH Severity classification (CRITICAL)
HIGH Affected version scope and vendor patch availability
MEDIUM Time-to-exploitation forecast (7–14 days by base rate)
LOW PoC availability at t+1 day

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.

05 · Compensating Control

What to do — in priority order.

  1. 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.
  2. Rotate ASP.NET machine keys after patching — ToolShell taught the industry that patched farms with stolen keys remain compromised. Run Update-SPMachineKey (or manual web.config rotation + iisreset) on every WFE/App server the same window you patch. Do this within the same 3-day window.
  3. Block or authenticate /_layouts/15/ToolPane.aspx and 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.
  4. Enable AMSI integration for SharePoint and Defender AV in Full mode — In on-prem SharePoint 2016/2019/SE, verify Set-SPSecurityHardeningPolicy -EnableAntimalwareScan $true and that Defender real-time protection is active on WFEs. Buys hours against commodity gadgets. Do today.
  5. 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, especially spinstall*.aspx. Pull IIS logs for POSTs to ToolPane.aspx since 2026-07-14.
  6. 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.
What doesn't work
  • 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.exe to 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.
06 · Verification

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.

noisgate-verify.ps1
POWERSHELLREAD-ONLYSAFE
#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
}
07 · Bottom Line

If you remember one thing.

TL;DR
Treat CVE-2026-58644 like ToolShell v3. Monday morning: (1) enumerate every on-prem SharePoint 2016/2019/SE farm — external AND internal — via CMDB + Shodan/Censys reverse-lookup on owned ranges; (2) push the July 2026 CU to internet-exposed farms within hours and to all other farms within the noisgate mitigation SLA of 3 days for CRITICAL — override the standard 3-day mitigation window with 'patch immediately' the moment KEV lists it or a PoC lands; (3) rotate ASP.NET machine keys in the same maintenance window; (4) drop a WAF rule blocking anonymous POSTs to /_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

  1. ZDI — The July 2026 Security Update Review
  2. CISA — SharePoint Hardening Alert (July 2026)
  3. Cisco Talos — Microsoft Patch Tuesday July 2026
  4. Trellix — ToolShell Unleashed: Decoding the SharePoint Attack Chain
  5. FortiGuard Labs — Inside the ToolShell Campaign
  6. Akamai — SharePoint RCE: Exploitations, Detections, Mitigations
  7. SecurityWeek — CISA Warns of Actively Exploited SharePoint Vuln
  8. The Hacker News — SharePoint RCE CVE-2026-45659 Added to KEV
Peer Review

What defenders are saying.

Submit a review attribution: handle + country only
0 flags selected · stored anonymously
Validation Results

Crowdsourced verification outputs.

Results submitted by users who ran the verification payload against their environment.