A nine-year-old skeleton key that still opens SYSTEM shells on any forgotten Windows box with SMBv1 turned on
MS17-010 is the Microsoft bulletin that fixed the SMBv1 flaws leaked by the Shadow Brokers in April 2017 — most famously CVE-2017-0144 (EternalBlue), plus EternalRomance, EternalChampion, and EternalSynergy. The bug is a memory corruption in the SMBv1 srv.sys/srv2.sys transaction handling that a remote, unauthenticated attacker can trigger by sending a crafted packet to TCP/445, yielding kernel-mode RCE as NT AUTHORITY\SYSTEM. Affected versions span every mainstream Windows release from Windows XP / Server 2003 through Windows 10 1607 / Server 2016 prior to the March 2017 patches (KB4012212/KB4012213/KB4012214/KB4012215/KB4012216/KB4012217/KB4012598 and the emergency out-of-band KB4012598 for XP/2003).
Tenable's HIGH rating understates reality. This is the vulnerability that powered WannaCry, NotPetya, Bad Rabbit, EternalRocks, TrickBot lateral movement, and every ransomware crew's post-2017 playbook. CISA KEV-listed since day one of the catalog, EPSS pegged at the ceiling, Metasploit + open-source PoCs everywhere. The real-world verdict is CRITICAL — not because the bug is novel, but because any host still exposing SMBv1 in 2026 is unmanaged, unmonitored, and one probe away from wormed ransomware.
5 steps from start to impact.
Discover SMBv1 listener on TCP/445
NT LM 0.12 (SMBv1). Tooling: nmap --script smb-protocols, nmap --script smb-vuln-ms17-010, crackmapexec smb <range>, or Metasploit's auxiliary/scanner/smb/smb_ms17_010. In 2026 any exposure is almost always a forgotten appliance, embedded device, or legacy manufacturing/OT endpoint.- Network reachability to TCP/445
- Target has SMBv1 enabled and unpatched
- Perimeter firewalls universally block 445 inbound
- Windows 10 1709+ and Server 2019+ ship with SMBv1 disabled by default
- Modern SCCM/Intune baselines rip SMBv1 out
Fingerprint patch state via SMB tree connect anomaly
Trans2 SESSION_SETUP request. Unpatched hosts return STATUS_INSUFF_SERVER_RESOURCES on the crafted transaction; patched hosts return STATUS_NOT_IMPLEMENTED. This is the check Metasploit and Nessus use — cheap, unauthenticated, and reliable.- Successful SMB negotiate from step 1
- Host-based firewall may restrict SMB to specific subnets
- SMB signing does NOT block the check but is a general hardening signal
SID 2024218 (ETERNALBLUE Probe), Zeek smb1-vuln.log, Defender network protection.Exploit EternalBlue against srv.sys pool
Trans2 groom exploit — Shadow Brokers' original Eternalblue-2.2.0.exe, Metasploit exploit/windows/smb/ms17_010_eternalblue, or public Python PoCs (worawit/MS17-010). The overflow overwrites SMB pool allocations, hijacks kernel execution, and drops shellcode running at ring-0.- Vulnerable SMBv1 driver reachable
- Correct target architecture (x86/x64) selected
- Kernel exploit can blue-screen (BSOD) if grooming misfires — noisy
- Post-2017 EDRs (CrowdStrike Falcon, Defender for Endpoint, SentinelOne) flag the exploit signature
lsass/spoolsv child, EDR memory-scanner catches DoublePulsar implant.Install DoublePulsar or direct shellcode as SYSTEM
srv.sys, giving a persistent kernel implant reachable by ping opcode over the same SMB session. Alternatively drops a Meterpreter/Cobalt Strike beacon directly. All execution is as NT AUTHORITY\SYSTEM.- Successful kernel primitive from step 3
- Kernel-mode AV/EDR removes the implant on next scan
- DoublePulsar has well-known heuristics — Colored ID responses
ping opcode with XOR key 0x45BF6313 (DoublePulsar) is a Snort/Suricata layup; CrowdStrike, Defender, S1 all detect out-of-the-box.Worm laterally over 445 / dump creds / deploy ransomware
- Additional peers reachable on 445 with SMBv1 enabled
- Network segmentation (VLAN/east-west firewall) breaks the worm
- Modern LSASS protection (Credential Guard, RunAsPPL) blunts pass-the-hash
The supporting signals.
| In-the-wild | Actively exploited since April 2017. WannaCry (May 2017), NotPetya (June 2017), Bad Rabbit, EternalRocks, TrickBot, Emotet, Ryuk, Conti, LockBit affiliates. Still fired at exposed hosts in 2026 by opportunistic worms and OT ransomware crews. |
|---|---|
| KEV status | CISA KEV — added on the catalog's original publication (2021-11-03). Due date long expired. Federal agencies were required to remediate immediately. |
| EPSS | 97th+ percentile, score ~0.94 — near ceiling. Among the highest exploited-probability scores tracked. |
| CVSS v3.1 | AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H → 8.1 High per NVD, but the AC:H is generous — public exploits are one-shot reliable. Real-world equivalent is 9.8. |
| PoC availability | Metasploit ms17_010_eternalblue + ms17_010_psexec, worawit's MS17-010 Python PoC, original Shadow Brokers Eternalblue-2.2.0.exe. Weaponized in every red-team toolkit. |
| Affected | Windows XP SP3, Server 2003 SP2, Vista, 7, 8.1, Server 2008/2008 R2/2012/2012 R2/2016, Windows 10 1507/1511/1607 — all prior to March 2017 patches. Any embedded Windows (WES7, POSReady) unless manually patched. |
| Fixed by | KB4012212/KB4012215 (Win 7/2008 R2), KB4012213/KB4012216 (8.1/2012 R2), KB4012214/KB4012217 (2012), KB4012606 (10 1507), KB4013198 (10 1511), KB4013429 (10 1607/2016), plus emergency KB4012598 for XP/2003/Vista/2008. |
| Exposure data | Shodan still indexes ~200k–400k hosts with SMBv1 exposed on 445 globally (2026). GreyNoise sees continuous background scanning by ~1,500+ unique IPs/day tagged EternalBlue. |
| Disclosed | Microsoft patch 2017-03-14. Shadow Brokers dump 2017-04-14. WannaCry outbreak 2017-05-12. |
| Credited | Bug class attributed to NSA Equation Group tooling; publicly leaked by The Shadow Brokers. |
noisgate verdict.
MS17-010 is unauthenticated pre-auth kernel RCE on Windows SMBv1 with a decade of continuous mass exploitation and permanent CISA KEV listing — the single most decisive factor is active in-the-wild wormable exploitation as SYSTEM. Any host still triggering plugin 97833 in 2026 is by definition unmanaged, which raises the operational blast radius above the vendor label.
Why this verdict
- Unauthenticated + wormable + KEV: the trifecta that historically justifies the CRITICAL floor with no adjustments needed.
- Role multiplier: a hit on plugin 97833 in 2026 almost always identifies a *high-value or high-risk role* host — OT jump box, legacy domain controller, embedded medical/industrial appliance, or forgotten file server — because everything under active management was patched years ago. Chain outcome: SYSTEM → LSASS dump → domain pivot → ransomware fan-out.
- Friction is near zero: exploit is one-shot with Metasploit, no auth, no user interaction, no unusual preconditions beyond reachability + SMBv1 on.
- Historical base rate: every mass ransomware event that used SMB lateral movement since 2017 (WannaCry, NotPetya, Ryuk, Conti) leveraged this exact primitive — the outcome distribution is not theoretical.
Why not higher?
10.0 is reserved for pre-auth RCE with zero prerequisites AND ubiquitous exposure. MS17-010 requires TCP/445 reachability and SMBv1 enabled, both of which are absent in the vast majority of modern managed fleets. That single friction point holds it at 9.8 rather than 10.0.
Why not lower?
You cannot rationally downgrade a KEV-listed, wormable, unauthenticated SYSTEM RCE with EPSS ~0.94 and a nine-year history of ransomware weaponization. The 'requires SMBv1 enabled' argument doesn't lower the verdict — it means the finding itself is a proof of misconfiguration that has already survived every hardening baseline of the last decade.
What to do — in priority order.
- Block TCP/445 (and 139) inbound at every perimeter and between segments today — SMB should never be internet-reachable. Between segments, restrict 445 to explicit file-server subnets. Deploy within 3 days per the noisgate mitigation SLA for CRITICAL.
- Disable SMBv1 fleet-wide via GPO / Intune / Ansible —
Set-SmbServerConfiguration -EnableSMB1Protocol $falseon servers;Disable-WindowsOptionalFeature -Online -FeatureName SMB1Protocolon clients. Push through configuration management within the 3-day mitigation window. - Quarantine any host that Nessus 97833 flags — Move it off the production VLAN into an isolated remediation network until patched and rebooted. Treat every hit as a potential live-implanted host until you confirm otherwise.
- Hunt for DoublePulsar and existing kernel implants — Run
Detect-DoublePulsar.pyor Countercept scripts against every flagged host. Assume compromise on any long-lived unpatched box — it's had years to be found. - Enable SMB signing and require SMBv2/3 with encryption —
Set-SmbServerConfiguration -RequireSecuritySignature $true -EncryptData $true. Defense-in-depth against downstream relay/coercion abuse.
- Antivirus signatures alone — kernel exploit runs before user-mode AV inspects anything; only kernel-tap EDR or network detection catches it reliably.
- 'We're behind a firewall' — WannaCry proved east-west lateral SMB spread is the actual kill vector, not internet exposure.
- Account lockout / password policy — the exploit is pre-auth; no credential is submitted, so lockouts never trigger.
- SMB signing — hardens relay/MITM but does not block the EternalBlue memory corruption path.
Crowdsourced verification payload.
Run this on the target Windows host as Administrator (or under a management agent context with local admin) to determine patch state and SMBv1 status. Example: powershell -ExecutionPolicy Bypass -File Check-MS17-010.ps1. For remote sweeping, wrap it in Invoke-Command -ComputerName $hosts from an admin workstation.
#requires -RunAsAdministrator
# Check-MS17-010.ps1 — noisgate MS17-010 / EternalBlue verifier
# Exit codes: 0 PATCHED, 1 VULNERABLE, 2 UNKNOWN
$ErrorActionPreference = 'Stop'
# Table of minimum patched file versions for srv.sys / srv2.sys per Windows build
# See https://support.microsoft.com/help/4013389
$patchedKBs = @(
'KB4012212','KB4012213','KB4012214','KB4012215','KB4012216','KB4012217',
'KB4012606','KB4013198','KB4013429','KB4012598',
'KB4015550','KB4019215','KB4019216','KB4019264','KB4019472'
)
try {
$os = Get-CimInstance Win32_OperatingSystem
Write-Host "Host: $env:COMPUTERNAME OS: $($os.Caption) $($os.Version)"
# 1. SMBv1 enabled?
$smb1 = $null
try { $smb1 = (Get-SmbServerConfiguration -ErrorAction Stop).EnableSMB1Protocol } catch {}
if ($null -eq $smb1) {
$reg = Get-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters' -Name SMB1 -ErrorAction SilentlyContinue
$smb1 = if ($reg -and $reg.SMB1 -eq 0) { $false } else { $true }
}
Write-Host "SMBv1 enabled: $smb1"
# 2. Any relevant hotfix installed?
$installed = Get-HotFix -ErrorAction SilentlyContinue | Where-Object { $patchedKBs -contains $_.HotFixID }
$hasKB = [bool]$installed
if ($hasKB) { Write-Host "Found patch(es): $($installed.HotFixID -join ', ')" }
# 3. srv.sys file version check as fallback (KB list is incomplete on rolled-up builds)
$srv = Get-Item -Path "$env:SystemRoot\System32\drivers\srv.sys" -ErrorAction SilentlyContinue
$srvVer = if ($srv) { $srv.VersionInfo.FileVersion } else { 'not present' }
Write-Host "srv.sys version: $srvVer"
# Decision matrix
if (-not $smb1 -and $hasKB) {
Write-Host 'RESULT: PATCHED (SMBv1 disabled AND patch present)' -ForegroundColor Green
exit 0
}
if ($smb1 -and -not $hasKB) {
Write-Host 'RESULT: VULNERABLE (SMBv1 enabled AND no MS17-010 hotfix detected)' -ForegroundColor Red
exit 1
}
if ($smb1 -and $hasKB) {
Write-Host 'RESULT: PATCHED-BUT-EXPOSED (patch present but SMBv1 still enabled — disable it now)' -ForegroundColor Yellow
exit 1
}
Write-Host 'RESULT: UNKNOWN (SMBv1 disabled but no MS17-010 KB in Get-HotFix; verify via srv.sys build)' -ForegroundColor Yellow
exit 2
} catch {
Write-Host "RESULT: UNKNOWN — $($_.Exception.Message)" -ForegroundColor Yellow
exit 2
}
If you remember one thing.
Sources
What defenders are saying.
Crowdsourced verification outputs.
Results submitted by users who ran the verification payload against their environment.