← Back to Feed CACHED · 2026-09-23 04:30:06 · CACHE_KEY CVE-2026-65660
CVE-2026-65660 · CWE-94 · Disclosed 2026-08-11

Improper control of generation of code

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

Someone left the vault door accepting any quote character as a valid PIN, and the vault sits next to the domain controller

CVE-2026-65660 is a code-injection flaw in how Microsoft SharePoint Server's ToolPane component rebuilds ASP.NET Register directives from web-part markup. When writing attribute values, SharePoint wraps them in double quotes without escaping embedded quotes, letting an attacker splice in a second Register directive that references an arbitrary .NET class. Because the SafeControls allowlist check runs against the *first* directive only, the injected class loads unchecked. From there the attacker calls XamlServices.Parse() with an ObjectDataProvider gadget chain to achieve full code execution inside the w3wp.exe worker process. The working exploit — including an in-memory webshell that leaves no disk artifacts — was published by Dinh Ho Anh Khoa of Viettel Cyber Security on September 22, 2026. Affected products are SharePoint Server 2016, 2019, and Subscription Edition; SharePoint 2013 is also vulnerable but end-of-life with no patch. SharePoint Online (Microsoft 365) is not affected.

Microsoft initially scored this CVE at 6.5 as a spoofing flaw — a dramatic under-call. The NVD scored it 8.8 (HIGH) with full C/I/A impact, and Microsoft silently updated its own CVE record on September 11 to title it a Remote Code Execution vulnerability. The NVD HIGH rating is fair for the *standalone* bug: it requires authentication (PR:L), but in a typical enterprise that means any of thousands of SharePoint users. When you layer in the domain-compromise blast radius (farm service account → AD credential extraction → DC pivot) and the pre-auth chain via CVE-2026-55040 (JWT bypass, patched July 2026), the effective risk for unpatched on-prem farms is at least HIGH and arguably tipping into CRITICAL territory. We hold at HIGH 8.0 because the auth requirement provides real — if thin — friction, and no in-the-wild exploitation has been confirmed yet.

"Any SharePoint user can inject code into the server. PoC is public. Domain compromise is the endgame."
02 · The Attack Path

6 steps from start to impact.

STEP 01

Obtain authenticated SharePoint access

The attacker needs any valid SharePoint account with at least read-level site permissions. In most enterprises, thousands of employees have SharePoint access through SSO, NTLM, or federated identity. Alternatively, the attacker chains CVE-2026-55040 (JWT authentication bypass, CVSS 9.1, KEV-listed) to skip authentication entirely on farms that allow anonymous page access and lack the July 2026 patch.
Conditions required:
  • Valid SharePoint user credentials or active session
  • Network access to the SharePoint web application front-end
Where this breaks in practice:
  • Requires credential theft, phishing, or insider access for the standalone chain
  • CVE-2026-55040 pre-auth chain requires the July 2026 patch to be missing AND anonymous access enabled
Detection/coverage: Failed authentication attempts in SharePoint ULS logs and Windows Security event log (Event ID 4625). CVE-2026-55040 exploitation visible as anomalous JWT tokens in IIS request logs.
STEP 02

Submit malicious web-part markup to ToolPane endpoint

The attacker sends a single POST request to /_layouts/15/AddGallery.aspx?DisplayMode=Edit&a=/ToolPane.aspx. The MSOTlPn_DWP parameter contains crafted web-part markup with Register directives that include unescaped double quotes. No special tooling is needed — curl or a browser suffices. The published PoC provides the exact payload.
Conditions required:
  • Authenticated session to SharePoint (Step 1)
  • Access to /_layouts/15/ endpoints (default for all authenticated users)
Where this breaks in practice:
  • WAF rules inspecting POST bodies for Register directive injection patterns could block this
  • IPS signatures matching the specific payload structure
Detection/coverage: WAF or IDS rules matching Register directive patterns in POST request bodies to ToolPane endpoints. SharePoint ULS logs record the request but do not flag it as malicious by default.
STEP 03

Bypass SafeControls allowlist via quote injection

SharePoint's ToolPane component reconstructs Register directives by writing attribute values between double quotes without escaping embedded quotes. The attacker's payload includes a closing quote followed by a second Register directive that references an attacker-controlled .NET class. The SafeControls type check validates the first (benign) directive, but the injected second directive loads after validation has completed. This is CWE-94: improper code generation.
Conditions required:
  • Unpatched SharePoint server (pre-August 11, 2026 CU)
Where this breaks in practice:
  • The August 2026 patch turns off the vulnerable function entirely, eliminating this code path
STEP 04

Achieve code execution via XAML deserialization

