A contributor-level SharePoint account is the only thing between an attacker and your domain — and ransomware crews already know it
CVE-2026-45659 is a .NET deserialization-of-untrusted-data vulnerability in on-premises Microsoft SharePoint Server affecting all supported versions: SharePoint Server Subscription Edition (pre-build 16.0.19725.20280), SharePoint Server 2019 (pre-build 16.0.10417.20128), and SharePoint Enterprise Server 2016 (pre-build 16.0.5552.1002). An attacker with the lowest meaningful permission level — Site Member (the standard contributor role) — can send a crafted HTTP request containing a malicious serialized .NET payload to a SharePoint handler. The server's worker process (w3wp.exe) deserializes it via BinaryFormatter without proper type filtering, executing arbitrary code as the IIS application pool identity. SharePoint Online (Microsoft 365) is not affected.
Microsoft's vendor severity of HIGH (8.8) was already generous for a bug they initially tagged *Exploitation Less Likely*. Reality has blown past that assessment. CISA added CVE-2026-45659 to the KEV catalog on July 1, 2026, and by August 11, 2026, confirmed ransomware groups — specifically Storm-2603 deploying Warlock ransomware — are actively exploiting it. There are 14+ public PoC repositories on GitHub. Resecurity documented a full chain from a single web request to domain compromise in under a week. The vendor's 8.8 underweights the operational reality: proven ransomware exploitation, trivially obtainable prerequisites, and a blast radius that extends from SharePoint through SQL Server to Active Directory.
6 steps from start to impact.
Obtain Site Member credentials
- Valid SharePoint Site Member (contributor) credentials
- Network access to SharePoint server (internal or internet-facing)
- Requires at least one compromised or provisioned credential
- Organizations with MFA on SharePoint reduce credential-stuffing success
Deliver serialized .NET payload to deserialization sink
/_layouts/15/ToolPane.aspx, /_trust/default.aspx, or /_vti_bin/*.asmx. The server's BinaryFormatter deserializes the payload without type allow-listing. Multiple public PoCs automate this step, including the mistbarbarianspot/CVE-2026-45659-SharePoint-RCE and WismanSec/sharepoint-2026-poc GitHub repositories.- Authenticated session with Site Member permissions
- Reachability to vulnerable endpoint
- AMSI integration (if enabled) may flag known gadget signatures:
Exploit:Script/ToolPaneAuthBypass.Aand.C - WAF rules inspecting POST body for .NET serialization magic bytes (AAEAAAD///) can block known payloads
Exploit:Script/ToolPaneAuthBypass.A and .C; HTTP POST to /_layouts/15/ToolPane.aspx?DisplayMode=Edit with unusual body size.Achieve RCE as IIS application pool identity
w3wp.exe, executing arbitrary commands as the SharePoint application pool identity. This account typically holds dbcreator and securityadmin SQL Server roles and db_owner on all SharePoint content and configuration databases. The attacker now has code execution on the SharePoint web front-end server.- Successful deserialization without AMSI/type-filter interception
- Defender for Endpoint / EDR on the server may detect anomalous w3wp.exe child processes (cmd.exe, powershell.exe, csc.exe)
w3wp.exe spawning cmd.exe, powershell.exe, or csc.exe; Sysmon Event ID 1 with parent image matching w3wp.Deploy web shell and steal ASP.NET machine keys
TEMPLATE\LAYOUTS\ or _layouts\ directories and uses .NET reflection to extract validationKey and decryptionKey from web.config. These machine keys enable ViewState forgery — the attacker can craft authenticated requests to any SharePoint endpoint without credentials, surviving credential rotation and even patching if keys are not rotated.- Code execution on web front-end
- Write access to IIS content directories
- File integrity monitoring (FIM) on LAYOUTS directories can detect new .aspx drops
- IIS module auditing (Event ID 29) flags unauthorized additions
C:\Program Files\Common Files\Microsoft Shared\Web Server Extensions\16\TEMPLATE\LAYOUTS\; modifications to applicationHost.config; Event ID 29 and 2282 in IIS logs.Lateral movement to SQL Server and Active Directory
- Farm service account credentials or token
- SQL Server reachable from web front-end
- Network segmentation between web tier and SQL tier reduces lateral movement
- Credential guard / LSASS protection on SharePoint servers limits credential theft
Ransomware deployment (Warlock)
- Domain-level or broad network access achieved
- C2 infrastructure operational
- EDR with ransomware canary files may detect encryption activity
- Network detection of AK47 DNS-based C2 beaconing
validationKey and decryptionKey from web.config to forge ViewState payloads. Patching alone does not invalidate stolen keys. After patching, regenerate machine keys on every web front-end server. This breaks any attacker persistence via ViewState forgery. Deploy within 3 days alongside patching. Without this step, a pre-patch compromise remains active.TEMPLATE\LAYOUTS\ and native IIS modules in applicationHost.config. Run a file integrity check against known-good baselines. Look for new .aspx, .dll, or .js files. Check applicationHost.config for unauthorized global modules. If any are found, treat the server as compromised and initiate IR. Do this within 3 days as part of compromise assessment.Exploit:Script/ToolPaneAuthBypass.A and .C) detect known exploitation payloads. Additionally, configure EDR to alert on w3wp.exe spawning cmd.exe, powershell.exe, csc.exe, or any unexpected child processes. This provides detection-in-depth but does not prevent novel gadget chains. Deploy within 3 days.- Network-level IP allowlisting alone — Storm-2603 uses compromised credentials from inside the organization or via VPN. If the attacker is already on the internal network (post-phishing), IP restrictions on the SharePoint server's network segment do not help unless they segment the web tier from all user VLANs.
- Patching without machine key rotation — the most dangerous false sense of security. If the attacker exfiltrated machine keys before the patch, they retain persistent access via ViewState forgery. CISA and Resecurity both emphasize this point explicitly.
- WAF signature-only approach — while WAF rules can block known serialization magic bytes (
AAEAAAD///), ysoserial.net supports multiple formatter types and encoding variations. A determined attacker will bypass static signatures. WAF is defense-in-depth, not a standalone mitigation. - Disabling the /_layouts/15/ToolPane.aspx endpoint — while this is one known attack surface, the deserialization sink exists in multiple endpoints (
/_trust/default.aspx,/_vti_bin/*.asmx,/_api/). Disabling a single endpoint does not remediate the underlying vulnerability.
The supporting signals.
| In-the-Wild Exploitation | Confirmed active. CISA KEV-listed July 1, 2026. CISA updated August 11, 2026 to confirm ransomware exploitation by Storm-2603 (Warlock/GOLD SALEM). Resecurity published full domain-compromise chain analysis (*Operation FarmKey*). At least 148 organizations compromised in related SharePoint campaigns. |
|---|---|
| Proof-of-Concept | 14+ public PoC repositories on GitHub, including mistbarbarianspot/CVE-2026-45659-SharePoint-RCE (Python-based), WismanSec/sharepoint-2026-poc (documents /_trust BinaryFormatter sink), and SecureWithUmer/CVE-2026-PoCs. Weaponized tooling via ysoserial.net gadget chains is well-documented. |
| EPSS Score | 0.027 (2.7%) — 85th percentile per Rapid7. Note: EPSS lags observed exploitation; the KEV listing and ransomware confirmation are far more reliable signals here. |
| KEV Status | Listed: July 1, 2026. Ransomware use confirmed: August 11, 2026. FCEB remediation deadline was July 4, 2026 per BOD 26-04. |
| CVSS Vector | CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H — Network-accessible, low complexity, low privilege required (Site Member), no user interaction. The PR:L is the sole gating factor; all impact metrics are High. |
| Affected Versions | SharePoint Server Subscription Edition (all builds before 16.0.19725.20280), Server 2019 (before 16.0.10417.20128), Enterprise Server 2016 (before 16.0.5552.1002). SharePoint Online (M365) is not affected. |
| Fixed Versions | KB5002863 (Subscription Edition, build 16.0.19725.20280), KB5002870 (Server 2019, build 16.0.10417.20128), KB5002868 (Server 2016, build 16.0.5552.1002). Released May 12, 2026; advisory published May 21, 2026. |
| Scanning / Exposure | Shodan/Censys show ~30,000 hosts answering as SharePoint; ~3,300 confirmed self-hosted on-premises instances internet-facing. CISA reported 1,300+ unpatched internet-facing SharePoint servers as of July 2026. Internal deployments represent a significantly larger population not visible to internet scanning. |
| Disclosure Timeline | Patched May 12, 2026 (Patch Tuesday). Advisory published May 21-22, 2026. Microsoft initially assessed *Exploitation Less Likely*. KEV-listed July 1, 2026. Ransomware confirmed August 11, 2026. |
| Threat Actor | Storm-2603 (aka GOLD SALEM / Warlock Group) — suspected China-linked financially motivated actor. Uses AK47 C2 framework (HTTP + DNS clients), Warlock ransomware, DLL search-order hijacking, and ASP.NET machine key theft for persistence. Previously ran the ToolShell SharePoint campaign (CVE-2025-49704/49706) in July 2025. |
Sources.
- SecureLayer7 — CVE-2026-45659 Technical Analysis
- The Hacker News — SharePoint RCE Added to CISA KEV
- Resecurity — From Web Request to Domain Compromise
- Tenable — SharePoint CVEs FAQ
- Rapid7 — CVE-2026-45659 Vulnerability Database
- Hard2bit — CVE-2026-45659 and Storm-2603 Warlock Ransomware
- CISA — Known Exploited Vulnerabilities Catalog
- SecurityWeek — CISA Warns of Actively Exploited SharePoint Vulnerability
Why this verdict
- Active ransomware exploitation eliminates theoretical risk: Storm-2603 is actively deploying Warlock ransomware via this CVE. CISA confirmed ransomware use on August 11, 2026. This is not a speculative chain — it is a documented, repeating campaign with 148+ known victim organizations.
- Authentication bar is paper-thin: The PR:L requirement (Site Member) is the lowest meaningful SharePoint permission. Most organizations have hundreds to thousands of users at this level. Storm-2603 sources credentials from initial access brokers and phishing — a well-established, commodity capability. Guest/external sharing further lowers the bar. This prerequisite adds negligible real-world friction.
- 14+ public PoCs collapse the attacker skill requirement: Multiple GitHub repositories provide ready-to-use Python exploit scripts and ysoserial.net gadget chain configurations. The barrier to exploitation has dropped from 'nation-state tooling' to 'script kiddie with a GitHub account.'
- Role multiplier: SharePoint Server on-premises is canonically a high-value-role component. It stores enterprise documents (HR, legal, financial, IP), integrates deeply with Active Directory, and the farm service account holds SQL Server dbcreator/securityadmin roles with db_owner on all SharePoint databases. Resecurity documented the full chain from web request → RCE → machine key theft → SQL pivot → domain compromise in under a week. ≥80% of on-prem SharePoint installs are production deployments (the product is too expensive and complex to run casually). The blast radius is domain-scale: DA, full SQL access, and ransomware deployment across the fleet. Per the floor rule, a canonically high-value component with proven domain-takeover outcome → verdict floor is CRITICAL.
- Persistence survives patching: Machine key theft enables ViewState forgery that persists even after the vulnerability is patched. IIS native module persistence survives reboots. Organizations that patched but did not rotate machine keys and audit IIS modules remain compromised. This elevates urgency beyond a simple patch-and-forget scenario.
- Microsoft's own assessment was wrong: The initial *Exploitation Less Likely* tag proved catastrophically incorrect within weeks. The vendor 8.8 HIGH baseline underweights the operational reality of confirmed ransomware exploitation and domain-compromise chains.
Why not higher?
A 9.1 already sits at the top of the CRITICAL range. The single factor preventing a 10.0 is the authentication requirement — while trivially overcome in practice, it is still a real prerequisite that eliminates fully unauthenticated, wormable exploitation. The scope metric remains Unchanged (S:U) per the CVSS vector, and the initial foothold is constrained to the SharePoint web front-end before lateral movement extends it.
Why not lower?
Downgrading below CRITICAL would require ignoring three converging signals: confirmed ransomware exploitation (KEV + CISA ransomware flag), 14+ public PoCs, and a documented domain-compromise chain. The authentication prerequisite is the only friction point, and it has been demonstrably overcome by Storm-2603 at scale (148+ orgs). SharePoint Server is a canonical high-value component — the floor rule mandates CRITICAL when ≥10% of installs occupy a high-value role with proven domain-takeover outcome. Approximately 3,300 internet-facing instances are directly exposed; the internal attack surface is far larger.
Crowdsourced verification payload.
Run this script on each SharePoint server (all WFE and application servers in the farm) as a local administrator. Execute: powershell -ExecutionPolicy Bypass -File .\Check-CVE202645659.ps1. The script checks the installed SharePoint build number against the patched versions and reports VULNERABLE, PATCHED, or UNKNOWN.
#!/usr/bin/env powershell
# Check-CVE202645659.ps1
# Verifies whether SharePoint Server is patched against CVE-2026-45659
# Run on each SharePoint server as local admin
# Exit codes: 1 = VULNERABLE, 0 = PATCHED, 2 = UNKNOWN
$ErrorActionPreference = 'Stop'
# Patched build numbers per version
$patchedBuilds = @{
# SharePoint Server Subscription Edition
'16.0.19725.20280' = 'Subscription Edition'
# SharePoint Server 2019
'16.0.10417.20128' = 'Server 2019'
# SharePoint Enterprise Server 2016
'16.0.5552.1002' = 'Enterprise Server 2016'
}
# Version range identifiers
$versionRanges = @{
'Subscription Edition' = @{ MajorBuild = 19000; PatchedBuild = 19725; PatchedRevision = 20280 }
'Server 2019' = @{ MajorBuild = 10000; PatchedBuild = 10417; PatchedRevision = 20128 }
'Enterprise Server 2016' = @{ MajorBuild = 4000; PatchedBuild = 5552; PatchedRevision = 1002 }
}
try {
# Check if SharePoint is installed via registry
$spKey = Get-ItemProperty -Path 'HKLM:\SOFTWARE\Microsoft\Shared Tools\Web Server Extensions\16.0' -Name 'Location' -ErrorAction SilentlyContinue
if (-not $spKey) {
Write-Host '[UNKNOWN] SharePoint Server 16.x not detected on this host.'
exit 2
}
# Get SharePoint build from installed products
$farm = $null
try {
Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue
$farm = Get-SPFarm -ErrorAction SilentlyContinue
} catch { }
if ($farm) {
$buildVersion = $farm.BuildVersion
$build = $buildVersion.Build
$revision = $buildVersion.Revision
$fullVersion = "$($buildVersion.Major).$($buildVersion.Minor).$build.$revision"
Write-Host "Detected SharePoint farm build: $fullVersion"
} else {
# Fallback: check file version of Microsoft.SharePoint.dll
$spDll = Join-Path $spKey.Location 'ISAPI\Microsoft.SharePoint.dll'
if (Test-Path $spDll) {
$fileVer = (Get-Item $spDll).VersionInfo.FileVersion
$parts = $fileVer.Split('.')
$build = [int]$parts[2]
$revision = [int]$parts[3]
$fullVersion = $fileVer
Write-Host "Detected SharePoint DLL version: $fullVersion"
} else {
Write-Host '[UNKNOWN] SharePoint installation detected but cannot determine build version.'
exit 2
}
}
# Determine which version range we're in and check patch status
$identified = $false
foreach ($ver in $versionRanges.GetEnumerator()) {
$range = $ver.Value
if ($build -ge $range.MajorBuild) {
$identified = $true
$versionName = $ver.Key
if ($build -gt $range.PatchedBuild) {
Write-Host "[PATCHED] SharePoint $versionName build $fullVersion is newer than patched build. CVE-2026-45659 is remediated."
exit 0
} elseif ($build -eq $range.PatchedBuild -and $revision -ge $range.PatchedRevision) {
Write-Host "[PATCHED] SharePoint $versionName build $fullVersion meets or exceeds the patched version. CVE-2026-45659 is remediated."
exit 0
} else {
Write-Host "[VULNERABLE] SharePoint $versionName build $fullVersion is BELOW the patched version. CVE-2026-45659 is NOT remediated."
Write-Host "Required: build $($range.PatchedBuild) revision $($range.PatchedRevision) or later."
Write-Host "Apply KB5002863 (SE), KB5002870 (2019), or KB5002868 (2016) immediately."
exit 1
}
}
}
if (-not $identified) {
Write-Host "[UNKNOWN] SharePoint build $fullVersion does not match known version ranges."
exit 2
}
} catch {
Write-Host "[UNKNOWN] Error during check: $($_.Exception.Message)"
exit 2
}