Leaving the vault door open and taping a "Do Not Enter" sign over it
CVE-2026-55040 exploits a chain of four distinct flaws in SharePoint's SPJsonWebSecurityTokenHandlerV2.ValidateToken() JWT processing pipeline. The code explicitly sets RequireSignedTokens = false, resolves signing keys via unverified x5t thumbprint headers, accepts tokens from unknown issuers instead of rejecting them, and checks only that a signature string is non-empty — never verifying it cryptographically. An attacker sends a JWT with alg: none, references SharePoint's own STS certificate thumbprint, and supplies a dummy signature like AAAA. SharePoint treats this as a fully authenticated session. All on-premises versions are affected: SharePoint Server Subscription Edition prior to build 16.0.19725.20434, SharePoint Server 2019 prior to build 16.0.10417.20175, and SharePoint Enterprise Server 2016 prior to build 16.0.5561.1001. SharePoint Online (Microsoft 365) is not affected.
Microsoft rated this CRITICAL at 9.1, and for once the vendor severity is dead-on. The CVSS vector (CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N) accurately captures the reality: zero privileges required, zero user interaction, full confidentiality and integrity compromise. The only prerequisite — knowing a target user's UPN or SID — is trivially satisfiable because UPNs follow standard email patterns and SIDs are enumerable from AD or exposed SharePoint endpoints. When chained with CVE-2026-63520 (a .NET unsafe type instantiation in Business Connectivity Services), the auth bypass escalates to full unauthenticated RCE as the SharePoint application pool identity. Rapid7's Stephen Fewer discovered the flaw during Pwn2Own Berlin research, and within 24 hours of his PoC publication on August 11, honeypots recorded exploitation in the wild. CISA KEV-listed it on August 18.
6 steps from start to impact.
Target Discovery
MicrosoftSharePointTeamServices) and /_layouts/15/ paths. Censys reports approximately 329,000 SharePoint instances total, with roughly 21,000 on-prem deployments exposing version information. No credentials or prior access required.- Internet-facing SharePoint on-premises server running SP2016, SP2019, or SPSE
- SharePoint Online (M365) is not affected — only on-prem installs
User Identity Enumeration
[email protected]). SharePoint's People Picker API and user profile endpoints can leak identities. On internal networks, LDAP queries against AD enumerate SIDs directly.- Knowledge of at least one valid UPN or SID for the target SharePoint farm
- UPN is near-zero friction — standard email format is often publicly known or guessable
- SID enumeration requires network access to AD or SharePoint user endpoints
/_api/SP.UserProfiles.PeopleManager requests from unusual source IPsJWT Token Forgery
alg: none, embeds the victim's UPN/SID in claims, references SharePoint's own STS certificate thumbprint in the x5t field, and supplies a dummy signature. SharePoint's broken validation pipeline accepts this as a legitimate authenticated session.- Network access to the SharePoint server's HTTP(S) endpoint
- Public PoC tooling (Python)
- None — fully automated, requires only a URL and a UPN
alg: none in Authorization headers; anomalous bearer token patterns in IIS logsAdmin Impersonation and Data Access
- Successful JWT forgery from Step 3
- Target user has administrative privileges (site collection admin or farm admin)
- If the attacker targets a non-admin user, blast radius is limited to that user's permissions — but admin UPNs are often predictable
RCE Chain via CVE-2026-63520
LobSystem of type DotNetAssembly with System.Web.UI.LosFormatter as the target class. When the attacker registers an external list and queries it, SharePoint's Activator.CreateInstance instantiates the type and invokes LosFormatter.Deserialize with a TypeConfuseDelegate gadget that calls System.Diagnostics.Process.Start(). Result: arbitrary code execution as the SharePoint application pool identity. Tools: VulnCheck PoC.- Authenticated as an admin user (via Step 4)
- Business Connectivity Services enabled (default in most deployments)
- CVE-2026-63520 unpatched (August 2026 patch)
- BCS must be running — disabled in some hardened environments
- Requires a second unpatched CVE (CVE-2026-63520) for RCE
Domain Escalation
- Code execution on the SharePoint server (via Step 5)
- SharePoint app pool runs as a domain service account (standard configuration)
- EDR/AV on the SharePoint server may detect credential harvesting tools
- Constrained delegation may limit lateral movement paths
SPJsonWebSecurityTokenHandlerV2. This is the only complete remediation. Given active exploitation and KEV status, deploy within hours — the noisgate CRITICAL mitigation SLA is 3 days, but KEV override demands immediate action.Get-SPServiceInstance | Where {$_.TypeName -eq "Business Data Connectivity Service"} | Stop-SPServiceInstance to break the CVE-2026-63520 RCE chain. This blocks the escalation from auth bypass to code execution but does not prevent the authentication bypass itself or data access via admin impersonation. Deploy within 3 days per noisgate CRITICAL mitigation SLA.SPAuditMaskType.SecurityChange and SPAuditMaskType.Update auditing. Forward IIS logs and SharePoint ULS logs to SIEM. Alert on JWT tokens with alg: none, authentication from anomalous source IPs, and bulk document access patterns. Detection-only — does not prevent exploitation but enables rapid incident response. Deploy within 3 days per noisgate CRITICAL mitigation SLA.- WAF rules for JWT manipulation — the forged JWT is structurally valid and uses SharePoint's own STS thumbprint; generic JWT signature validation at the WAF layer cannot distinguish forged tokens from legitimate ones because the flaw is in SharePoint's own validation code, not in the token format.
- MFA on SharePoint — the exploit bypasses the entire authentication pipeline including claims-based auth; MFA sits upstream of the JWT token validation and is never evaluated when the attacker presents a forged bearer token directly.
- SharePoint permission hardening — reducing user permissions does not help because the attacker impersonates an existing privileged user; the permissions are inherited from the impersonated identity, and the attacker can target any user including farm administrators.
The supporting signals.
| In-the-wild status | Actively exploited. Exploitation observed in honeypots within 24 hours of PoC publication (Aug 12, 2026). CISA KEV-listed Aug 18, 2026. No public attribution to specific threat actors. Defused confirmed attacks leveraging the Rapid7 PoC. |
|---|---|
| PoC availability | Multiple public PoCs. sfewer-r7/CVE-2026-55040 (Stephen Fewer, Rapid7 — original researcher). l0ggg/CVE-2026-55040 (Python auth header generator). maxprog-svg/CVE-2026-55040-Mass-Exploit (mass exploitation tool). VulnCheck PoC for chained RCE via CVE-2026-63520 (Jonathan Peterson). |
| EPSS | 0.69536 — 69th percentile probability of exploitation within 30 days. Extremely high; consistent with active exploitation and public tooling. |
| KEV status | Listed August 18, 2026. Federal agencies subject to BOD 22-01 remediation deadlines. |
| CVSS vector | CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:N — Network-accessible, low complexity, no privileges, no user interaction. High confidentiality and integrity impact. No availability impact (auth bypass, not DoS). |
| Affected versions | SharePoint Server Subscription Edition < build 16.0.19725.20434. SharePoint Server 2019 < build 16.0.10417.20175. SharePoint Enterprise Server 2016 < build 16.0.5561.1001. SharePoint Online (M365) is not affected. |
| Fixed versions | SPSE: KB5002882 (build 16.0.19725.20434). SP2019: KB5002883 (build 16.0.10417.20175). SP2016: KB5002891 (build 16.0.5561.1001). All shipped July 14, 2026 Patch Tuesday. |
| Exposure data | Censys: ~329,000 total SharePoint instances, ~21,000 on-prem with version info, ~8,500 confirmed internet-facing. Shodan indexes via MicrosoftSharePointTeamServices header and /_layouts/15/ paths. |
| Disclosure date | July 14, 2026. Coordinated disclosure between Rapid7 and Microsoft. Patched same day (July Patch Tuesday). |
| Researcher | Stephen Fewer, Senior Principal Security Researcher at Rapid7. Discovered during Pwn2Own Berlin 2026 research (January–March 2026). |
Sources.
- Rapid7 Technical Analysis: SharePoint JWT Authentication Bypass
- Censys Advisory: CVE-2026-55040 and CVE-2026-63520
- VulnCheck: Exploiting SharePoint RCE Chain
- SecurityWeek: SharePoint Vulnerability Exploited Shortly After PoC Release
- Help Net Security: Attackers exploit critical SharePoint flaw after PoC goes public
- CISA Alert: SharePoint Hardening After New Exploitations
- sfewer-r7/CVE-2026-55040 — Original PoC (GitHub)
- NVD: CVE-2026-55040
Why this verdict
- Zero-friction unauthenticated remote exploit. The attack requires no credentials, no user interaction, and no elevated access. Public PoCs reduce attacker skill to script-kiddie level. The CVSS vector AV:N/AC:L/PR:N/UI:N accurately reflects this — no downward pressure from attack complexity.
- Active exploitation and weaponization. KEV-listed August 18, exploitation confirmed within 24 hours of PoC release, EPSS at 0.695. This is not theoretical — it is operationally exploited. Three independent public PoCs exist including a mass-exploitation tool.
- Role multiplier: SharePoint is a canonically high-value component. SharePoint on-prem is the primary document management and collaboration platform for regulated enterprises. Over 90% of on-prem SharePoint installs serve as the organization's core intranet and document repository. Compromise = mass data exfiltration of corporate documents, PII, financial records. With the CVE-2026-63520 RCE chain, code execution runs as the SharePoint app pool identity — typically a domain service account with Kerberos SPNs — enabling lateral movement and domain compromise. Blast radius: host → tenant → domain → fleet. The floor is CRITICAL because the component is canonically high-value and the chain succeeds with near-zero friction.
Why not higher?
CVSS 9.1 already captures the C:H/I:H reality of full confidentiality and integrity compromise. A score above 9.1 would require Scope Changed (S:C) or Availability impact (A:H), neither of which applies to this specific CVE in isolation — the auth bypass does not crash or deny service to the SharePoint farm. The separate RCE chain (CVE-2026-63520) would justify a higher composite score but is assessed as its own CVE.
Why not lower?
Every prerequisite in the chain is trivially satisfiable. The UPN/SID requirement is not meaningful friction — user identities are routinely discoverable via OSINT, email headers, or SharePoint's own APIs. Internet exposure of ~21,000 on-prem instances ensures a large reachable population. Active exploitation removes any theoretical discount. The RCE chain to domain compromise via CVE-2026-63520 confirms the blast radius extends beyond the SharePoint tier into full domain control. The deployment-role floor for a canonically high-value component with a working unauthenticated chain and domain-scale blast radius is CRITICAL — no friction point in this chain comes close to breaking that floor.
Crowdsourced verification payload.
Run this script on each SharePoint server in the farm from an elevated (Run as Administrator) SharePoint Management Shell. Example: .\Check-CVE202655040.ps1. No network access or external dependencies required — it queries the local farm build version only.
#Requires -RunAsAdministrator
<#
.SYNOPSIS
Checks whether the local SharePoint Server is patched against CVE-2026-55040.
.DESCRIPTION
Queries the SharePoint farm build version via the SharePoint snap-in and compares
against patched build thresholds for SP2016, SP2019, and SPSE.
.OUTPUTS
VULNERABLE | PATCHED | UNKNOWN
.NOTES
Exit codes: 0 = PATCHED, 1 = VULNERABLE, 2 = UNKNOWN
#>
$ErrorActionPreference = 'Stop'
try {
# Load SharePoint PowerShell snap-in if not already loaded
if (-not (Get-PSSnapin -Name Microsoft.SharePoint.PowerShell -ErrorAction SilentlyContinue)) {
Add-PSSnapin Microsoft.SharePoint.PowerShell -ErrorAction Stop
}
$farm = Get-SPFarm -ErrorAction Stop
$bv = $farm.BuildVersion
Write-Host "SharePoint Build Version: $bv"
if ($bv.Major -ne 16) {
Write-Host "UNKNOWN - Unexpected major version: $($bv.Major)"
exit 2
}
$result = 'UNKNOWN'
# SharePoint Server Subscription Edition (build 19xxx)
if ($bv.Build -ge 19000) {
Write-Host 'Product: SharePoint Server Subscription Edition'
# Patched: KB5002882 = build 16.0.19725.20434
if ($bv.Build -gt 19725 -or ($bv.Build -eq 19725 -and $bv.Revision -ge 20434)) {
$result = 'PATCHED'
} else {
$result = 'VULNERABLE'
}
}
# SharePoint Server 2019 (build 10xxx)
elseif ($bv.Build -ge 10000) {
Write-Host 'Product: SharePoint Server 2019'
# Patched: KB5002883 = build 16.0.10417.20175
if ($bv.Build -gt 10417 -or ($bv.Build -eq 10417 -and $bv.Revision -ge 20175)) {
$result = 'PATCHED'
} else {
$result = 'VULNERABLE'
}
}
# SharePoint Enterprise Server 2016 (build 5xxx)
elseif ($bv.Build -ge 5000) {
Write-Host 'Product: SharePoint Enterprise Server 2016'
# Patched: KB5002891 = build 16.0.5561.1001
if ($bv.Build -gt 5561 -or ($bv.Build -eq 5561 -and $bv.Revision -ge 1001)) {
$result = 'PATCHED'
} else {
$result = 'VULNERABLE'
}
}
else {
Write-Host "UNKNOWN - Unrecognized SharePoint build: $bv"
exit 2
}
Write-Host $result
if ($result -eq 'VULNERABLE') { exit 1 }
elseif ($result -eq 'PATCHED') { exit 0 }
else { exit 2 }
}
catch {
Write-Host "UNKNOWN - Error querying SharePoint farm: $_"
exit 2
}