This is a lit match thrown into a file-sharing hallway soaked with gasoline
CVE-2017-0144 is the *EternalBlue* SMBv1 server bug in Windows that lets a remote attacker send crafted SMB packets and execute code as SYSTEM. Affected platforms are the March 2017-era Windows families Microsoft listed in MS17-010: Vista SP2, Server 2008 SP2, Server 2008 R2 SP1, Windows 7 SP1, Windows 8.1, Server 2012/2012 R2, Windows RT 8.1, Windows 10 1507/1511/1607, and Server 2016, *when SMBv1 server code is present and reachable*.
The vendor baseline you supplied — HIGH 8.8 with PR:L — undersells the operational reality. Microsoft's March 14, 2017 bulletin explicitly described exploitation as possible by an *unauthenticated attacker in most situations*, and the exploit became the backbone of WannaCry and NotPetya; for enterprise defenders this is a wormable, pre-auth, network RCE with proven ransomware utility, so it belongs in CRITICAL whenever SMBv1 is still exposed anywhere that matters.
4 steps from start to impact.
Find reachable SMBv1 with nmap or masscan
- Target host listens on TCP/445
- Network path to the host exists
- SMBv1 is enabled or at least reachable enough to probe
- Most mature enterprises block inbound 445 at the perimeter
- Some environments have already removed SMBv1 entirely
- Network segmentation can sharply reduce reachable population
nmap --script smb-vuln-ms17-010 and Metasploit auxiliary/scanner/smb/smb_ms17_010 both detect this well.Confirm MS17-010 exposure with smb-vuln-ms17-010 or Metasploit scanner
- SMB session establishment is possible
- Target is missing the relevant MS17-010 fix or equivalent backport
- SMBv1 server logic is still enabled
- Accurate detection collapses the vulnerable population quickly once patching is mature
- Hosts with SMBv1 disabled are effectively out of scope even if legacy KB state is messy
safe; many commercial vuln scanners flag this reliably.Launch EternalBlue pre-auth kernel exploit
exploit/windows/smb/ms17_010_eternalblue, to corrupt the SMBv1 server's kernel pool and gain code execution as SYSTEM. No valid credentials are normally required. This is the decisive step that makes the bug different from a merely annoying Windows issue.- Confirmed vulnerable SMBv1 target
- Compatible target behavior and timing
- Network access to TCP/445
- Exploit reliability is not perfect on every build and may cause crashes or BSODs
- Some EDR/NDR products now detect classic EternalBlue tradecraft
- Modern Windows fleets have mostly aged out of the vulnerable versions
Turn one host into a lateral-movement launcher
- Successful code execution on at least one Windows host
- Additional internal hosts expose TCP/445
- Segmentation does not block east-west SMB traffic
- Flat networks are less common than in 2017, though still not rare in legacy estates
- Internal firewalls and segmentation materially slow spread
- EDR containment can stop follow-on execution after first detonation
The supporting signals.
| In-the-wild status | Confirmed exploited. CISA KEV lists CVE-2017-0144 and notes known ransomware campaign use. |
|---|---|
| KEV dates | Added to KEV on 2022-02-10 with a due date of 2022-08-10. |
| Proof-of-concept / weaponization | Public weaponization is mature: Rapid7 ships exploit/windows/smb/ms17_010_eternalblue, plus detection module auxiliary/scanner/smb/smb_ms17_010; NVD also references Exploit-DB IDs 41891, 41987, 42030, and 42031. |
| EPSS | 0.94318 from the prompt, which is extremely high and consistent with a bug that has had years of observed abuse. |
| CVSS reality check | Current NVD v3.1 shows AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H (8.8), but Microsoft's MS17-010 says exploitation is possible by an unauthenticated attacker in most situations. For defenders, the pre-auth reality matters more than the database drift. |
| Affected versions | Windows Vista SP2; Server 2008 SP2 and 2008 R2 SP1; Windows 7 SP1; Windows 8.1; Server 2012 and 2012 R2; Windows RT 8.1; Windows 10 1507/1511/1607; Server 2016. |
| Fixed versions / KBs | Fixed by MS17-010 via KB family including 4012598, 4012212/4012215, 4012213/4012216, 4012214/4012217, 4012606, 4013198, and 4013429, depending on OS branch and servicing model. |
| Scanner coverage | High-confidence detection exists via the Nmap script smb-vuln-ms17-010 and Metasploit's MS17-010 SMB RCE Detection module. |
| Exposure population | Internet exposure is far lower than in 2017 in well-run enterprises because perimeter 445 is usually blocked, but *internal* exposure remains the real risk. One legacy SMBv1 host inside a flat network is enough to turn this back into a worm problem. |
| Disclosure / public timeline | Microsoft published MS17-010 on 2017-03-14; the CVE record was published 2017-03-17; widespread WannaCry abuse began 2017-05-12. |
noisgate verdict.
The single biggest amplifier is that this is a wormable, pre-auth network RCE with proven ransomware history. Even though the reachable population is narrower today because many shops block 445 and removed SMBv1, any remaining exposed host creates outsized blast radius across a large Windows estate.
Why this verdict
- Upgraded from vendor 8.8 because the
PR:Lbaseline is misleading: Microsoft stated on March 14, 2017 that in most situations exploitation is possible by an *unauthenticated attacker*, which is a full step worse in practice. - KEV plus ransomware history adds hard upward pressure: CISA KEV, WannaCry, and NotPetya mean this is not theoretical exploitability but a repeatedly weaponized propagation path.
- Blast radius is the reason this stays CRITICAL: external exposure may be reduced, but internal east-west SMB is still common enough that one missed box can become a network-wide spreader in a 10,000-host environment.
Why not higher?
There is no higher bucket than CRITICAL, but this is not a perfect 10.0 because modern enterprises usually block inbound 445, many have already disabled SMBv1, and exploit reliability is not flawless on every target. Those frictions reduce the *reachable population*, not the seriousness of a hit on a reachable host.
Why not lower?
Scoring this as HIGH would overweight perimeter improvements and underweight wormability. The combination of pre-auth network reach, SYSTEM execution, mature public tooling, and long-standing real-world ransomware use keeps this above ordinary remote Windows bugs.
What to do — in priority order.
- Disable SMBv1 everywhere — Remove the vulnerable protocol rather than trying to trust network position. This is the most effective compensating control because the exploit path dies when SMBv1 server support is gone; for a CRITICAL issue with exploitation evidence, deploy within hours.
- Block TCP/445 at boundaries and between segments — Enforce deny rules at the internet edge and on east-west paths that do not explicitly require SMB. This reduces worm spread and buys time for patching; because this CVE is KEV-listed, apply the block within hours where business impact allows.
- Quarantine or isolate legacy Windows systems — Unsupported or hard-to-patch hosts should be moved into tightly controlled VLANs or firewall groups with only named SMB peers allowed. Do this within hours for any host that still exposes SMBv1 and cannot be patched immediately.
- Hunt for MS17-010 detections and SMBv1 inventory gaps — Use vuln scanners,
nmapsafe checks, and configuration inventory to find every remaining vulnerable node. The goal is fast scoping before the patch rollout; complete the first sweep within hours.
- MFA does nothing here because the exploit path is normally pre-auth over SMB.
- SMB signing does not fix the vulnerable SMBv1 request handling bug.
- Perimeter-only blocking is not enough if internal hosts can still reach each other over 445.
- Antivirus alone is not sufficient because stopping the payload after kernel-level code execution is already a bad place to be.
Crowdsourced verification payload.
Run this on the target Windows host in an elevated PowerShell session: powershell -ExecutionPolicy Bypass -File .\Test-MS17-010.ps1. Local admin is recommended because the script reads OS, installed hotfixes, and SMB server configuration; it outputs exactly VULNERABLE, PATCHED, or UNKNOWN and exits 0, 1, or 2 respectively.
# Test-MS17-010.ps1
# Checks whether a Windows host appears vulnerable to MS17-010 / CVE-2017-0144.
# Output: VULNERABLE / PATCHED / UNKNOWN
# Exit codes: 0=PATCHED, 1=VULNERABLE, 2=UNKNOWN
$ErrorActionPreference = 'SilentlyContinue'
function Exit-Result {
param(
[string]$Status,
[int]$Code
)
Write-Output $Status
exit $Code
}
function Get-HotFixIds {
try {
return @(Get-HotFix | Select-Object -ExpandProperty HotFixID)
} catch {
return @()
}
}
function Test-SMBv1Disabled {
# If SMBv1 server is disabled, the host is not exploitable via EternalBlue.
try {
$cfg = Get-SmbServerConfiguration
if ($null -ne $cfg.EnableSMB1Protocol -and $cfg.EnableSMB1Protocol -eq $false) {
return $true
}
} catch {}
try {
$val = Get-ItemProperty -Path 'HKLM:\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters' -Name SMB1
if ($val.SMB1 -eq 0) { return $true }
} catch {}
return $false
}
# Short-circuit: if SMBv1 is disabled, treat as PATCHED/non-exploitable.
if (Test-SMBv1Disabled) {
Exit-Result 'PATCHED' 0
}
$os = Get-CimInstance Win32_OperatingSystem
if (-not $os) {
Exit-Result 'UNKNOWN' 2
}
$caption = [string]$os.Caption
$version = [string]$os.Version
$build = [int]$os.BuildNumber
$spMajor = 0
try { $spMajor = [int]$os.ServicePackMajorVersion } catch {}
$hotfixes = Get-HotFixIds
if (-not $hotfixes) {
# Continue anyway; some systems restrict WMI hotfix enumeration.
$hotfixes = @()
}
# KBs from MS17-010 for supported branches in the 2017 bulletin.
$kbMap = @{
'VistaSP2_Server2008SP2' = @('KB4012598')
'Win7SP1_Server2008R2SP1' = @('KB4012212','KB4012215')
'Win81_Server2012R2' = @('KB4012213','KB4012216')
'Server2012' = @('KB4012214','KB4012217')
'Win10_1507' = @('KB4012606')
'Win10_1511' = @('KB4013198')
'Win10_1607_Server2016' = @('KB4013429')
}
function Has-AnyKb {
param([string[]]$Needles, [string[]]$Installed)
foreach ($kb in $Needles) {
if ($Installed -contains $kb) { return $true }
}
return $false
}
# Determine whether this is one of the affected OS families.
$family = $null
if ($caption -match 'Windows Vista' -and $spMajor -ge 2) {
$family = 'VistaSP2_Server2008SP2'
} elseif ($caption -match 'Windows Server 2008' -and $caption -notmatch 'R2' -and $spMajor -ge 2) {
$family = 'VistaSP2_Server2008SP2'
} elseif (($caption -match 'Windows 7' -or $caption -match 'Windows Server 2008 R2') -and $spMajor -ge 1) {
$family = 'Win7SP1_Server2008R2SP1'
} elseif ($caption -match 'Windows 8.1' -or $caption -match 'Windows Server 2012 R2') {
$family = 'Win81_Server2012R2'
} elseif ($caption -match 'Windows Server 2012' -and $caption -notmatch 'R2') {
$family = 'Server2012'
} elseif ($caption -match 'Windows 10') {
switch ($build) {
10240 { $family = 'Win10_1507' }
10586 { $family = 'Win10_1511' }
14393 { $family = 'Win10_1607_Server2016' }
default {
# Other Windows 10 builds are outside the CVE's listed vulnerable client range.
Exit-Result 'PATCHED' 0
}
}
} elseif ($caption -match 'Windows Server 2016') {
if ($build -eq 14393) {
$family = 'Win10_1607_Server2016'
} else {
Exit-Result 'PATCHED' 0
}
} else {
# Not an affected family from the advisory.
Exit-Result 'PATCHED' 0
}
if (-not $family) {
Exit-Result 'UNKNOWN' 2
}
$neededKbs = $kbMap[$family]
if (-not $neededKbs) {
Exit-Result 'UNKNOWN' 2
}
if (Has-AnyKb -Needles $neededKbs -Installed $hotfixes) {
Exit-Result 'PATCHED' 0
}
# If the host is in an affected family, SMBv1 is not disabled, and we cannot find the MS17-010 KB,
# classify as vulnerable.
Exit-Result 'VULNERABLE' 1
If you remember one thing.
Sources
- Microsoft Security Bulletin MS17-010
- NVD CVE-2017-0144
- CISA KEV catalog search result for CVE-2017-0144
- CISA Adds 15 Known Exploited Vulnerabilities to Catalog
- FIRST EPSS data/stats
- Nmap smb-vuln-ms17-010 NSE documentation
- Rapid7 Metasploit EternalBlue module
- Microsoft customer guidance for WannaCrypt attacks
What defenders are saying.
Crowdsourced verification outputs.
Results submitted by users who ran the verification payload against their environment.