The injected Register directive loads a class that invokes XamlServices.Parse() with attacker-controlled XAML. The XAML document contains ObjectDataProvider gadgets — a well-known .NET deserialization pattern from the ysoserial.net toolkit. The deserialization instantiates objects with attacker-specified method names and parameters, executing arbitrary code within the w3wp.exe worker process under the application pool identity.
Conditions required:
  • Successful SafeControls bypass (Step 3)
Where this breaks in practice:
  • .NET AMSI integration may inspect the XAML payload in newer .NET versions
  • EDR agents with deserialization-specific telemetry could flag XamlServices.Parse calls
Detection/coverage: EDR solutions monitoring w3wp.exe for XamlServices.Parse() invocations. .NET ETW providers (Microsoft-Windows-DotNETRuntime) can log deserialization events. Sysmon Event ID 7 for suspicious DLL loads in w3wp.exe.
STEP 05

Deploy in-memory webshell

The published exploit deploys a reflective webshell entirely in w3wp.exe process memory. It avoids disk writes and registry modifications that would trigger file-integrity monitoring or antivirus. The webshell runs with the privileges of the SharePoint application pool identity — typically the farm service account, which holds elevated privileges in Active Directory by default.
Conditions required:
  • Successful code execution (Step 4)
Where this breaks in practice:
  • Advanced EDR with in-memory scanning (e.g., MDATP kernel-mode memory scanning) may detect the injected code
  • Process behavior monitoring can flag unusual w3wp.exe activity such as spawning cmd.exe or powershell.exe
Detection/coverage: EDR monitoring w3wp.exe for anomalous child processes (cmd.exe, powershell.exe, net.exe, certutil.exe). Memory-scanning EDR features. Sysmon Event ID 1 for process creation under w3wp.exe parent.
STEP 06

Pivot from SharePoint to domain compromise

The farm service account typically holds elevated AD privileges including database access and, in poorly configured environments, Domain Admin membership. The attacker extracts machine keys (validationKey, decryptionKey) from web.config, dumps credentials from the SharePoint config database, and uses the service account's Kerberos TGT to pivot to domain controllers. Resecurity documented this exact path in their July 2026 SharePoint attack analysis, demonstrating web request to full domain compromise.
Conditions required:
  • Webshell access on SharePoint server (Step 5)
  • Farm service account with AD privileges (common default configuration)
Where this breaks in practice:
  • Least-privilege farm service accounts limit lateral movement scope
  • Network segmentation between SharePoint tier and domain controllers can slow the pivot
  • Credential Guard on the SharePoint server prevents some credential theft techniques
Detection/coverage: Anomalous LDAP and Kerberos traffic originating from the SharePoint server to domain controllers. DCSync detection via Event ID 4662 (Directory Service Access). Lateral movement detections in EDR and NDR platforms. Sentinel/Splunk rules for service account anomalous logon patterns.
03 · Intelligence Metadata

The supporting signals.

In-the-wild exploitationNo confirmed exploitation as of September 23, 2026. Microsoft rates exploitability as Less Likely. However, a complete working exploit was published September 22 — exploitation is now imminent. Historical precedent: CVE-2026-45659 and CVE-2026-32201 were weaponized by threat actors within days of PoC release.
Proof of conceptPublic and weaponized. Published by Dinh Ho Anh Khoa (Viettel Cyber Security) on September 22, 2026. Full exploit markup targeting /_layouts/15/AddGallery.aspx ToolPane endpoint with in-memory webshell payload. Researcher previously won Pwn2Own Berlin 2025 for SharePoint chains (CVE-2025-53770/53771). Confirmed operational in penetration testing engagements.
EPSS score0.00807 (0.807%) — approximately top 15th percentile. Expected to rise significantly following PoC publication on September 22.
KEV statusNot listed in CISA Known Exploited Vulnerabilities catalog as of September 23, 2026. However, CISA issued a SharePoint hardening advisory on July 14, 2026 for related SharePoint CVEs.
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, no user interaction, unchanged scope, full confidentiality/integrity/availability impact. The PR:L (low privilege) means any authenticated SharePoint user.
Affected versionsSharePoint Server 2016, 2019, and Subscription Edition (on-premises only). SharePoint 2013 is also affected but reached end of life April 2023 — no patch available. SharePoint Online (Microsoft 365) is not affected.
Fixed versionsAugust 11, 2026 Patch Tuesday: KB5002905 (SP2016), KB5002894 (SP2019), KB5002893 (SPSE). SPSE patched build: >= 16.0.19725.20522. Also apply the July 2026 patch for CVE-2026-55040 to block the pre-authentication chain.
Internet exposureShodan indexes ~30,000 internet-facing SharePoint hosts globally; ~3,300 are self-hosted on-premises deployments. Shadowserver reports 10,000+ publicly reachable SharePoint instances. These figures represent the externally-exposed subset; the majority of on-prem SharePoint farms sit behind corporate firewalls.
Disclosure timelineAugust 11, 2026: Patch released (initially classified as spoofing, CVSS 6.5). September 11: Microsoft silently updated CVE record to title it RCE and raise to CVSS 8.8. September 22: Full technical writeup and working exploit published by Viettel Cyber Security.
Chaining potentialChains with CVE-2026-55040 (JWT authentication bypass, CVSS 9.1, patched July 14, KEV-listed August 18) for pre-authentication RCE on farms with anonymous page access that lack the July 2026 patch. Also appears in the same August 2026 mega-patch alongside 40+ other SharePoint CVEs — the attack surface is broad.
04 · The Call

