← Back to Feed CACHED · 2026-10-06 18:55:30 · CACHE_KEY CVE-2026-55040
CVE-2026-55040 · CWE-1390 · Disclosed 2026-07-14

Microsoft SharePoint Server JWT Token Authentication Bypass

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

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.

"SharePoint JWT forgery gives unauthenticated admin access — actively exploited, patch immediately"
02 · The Attack Path

6 steps from start to impact.

STEP 01

Target Discovery

Attacker identifies internet-facing SharePoint on-premises servers via Shodan/Censys/FOFA queries for SharePoint-specific HTTP headers (e.g., 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.
Conditions required:
  • Internet-facing SharePoint on-premises server running SP2016, SP2019, or SPSE
Where this breaks in practice:
  • SharePoint Online (M365) is not affected — only on-prem installs
Detection/coverage: Shodan/Censys/FOFA indexing of SharePoint headers; GreyNoise tags for SharePoint reconnaissance scanning
STEP 02

User Identity Enumeration

Attacker obtains a target user's UPN (User Principal Name) or Windows SID. UPNs typically follow the organization's email format (e.g., [email protected]). SharePoint's People Picker API and user profile endpoints can leak identities. On internal networks, LDAP queries against AD enumerate SIDs directly.
Conditions required:
  • Knowledge of at least one valid UPN or SID for the target SharePoint farm
Where this breaks in practice:
  • 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
Detection/coverage: Monitor People Picker and /_api/SP.UserProfiles.PeopleManager requests from unusual source IPs
STEP 03

JWT Token Forgery

Attacker runs the public PoC (sfewer-r7/CVE-2026-55040 or l0ggg/CVE-2026-55040) to forge a JWT. The script fetches the target's STS metadata, sets the outer header to 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.
Conditions required:
  • Network access to the SharePoint server's HTTP(S) endpoint
  • Public PoC tooling (Python)
Where this breaks in practice:
  • None — fully automated, requires only a URL and a UPN
Detection/coverage: IDS signatures for JWT tokens with alg: none in Authorization headers; anomalous bearer token patterns in IIS logs
STEP 04

Admin Impersonation and Data Access

With the forged token, the attacker authenticates as the target user. If the impersonated account is a site collection administrator, the attacker has full read/write access to all document libraries, lists, site settings, and user permissions across the SharePoint farm. Sensitive corporate documents, PII, financial records, and regulatory data are immediately exposed.
Conditions required:
  • Successful JWT forgery from Step 3
  • Target user has administrative privileges (site collection admin or farm admin)
Where this breaks in practice:
  • If the attacker targets a non-admin user, blast radius is limited to that user's permissions — but admin UPNs are often predictable
Detection/coverage: SharePoint audit logs: anomalous admin actions, bulk document downloads, permission changes from new source IPs
STEP 05

RCE Chain via CVE-2026-63520

The attacker uploads a malicious BDCM file to a document library, defining a 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.
Conditions required:
  • Authenticated as an admin user (via Step 4)
  • Business Connectivity Services enabled (default in most deployments)
  • CVE-2026-63520 unpatched (August 2026 patch)
Where this breaks in practice:
  • BCS must be running — disabled in some hardened environments
  • Requires a second unpatched CVE (CVE-2026-63520) for RCE
Detection/coverage: Monitor BDCM file uploads and external list creation events; Sysmon/EDR for child processes spawned by w3wp.exe
STEP 06

Domain Escalation

The SharePoint app pool identity is typically a domain service account with Kerberos SPNs registered in AD. From code execution as this account, the attacker can harvest Kerberos tickets (Rubeus), extract credentials from LSASS (Mimikatz), or abuse constrained/unconstrained delegation trusts to pivot laterally and escalate to domain admin. SharePoint servers are domain-joined Windows hosts running IIS, offering a rich post-exploitation surface.
Conditions required:
  • Code execution on the SharePoint server (via Step 5)
  • SharePoint app pool runs as a domain service account (standard configuration)
Where this breaks in practice:
  • EDR/AV on the SharePoint server may detect credential harvesting tools
  • Constrained delegation may limit lateral movement paths
Detection/coverage: EDR alerts for credential dumping, Kerberos ticket manipulation; AD monitoring for anomalous service account behavior, DCSync attempts
03 · Compensating Control

1
CRITICAL 9.1→IGNORE 0.0
SEVERITY REDUCED
Apply July 2026 patches (KB5002882/KB5002883/KB5002891) — The patches fix the four JWT validation flaws in 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.
2
CRITICAL 9.1→HIGH 7.5
SEVERITY REDUCED
Remove SharePoint from the internet immediately — Block all external access to SharePoint via firewall rules, reverse proxy ACLs, or DNS sinkholing. Place behind VPN or ZTNA. This eliminates the unauthenticated remote attack vector for external adversaries but does not protect against internal threats or compromised hosts. Deploy within hours per noisgate CRITICAL mitigation SLA.
3
CRITICAL 9.1→CRITICAL 8.5
Disable Business Connectivity Services — Run 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.
4
CRITICAL 9.1→CRITICAL 9.1
Enable enhanced SharePoint audit logging and SIEM forwarding — Configure 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.
What doesn't work
  • 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.
04 · Intelligence Metadata

The supporting signals.

In-the-wild statusActively 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 availabilityMultiple 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).
EPSS0.69536 — 69th percentile probability of exploitation within 30 days. Extremely high; consistent with active exploitation and public tooling.
KEV statusListed August 18, 2026. Federal agencies subject to BOD 22-01 remediation deadlines.
CVSS vectorCVSS: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 versionsSharePoint 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 versionsSPSE: 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 dataCensys: ~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 dateJuly 14, 2026. Coordinated disclosure between Rapid7 and Microsoft. Patched same day (July Patch Tuesday).
ResearcherStephen Fewer, Senior Principal Security Researcher at Rapid7. Discovered during Pwn2Own Berlin 2026 research (January–March 2026).

Sources.

  1. Rapid7 Technical Analysis: SharePoint JWT Authentication Bypass
  2. Censys Advisory: CVE-2026-55040 and CVE-2026-63520
  3. VulnCheck: Exploiting SharePoint RCE Chain
  4. SecurityWeek: SharePoint Vulnerability Exploited Shortly After PoC Release
  5. Help Net Security: Attackers exploit critical SharePoint flaw after PoC goes public
  6. CISA Alert: SharePoint Hardening After New Exploitations
  7. sfewer-r7/CVE-2026-55040 — Original PoC (GitHub)
  8. NVD: CVE-2026-55040
05 · The Call

Final Verdict
= UNCHANGED to CRITICAL (9.1/10)

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.

06 · Verification

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.

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