← Back to Feed CACHED · 2026-09-25 16:13:55 · CACHE_KEY CVE-2026-45659
CVE-2026-45659 · CWE-502 · Disclosed 2026-05-22

Microsoft SharePoint Server Deserialization of Untrusted Data Remote Code Execution

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

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.

"Ransomware-weaponized SharePoint deser RCE: auth bar is paper-thin, domain compromise is proven."
02 · The Attack Path

6 steps from start to impact.

STEP 01

Obtain Site Member credentials

The attacker acquires valid SharePoint credentials with at least Site Member (contributor) permissions. Storm-2603 has sourced these from initial access brokers, credential-stuffing leaked databases, and targeted phishing. In organizations with external/guest sharing enabled, the attacker may already have a legitimate guest account. This is the *only* authentication gate in the entire chain.
Conditions required:
  • Valid SharePoint Site Member (contributor) credentials
  • Network access to SharePoint server (internal or internet-facing)
Where this breaks in practice:
  • Requires at least one compromised or provisioned credential
  • Organizations with MFA on SharePoint reduce credential-stuffing success
Detection/coverage: Failed login monitoring; Azure AD / ADFS sign-in anomaly detection; impossible-travel alerts for SharePoint authentication.
STEP 02

Deliver serialized .NET payload to deserialization sink

The attacker crafts a malicious serialized object using ysoserial.net (ObjectDataProvider → Process.Start gadget chain) and submits it via HTTP POST to a vulnerable SharePoint endpoint — likely /_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.
Conditions required:
  • Authenticated session with Site Member permissions
  • Reachability to vulnerable endpoint