Final Verdict
= UNCHANGED to HIGH (8.0/10)

Why this verdict

  • Public weaponized exploit: Dinh Ho Anh Khoa published a complete working exploit with in-memory webshell on September 22, 2026. The attack is a single POST request requiring no custom tooling beyond curl. This eliminates the complexity barrier.
  • Low authentication friction: PR:L in SharePoint means any employee with a SharePoint site account. In a 10,000-seat enterprise, that is typically 5,000-8,000 users. The authentication requirement provides real but thin friction — it stops mass-automated internet scanning but not targeted attacks by insiders, credential thieves, or phishing victims.
  • Pre-auth chain available: Combining with CVE-2026-55040 (JWT bypass, CVSS 9.1, patched July 2026, KEV-listed) yields unauthenticated RCE on farms allowing anonymous page access. Farms missing the July 2026 patch face a pre-auth RCE chain. This chain elevates the effective severity beyond what PR:L alone would imply.
  • Role multiplier: SharePoint Server is canonically a high-value-role component. Every on-premises deployment is deeply integrated with Active Directory and holds sensitive corporate documents. The farm service account typically holds elevated AD privileges. The documented chain (Resecurity, July 2026) runs: web request → code execution as farm service account → machine key and credential extraction → AD pivot → domain controller compromise. Blast radius is domain-scale. This chain succeeds in the canonical deployment role (>90% of on-prem SharePoint installs serve as the primary document management and collaboration platform with AD integration). The verdict floor is HIGH.
  • On-premises-only limitation (minor downward adjustment): SharePoint Online (Microsoft 365) is not affected, narrowing the vulnerable population to on-premises deployments. However, enterprises still running on-prem SharePoint in 2026 tend to be large organizations with significant AD footprints — the very targets where domain compromise matters most.
  • No confirmed wild exploitation yet (minor downward adjustment): EPSS is 0.807% and the CVE is not KEV-listed. The PoC is < 48 hours old. This is a timing gap, not a structural barrier. Downgrade from 8.8 to 8.0 is appropriate to reflect the current exploitation status, but not below HIGH given the role floor.

Why not higher?

Upgrading to CRITICAL would require either confirmed active exploitation, a pre-auth vector as the *primary* path, or zero friction in the default configuration. The standalone chain requires authentication (PR:L), which stops mass automated exploitation. No confirmed in-the-wild exploitation exists as of September 23, 2026. The pre-auth chain via CVE-2026-55040 is a separate CVE that was patched in July and is KEV-listed — many enterprises have already remediated it, reducing the pre-auth population.

Why not lower?

The public weaponized PoC, domain-scale blast radius via the farm-service-account-to-AD-pivot chain, and the availability of a pre-auth bypass chain (CVE-2026-55040) set a firm HIGH floor. SharePoint Server is a canonically high-value component — every on-premises deployment sits adjacent to Active Directory and sensitive document stores. Downgrading below HIGH would ignore the proven SharePoint-to-domain-compromise attack path documented in multiple 2026 incidents (Resecurity, CISA advisory).

05 · Compensating Control

