Your patch server just became the adversary's patch server
CVE-2025-59287 is an unauthenticated deserialization flaw in the WSUS GetCookie() endpoint. The service deserializes an attacker-supplied AuthorizationCookie blob with a legacy BinaryFormatter under the WSUS web service running as SYSTEM (or NETWORK SERVICE with SeImpersonate → SYSTEM), so a single HTTP(S) POST to /ClientWebService/Client.asmx on port 8530/TCP (HTTP) or 8531/TCP (HTTPS) yields remote code execution. Affects Windows Server 2012, 2012 R2, 2016, 2019, 2022, 2022 23H2, and 2025 with the WSUS Server Role enabled — every currently-supported Windows Server SKU shipping WSUS is in scope.
Vendor severity is correct and, if anything, understated in operational terms. Microsoft's original October 14 patch was incomplete; the working out-of-band fix landed October 23. Public PoCs from HawkEye, Huntress, and MDSec dropped within 48 hours, EPSS is pinned at 0.9996, and CISA added it to KEV on October 24 with mass exploitation observed by Eye Security, Huntress, and Sophos. WSUS is by definition a fleet-scale trust anchor — this is not a bug you triage, it is a bug you stop what you are doing for.
5 steps from start to impact.
Locate an exposed WSUS server
/ClientWebService/Client.asmx and /ApiRemoting30/WebService.asmx. Shodan and Censys tag WSUS by its distinctive WSDL. nuclei templates and Huntress's public scanner enumerate exposure in seconds.- Network reachability to WSUS ports 8530/8531 or 80/443 hosting the WSUS vroot
- WSUS Server Role installed and running
- WSUS is *supposed* to be internal-only, but Censys counted ~2,500 internet-exposed instances at disclosure
- Segmented environments confine reach to an internal pivot
product:"Microsoft WSUS"; Huntress and Rapid7 released unauthenticated remote checks the week of Oct 23Craft the malicious AuthorizationCookie
.NET BinaryFormatter gadget chain — typically ysoserial.net --formatter BinaryFormatter --gadget TypeConfuseDelegate or ObjectDataProvider — wrapping an OS command. The blob is base64-encoded and stuffed into the EncryptedData field of a SOAP GetCookie request. No credentials, no CSRF token, no client cert required.ysoserial.netor the public MDSec PoC- Ability to send a SOAP POST
- None — this is single-shot, no session state required
<GetCookie> with oversized EncryptedData payload; IIS log entries to /ClientWebService/Client.asmx from unexpected source IPsAchieve SYSTEM RCE on the WSUS host
w3wp.exe under the WsusPool app-pool identity) deserializes the blob and instantiates attacker-controlled types, calling the gadget's Finalize or ProcessStartInfo sink. Because WsusPool runs with SeImpersonatePrivilege, standard PrintSpoofer / GodPotato token-kidnap gets the attacker to NT AUTHORITY\SYSTEM immediately.- Successful step 2
- Application-layer WAF blocking oversized SOAP bodies (rare in front of WSUS)
- AMSI hooks on
w3wp.execatch some PowerShell-based gadgets but not native-command chains
w3wp.exe spawning cmd.exe/powershell.exe/conhost.exe; MDE and CrowdStrike shipped detections within 72hWeaponize the update channel
SUSDB) and target it at OU-scoped computer groups. Every downstream domain member polling WSUS then installs the payload during its next detection cycle — this is the fleet-scale amplifier.- SYSTEM on WSUS
- Downstream clients configured to auto-approve or auto-install
- Environments requiring signed third-party updates via SCUP with an enterprise code-signing cert add a step; most do not enforce this
SUSDB.dbo.tbUpdate; unexpected wuauclt.exe install activity across the fleetPersist and pivot
SUSDB. Attacker dumps LSASS, extracts computer account creds, and coerces authentication to relay against ADCS or LDAPS. Full domain compromise from a single unauthenticated request.- Domain-joined WSUS host
- No LSASS protection / no Credential Guard
- Credential Guard + LSA protection break in-memory dumps
- Tier-0 isolation of WSUS (rare in practice) contains blast radius
/certsrv/certfnsh.aspThe supporting signals.
| In-the-wild status | Mass exploitation confirmed from 2025-10-24 onward — Eye Security, Huntress, and Sophos X-Ops reporting opportunistic scanning + payload drops within hours of PoC release |
|---|---|
| Proof-of-concept | Public PoCs by HawkEye (@HawkEyeSec), MDSec, and Huntress; weaponized in Metasploit exploit/windows/http/wsus_getcookie_deserialize module (PR merged Oct 27, 2025) |
| EPSS | 0.99962 (99.99th percentile) — top-tier probability of exploitation |
| CISA KEV | Listed 2025-10-24, federal remediation due 2025-11-14 |
| CVSS vector | AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H — unauthenticated, network-reachable, no user interaction, full CIA impact |
| Affected versions | Windows Server 2012 / 2012 R2 / 2016 / 2019 / 2022 / 2022 23H2 / 2025 with the WSUS Server Role installed and enabled |
| Fixed builds | Out-of-band update KB5070881 / KB5070882 / KB5070883 / KB5070884 / KB5070885 shipped 2025-10-23 (the initial 2025-10-14 patch was incomplete) |
| Exposure telemetry | Censys: ~2,500 internet-exposed WSUS instances on 8530/8531 as of 2025-10-25; Shodan: ~2,100; GreyNoise tagged >140 unique exploitation source IPs by 2025-10-30 |
| Disclosed | 2025-10-14 (Patch Tuesday); OOB re-patch 2025-10-23 |
| Credit | Reported by MEOW (@_MEOW_) via ZDI; independent discovery by MDSec |
noisgate verdict.
The single most decisive factor is the role multiplier: WSUS is by design a fleet-wide code-distribution trust anchor, and this bug delivers unauthenticated SYSTEM RCE on that anchor. Active KEV-listed mass exploitation with an EPSS of 0.9996 eliminates any argument for downgrade.
Why this verdict
- Unauthenticated network RCE as SYSTEM — no credentials, no user interaction, single SOAP POST. Friction audit: zero prerequisites beyond port reachability.
- Role multiplier — WSUS is a canonical high-value-role component. 100% of installs occupy the update-distribution role by definition. Successful chain ends in arbitrary code push to every domain-joined Windows client polling that WSUS. Floor is CRITICAL; friction cannot pull below.
- KEV-listed with confirmed in-the-wild exploitation starting 2025-10-24 (Eye Security, Huntress, Sophos telemetry). EPSS 0.9996.
- Microsoft's initial Oct 14 patch was incomplete — any org that patched only on Patch Tuesday and stopped there is still vulnerable. This creates a false-sense-of-security population.
- Internal-only deployment does NOT save you — any assumed-breach or phishing beachhead in the corporate LAN reaches WSUS and converts a foothold into fleet takeover.
Why not higher?
9.8 is already the ceiling for network-reachable unauthenticated RCE under CVSS 3.1. There is no CRITICAL+ bucket in this schema.
Why not lower?
Every plausible downgrade lever fails: exploit is trivial, patch adoption is incomplete, exposure is not just external (internal WSUS is the whole point of WSUS), and the blast radius is the entire managed Windows fleet. Downgrading a KEV-listed unauthenticated RCE in a fleet trust anchor would be malpractice.
What to do — in priority order.
- Apply the OOB update KB5070881–KB5070885 immediately — The October 23 out-of-band update is the confirmed fix. The original October 14 update did NOT fully remediate. Deploy within 3 days per the noisgate mitigation SLA — and given active KEV exploitation, treat this as hours, not days.
- Block inbound TCP 8530/8531 at the perimeter and inter-VLAN — Confirm WSUS is not reachable from the internet with
masscan -p8530,8531 <public ranges>. Internally, restrict WSUS ingress to the client subnets that actually poll it via host firewall or NSG rules — no jump-boxes, no DMZ, no admin VLAN if they are not polling clients. - Disable the WSUS Server Role on hosts that don't need it — Any Windows Server with
Install-WindowsFeature UpdateServicesenabled but not actively serving clients is pure attack surface.Uninstall-WindowsFeature UpdateServices -Removeimmediately on unused instances. - Hunt for post-exploitation indicators back to Oct 14 — Query EDR for
w3wp.exe(WsusPool app-pool) spawningcmd.exe,powershell.exe,certutil.exe,bitsadmin.exe, orcurl.exesince 2025-10-14. ReviewSUSDBfor unexpected update approvals intbUpdateApprovaland unfamiliar package hashes intbFile. - Rotate WSUS service-account and computer-account credentials post-patch — Assume-breach mindset: if the host was reachable and unpatched between Oct 14–23, credential material may be compromised. Rotate the WSUS service account, the computer account (netdom resetpwd), and any SQL sysadmin creds tied to SUSDB.
- Requiring authentication on the WSUS vroot in IIS — the vulnerable code path is reached before app-level auth in the WSUS handler pipeline in most tested configurations.
- WAF signatures for BinaryFormatter blobs — the payload is base64 inside a legitimate SOAP field; signatures produce heavy false positives against normal client polling.
- Disabling anonymous authentication — WSUS clients themselves authenticate via computer account, but the vulnerable endpoint accepts the request before that check completes in unpatched builds.
- Relying on the October 14 Patch Tuesday update alone — it was incomplete. Only the October 23 OOB update fully closes the deserialization path.
Crowdsourced verification payload.
Run on each Windows Server with the WSUS role as a local administrator. Invoke: powershell.exe -ExecutionPolicy Bypass -File .\Check-CVE-2025-59287.ps1. It inspects the installed KB list and file version of Microsoft.UpdateServices.WebServices.Client.dll and reports VULNERABLE / PATCHED / UNKNOWN.
#requires -RunAsAdministrator
# Check-CVE-2025-59287.ps1 — WSUS deserialization RCE check
# Exit codes: 0 PATCHED, 1 VULNERABLE, 2 UNKNOWN
$ErrorActionPreference = 'Stop'
# Fixed KBs shipped 2025-10-23 (OOB)
$fixedKBs = @('KB5070881','KB5070882','KB5070883','KB5070884','KB5070885')
# Is the WSUS role installed?
try {
$wsus = Get-WindowsFeature -Name UpdateServices -ErrorAction Stop
if (-not $wsus.Installed) {
Write-Host 'NOT_APPLICABLE: WSUS Server Role not installed'
exit 0
}
} catch {
Write-Host 'UNKNOWN: Get-WindowsFeature failed —' $_.Exception.Message
exit 2
}
# Check installed hotfixes
$installed = Get-HotFix -ErrorAction SilentlyContinue | Select-Object -ExpandProperty HotFixID
$hit = $fixedKBs | Where-Object { $installed -contains $_ }
if ($hit) {
Write-Host "PATCHED: OOB fix present ($hit)"
exit 0
}
# Fallback — inspect assembly version of the WSUS client web service DLL
$dll = Join-Path $env:ProgramFiles 'Update Services\WebServices\ClientWebService\bin\Microsoft.UpdateServices.WebServices.Client.dll'
if (Test-Path $dll) {
$ver = (Get-Item $dll).VersionInfo.FileVersion
Write-Host "DLL version: $ver"
# OOB build strings are 10.0.x with revision >= post-Oct-23 build; treat any missing KB as vulnerable
Write-Host 'VULNERABLE: no fixed KB detected; apply KB5070881–KB5070885 immediately'
exit 1
} else {
Write-Host 'UNKNOWN: WSUS DLL path not found'
exit 2
}
If you remember one thing.
w3wp.exe (WsusPool) → shell activity back to 2025-10-14, audit SUSDB for rogue update approvals, and rotate the WSUS service account plus computer account credentials on the assumption of pre-patch compromise.Sources
What defenders are saying.
Crowdsourced verification outputs.
Results submitted by users who ran the verification payload against their environment.