Where this breaks in practice:
  • AMSI integration (if enabled) may flag known gadget signatures: Exploit:Script/ToolPaneAuthBypass.A and .C
  • WAF rules inspecting POST body for .NET serialization magic bytes (AAEAAAD///) can block known payloads
Detection/coverage: Tenable plugin coverage available; AMSI signatures Exploit:Script/ToolPaneAuthBypass.A and .C; HTTP POST to /_layouts/15/ToolPane.aspx?DisplayMode=Edit with unusual body size.
STEP 03

Achieve RCE as IIS application pool identity

Deserialization triggers the gadget chain constructors inside 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.
Conditions required:
  • Successful deserialization without AMSI/type-filter interception
Where this breaks in practice:
  • Defender for Endpoint / EDR on the server may detect anomalous w3wp.exe child processes (cmd.exe, powershell.exe, csc.exe)
Detection/coverage: Process ancestry monitoring: w3wp.exe spawning cmd.exe, powershell.exe, or csc.exe; Sysmon Event ID 1 with parent image matching w3wp.
STEP 04

Deploy web shell and steal ASP.NET machine keys

Storm-2603 deploys password-protected ASP.NET web shells to 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.
Conditions required:
  • Code execution on web front-end
  • Write access to IIS content directories
Where this breaks in practice:
  • File integrity monitoring (FIM) on LAYOUTS directories can detect new .aspx drops
  • IIS module auditing (Event ID 29) flags unauthorized additions
Detection/coverage: New .aspx/.dll files in 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.
STEP 05

Lateral movement to SQL Server and Active Directory

Using the farm service account's SQL Server privileges, the attacker queries the SharePoint configuration database for additional service account credentials and connection strings. Constrained delegation relay attacks pivot from the web tier to SQL Server and then to domain controllers. Resecurity documented this full path in their *Operation FarmKey* analysis, showing domain compromise achieved within 3-5 days of initial access.
Conditions required:
  • Farm service account credentials or token
  • SQL Server reachable from web front-end
Where this breaks in practice:
  • Network segmentation between web tier and SQL tier reduces lateral movement
  • Credential guard / LSASS protection on SharePoint servers limits credential theft
Detection/coverage: Unusual SQL connections from w3wp.exe; NTLM relay attempts; anomalous Kerberos TGS requests from SharePoint service accounts to domain controller SPNs.
STEP 06

Ransomware deployment (Warlock)

Storm-2603 uses their AK47 C2 framework (HTTP and DNS-based clients) to stage data in hidden SharePoint document libraries, then deploys Warlock ransomware across the domain. The IIS native module persistence ensures the attacker maintains access even if the initial vulnerability is patched, unless ASP.NET machine keys are rotated and IIS modules are audited.
Conditions required:
  • Domain-level or broad network access achieved
  • C2 infrastructure operational
Where this breaks in practice:
  • EDR with ransomware canary files may detect encryption activity
  • Network detection of AK47 DNS-based C2 beaconing
Detection/coverage: DNS queries to known AK47 C2 domains; file encryption activity monitored by EDR canaries; mass SMB write operations across multiple hosts.
03 · Compensating Control

1
CRITICAL 9.1→LOW 2.0
SEVERITY REDUCED
Patch immediately — deploy KB5002863/KB5002870/KB5002868 — This is a KEV-listed vulnerability with confirmed ransomware exploitation. Under the noisgate mitigation SLA for CRITICAL, deploy within 3 days. The May 2026 patches are available for all supported versions. Do not wait for a maintenance window — this is an emergency patch. Coordinate with SharePoint farm admins to apply during off-hours if needed, but do not exceed the 3-day window.
2
CRITICAL 9.1→HIGH 7.5
SEVERITY REDUCED
Rotate ASP.NET machine keys on all SharePoint WFE servers — Storm-2603's attack chain steals 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.
3
CRITICAL 9.1→HIGH 7.0
SEVERITY REDUCED
Block or restrict external access to SharePoint Server — Place SharePoint behind a VPN, reverse proxy with pre-authentication, or zero-trust gateway. Remove direct internet exposure. Shodan shows ~3,300 internet-facing on-prem instances — if yours is one of them, this is the single highest-leverage control. Deploy immediately. This eliminates the remote unauthenticated reconnaissance and reduces the attack surface to internal-only, requiring the attacker to already be inside the network.
4
CRITICAL 9.1→MEDIUM 5.5
SEVERITY REDUCED
Audit IIS modules and LAYOUTS directories for unauthorized files — Storm-2603 persists via web shells in 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.
5
CRITICAL 9.1→HIGH 7.0
SEVERITY REDUCED
Enable AMSI integration in SharePoint and monitor w3wp.exe process lineage — Microsoft's AMSI signatures (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.
6
CRITICAL 9.1→HIGH 7.5
SEVERITY REDUCED
Restrict Site Member permissions to minimum necessary users — The exploit requires Site Member (contributor) permissions. Audit all SharePoint site collections and remove unnecessary Site Member grants, especially for external/guest users. Implement just-in-time access where possible. This reduces the credential pool an attacker can target. Deploy within 30 days as an ongoing hygiene measure.
What doesn't work
  • 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.
04 · Intelligence Metadata

The supporting signals.

In-the-Wild ExploitationConfirmed 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-Concept14+ 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 Score0.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 StatusListed: July 1, 2026. Ransomware use confirmed: August 11, 2026. FCEB remediation deadline was July 4, 2026 per BOD 26-04.
CVSS VectorCVSS: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 VersionsSharePoint 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 VersionsKB5002863 (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 / ExposureShodan/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 TimelinePatched 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 ActorStorm-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.

  1. SecureLayer7 — CVE-2026-45659 Technical Analysis
  2. The Hacker News — SharePoint RCE Added to CISA KEV
  3. Resecurity — From Web Request to Domain Compromise
  4. Tenable — SharePoint CVEs FAQ
  5. Rapid7 — CVE-2026-45659 Vulnerability Database
  6. Hard2bit — CVE-2026-45659 and Storm-2603 Warlock Ransomware
  7. CISA — Known Exploited Vulnerabilities Catalog
  8. SecurityWeek — CISA Warns of Actively Exploited SharePoint Vulnerability
05 · The Call

Final Verdict
↑ UPGRADED to CRITICAL (9.1/10)

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.

06 · Verification

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.

noisgate-verify.ps1
POWERSHELLREAD-ONLYSAFE
#!/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
}