What to do — in priority order.

  1. Apply August 2026 CU immediately on internet-facing farms — Install KB5002905 (SP2016), KB5002894 (SP2019), or KB5002893 (SPSE) on any SharePoint farm reachable from the internet. For a HIGH verdict, the noisgate mitigation SLA is 30 days, but internet-facing farms with a public PoC should be treated as emergency — deploy within days.
  2. Verify July 2026 patch for CVE-2026-55040 is applied — The July 2026 patch (KB5002891 for SP2016) closes the JWT authentication bypass that enables the pre-auth RCE chain. Without it, CVE-2026-65660 becomes unauthenticated. Confirm this is applied before the August CU.
  3. Block or restrict ToolPane endpoints at the WAF or reverse proxy — Add WAF rules to block or alert on POST requests to /_layouts/15/AddGallery.aspx and /_layouts/15/ToolPane.aspx containing Register directives in the request body. This breaks the exploit delivery path without affecting normal SharePoint usage for most organizations. Deploy within 30 days per noisgate mitigation SLA for HIGH.
  4. Audit and reduce farm service account privileges — The blast radius depends on the farm service account having elevated AD privileges. Remove the account from Domain Admins and Administrators groups. Configure it with minimum required permissions per Microsoft's least-privilege guidance. This limits the Step 6 domain-compromise pivot even if code execution succeeds.
  5. Enable EDR monitoring for w3wp.exe anomalies — Configure your EDR to alert on w3wp.exe spawning child processes (cmd.exe, powershell.exe, net.exe, certutil.exe, whoami.exe). Also enable .NET ETW tracing for XamlServices.Parse() calls in the SharePoint application pool. This provides detection coverage for Steps 4-5 of the attack chain.
  6. Disable anonymous access on all SharePoint web applications — Removes the precondition for the pre-auth chain via CVE-2026-55040. Review each web application's authentication settings in Central Administration and ensure anonymous access is disabled unless explicitly required and risk-accepted.
What doesn't work
  • Network segmentation alone — SharePoint must be reachable by its user population, which is the same population that can exploit this flaw. Segmentation helps slow the Step 6 lateral movement to DCs but does not prevent the initial code execution.
  • MFA on SharePoint authentication — Prevents unauthorized login but does not help when the attacker IS a legitimate authenticated user (insider threat) or has completed MFA via session hijacking or token theft.
  • File-based antivirus scanning — The exploit deploys an in-memory webshell that never touches disk. Traditional AV file scanning will not detect the payload. Only EDR with in-memory scanning or behavioral detection is effective.
  • SharePoint site-level permissions — The vulnerable ToolPane endpoints are in /_layouts/15/ which is accessible to any authenticated user regardless of site-level permissions. Restricting site access does not block exploitation.
06 · Verification

Crowdsourced verification payload.

Run this script on each SharePoint server in the farm as a local administrator. It checks the SharePoint DLL build version (for Subscription Edition) and installed KBs (for SP2016/SP2019) to determine patch status. Example: .\Check-CVE-2026-65660.ps1. Note: SharePoint CU patches may not always appear in Get-HotFix; if the script returns VULNERABLE but you believe the patch is installed, cross-reference the SPSE build threshold (>= 16.0.19725.20522) manually via (Get-SPFarm).BuildVersion.

noisgate-verify.ps1
POWERSHELLREAD-ONLYSAFE
# CVE-2026-65660 Patch Check - Microsoft SharePoint Server
# Run on each SharePoint server as local administrator.
# Exit codes: 0=PATCHED  1=VULNERABLE  2=UNKNOWN
param()
$ErrorActionPreference = 'Stop'
try {
    $dll = $null
    foreach ($v in '16.0','15.0') {
        $rk = "HKLM:\SOFTWARE\Microsoft\Shared Tools\Web Server Extensions\$v"
        if (Test-Path $rk) {
            $loc = (Get-ItemProperty $rk -EA SilentlyContinue).Location
            if ($loc) {
                $candidate = Join-Path $loc 'ISAPI\Microsoft.SharePoint.dll'
                if (Test-Path $candidate) { $dll = $candidate; break }
            }
        }
    }
    if (-not $dll) { Write-Host 'UNKNOWN - SharePoint not installed on this host.'; exit 2 }
    $ver = [version](Get-Item $dll).VersionInfo.FileVersion
    Write-Host "SharePoint DLL version: $ver"
    if ($ver.Major -eq 15) {
        Write-Host 'VULNERABLE - SharePoint 2013 is end-of-life. No patch available.'
        exit 1
    }
    if ($ver.Major -ne 16) { Write-Host "UNKNOWN - Unexpected version $ver"; exit 2 }
    # SharePoint Subscription Edition: patched at build 16.0.19725.20522+
    if ($ver -ge [version]'16.0.19725.20522') {
        Write-Host 'PATCHED - SharePoint SE build meets August 2026 CU threshold.'
        exit 0
    }
    # For SP2016 and SP2019, check for the specific August 2026 KB
    $edition = if ($ver.Build -lt 10000) { 'SP2016' } else { 'SP2019' }
    $targetKB = if ($edition -eq 'SP2016') { '5002905' } else { '5002894' }
    Write-Host "Edition: $edition - checking for KB$targetKB"
    $found = Get-HotFix -EA SilentlyContinue | Where-Object { $_.HotFixID -match $targetKB }
    if ($found) {
        Write-Host "PATCHED - KB$targetKB is installed."
        exit 0
    }
    Write-Host "VULNERABLE - KB$targetKB not found. Apply the August 2026 security update."
    exit 1
} catch {
    Write-Host "UNKNOWN - Error: $_"
    exit 2
}
07 · Sources

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.