← Back to Feed CACHED · 2026-06-01 14:54:22 · CACHE_KEY tenable:298555
tenable:298555 · CWE-693 · Disclosed 2026-02-10

KB5075970: Windows Server 2012 R2 Security Update (February 2026)

MSHTML Framework security feature bypass in Windows fixed by KB5075970

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

This is a live grenade in the admin jump bag, not a missile hitting every server from the internet

KB5075970 is the February 10, 2026 monthly rollup for Windows Server 2012 R2 ESU. Tenable plugin 298555 flags hosts missing that rollup and ties it to multiple CVEs, most importantly CVE-2026-21513 in MSHTML plus several local privilege escalation bugs such as CVE-2026-21246, CVE-2026-21235, CVE-2026-21508, and CVE-2026-21533. In plain English: an attacker can use a crafted file or web/navigation path to get code running, then use local EoP bugs to turn foothold into SYSTEM on an unpatched 2012 R2 host.

The vendor labeling is easy to misread here. Tenable's plugin severity is high, not critical, while Tenable VPR escalates it because the rollup contains a KEV-listed, actively exploited zero-day (CVE-2026-21513). That said, for a 10,000-host enterprise this still does not behave like an indiscriminate unauthenticated network worm on every server: the dominant path needs user interaction and/or a post-compromise local stage, which sharply narrows real-world reach even though the consequences on the hosts that *are* used by admins are ugly.

"KEV-listed and exploited, but this is not a slam-dunk server-side RCE; the real risk is admin-user execution on legacy 2012 R2 boxes."
02 · The Attack Path

4 steps from start to impact.

STEP 01

Deliver a user-execution lure

The practical entry point is a crafted lure that reaches someone who uses the vulnerable host: email attachment, downloaded file, network share content, or a shortcut/document path that triggers MSHTML-backed handling. The weaponized content is not the monthly rollup itself; the relevant weapon is an MSHTML/IEFRAME lure tied to CVE-2026-21513 as analyzed by Akamai.
Conditions required:
  • Attacker can reach a user or admin who interacts with content on the target host
  • Target is Windows Server 2012 R2 ESU missing KB5075970
  • MSHTML-triggering content is allowed to land on or be opened from the system
Where this breaks in practice:
  • Headless back-end servers usually have no interactive browsing or document-opening workflow
  • Email security, web isolation, attachment detonation, and file reputation controls stop a lot of commodity delivery
  • Many 2012 R2 servers are only reachable by admins, which means the attacker often needs a prior foothold or successful phishing
Detection/coverage: Network vulnerability scanners do not prove exploitability here; Tenable states the plugin relies on version checks. Secure email gateways, proxy logs, attachment sandboxes, and EDR telemetry are more useful than perimeter scanning.
STEP 02

Trigger the MSHTML bypass

Per Akamai's patch-diff analysis, the vulnerable path sits in ieframe.dll hyperlink navigation handling. The attacker abuses URL handling so execution escapes intended browser security boundaries and reaches ShellExecuteExW, turning what should be constrained content handling into arbitrary execution behavior.
Conditions required:
  • The lure is opened or otherwise rendered
  • The specific vulnerable MSHTML navigation path is hit
  • No upstream control strips or neutralizes the active content
Where this breaks in practice:
  • This is not a pre-auth socket listener on port 3389 or 445; it needs content handling
  • Protected View-style workflows, browser isolation, and application control reduce success
  • Server Core-like minimal workflows reduce exposure compared with user workstations
Detection/coverage: EDR can often catch odd parent-child chains, ieframe.dll-driven execution, ShellExecuteExW abuse, suspicious .lnk/HTML opens, or payloads launched from temp/download/share paths.
STEP 03

Land code in user context

At this point the attacker has execution in the current user context on the server. On an admin jump host, RDS host, or dual-use legacy server, that can already be enough to steal tokens, dump creds, stage tools, or pivot laterally.
Conditions required:
  • Successful user execution on the target host
  • User context has enough local rights or reachable credentials to matter
Where this breaks in practice:
  • Non-admin service accounts or constrained jump workflows limit blast radius
  • Application control and constrained language policies can choke follow-on tooling
  • Credential Guard, EDR, and PAM reduce what a single user-context foothold can do
Detection/coverage: High-quality EDR should see unsigned child processes, LOLBin misuse, script interpreters, token abuse, or credential access attempts immediately after the initial lure event.
STEP 04

Escalate locally to SYSTEM

The rollup also fixes several local bugs, including CVE-2026-21246, CVE-2026-21235, CVE-2026-21508, and CVE-2026-21533. Those are the cleanup crew for an attacker: once they have *any* code running locally, they can attempt to upgrade from low privilege to full box control.
Conditions required:
  • Attacker already has local code execution
  • The host is missing KB5075970 and applicable vulnerable components remain present
Where this breaks in practice:
  • This stage is impossible without a prior local foothold
  • Some EoP paths are brittle across builds and require exploit engineering
  • Behavioral EDR often catches the privilege-escalation toolchain even if it missed the initial lure
Detection/coverage: Local EoP detection is mostly EDR territory: token manipulation, kernel exploit artifacts, suspicious handle opens, memory tampering, or abrupt integrity-level jumps.
03 · Compensating Control

1
Block risky content on server tiers — Immediately, within hours, stop interactive browsing, email access, and untrusted file opening on Windows Server 2012 R2 admin/jump/RDS tiers because the dominant exploit path depends on user-executed content. This is your fastest risk cut while patching catches up.
2
Clamp application execution — Deploy or tighten AppLocker/WDAC/application control on 2012 R2 so .lnk, HTML-launched binaries, script hosts, and user-writable path execution are constrained. Because this is a HIGH verdict with KEV evidence, implement the control change immediately, within hours, not inside a normal 30-day window.
3
Hunt for MSHTML-to-process-launch chains — Create detections for suspicious ieframe.dll or MSHTML content leading to ShellExecuteExW, LOLBins, script interpreters, or payloads spawned from downloads/temp/network shares. Do this immediately, within hours because it catches both failed and successful exploitation attempts while the estate is still being remediated.
4
Fence legacy 2012 R2 hosts — Restrict east-west access and admin pathways to 2012 R2 systems, especially RDS and jump hosts, so a user-context foothold has fewer places to pivot. For this verdict and KEV status, put the segmentation change in place immediately, within hours where operationally possible.
What doesn't work
  • A perimeter firewall alone does not solve this, because the main exploited path is content handling and user execution, not just inbound service exposure.
  • Vuln scanner green checks do not prove safety here; Tenable explicitly says this plugin is based on version self-reporting, not exploit validation.
  • RDP hardening by itself is not enough. Some of the bundled bugs are local EoP, and the dominant exploited MSHTML path can arrive through channels unrelated to inbound RDP.
04 · Intelligence Metadata

The supporting signals.

In-the-wild statusYes. CVE-2026-21513 is in CISA KEV, and Akamai states it was actively exploited in the wild and correlates exploitation to APT28.
Proof-of-concept / exploit availabilityTenable marks the rollup as Exploit Available: true and lists Core Impact under exploitable-with. Akamai published a technical root-cause and exploitation analysis for CVE-2026-21513, which materially lowers reverse-engineering effort.
EPSSFor the dominant CVE (CVE-2026-21513), secondary aggregators reflecting FIRST data place exploit probability at roughly 22% and about the 96.5th percentile as of late May 2026; treat that as high exploit interest, though the direct FIRST CVE-specific query was not retrievable in this interface.
KEV status and datesCVE-2026-21513 was added to CISA KEV on 2026-02-10 with a due date of 2026-03-03. Tenable also exposes the same due date in plugin metadata.
CVSS vector, interpretedThe dominant network-relevant bug carries CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H. Translation: *network-deliverable but still needs user interaction*; that is serious, but it is not equivalent to an unauthenticated server daemon RCE.
Affected version rangeFor this plugin, the affected population is Windows Server 2012 R2 ESU hosts missing KB5075970. Microsoft notes 2012 R2 is past normal support and only receiving updates through Extended Security Updates until 2026-10-13.
Fixed versionsInstall KB5075970 for the February 10, 2026 monthly rollup, with prerequisite SSU KB5068783 where needed. Any later cumulative rollup that supersedes KB5075970 also closes the same issues for 2012 R2.
Scanning / exposure realityThere is no meaningful Shodan/Censys-style internet exposure query for KB5075970 itself because this is a host patch state, not a directly fingerprintable network service bug. Real exposure clusters around RDS hosts, admin jump boxes, and legacy servers where humans browse, open files, or handle email.
Disclosure dateMicrosoft published the rollup and the dominant CVE set on 2026-02-10.
Reporting / analysisAuthoritative disclosure came from Microsoft/MSRC; public exploitation analysis and root-cause work came from Akamai Security Research.

Sources.

  1. Tenable Nessus Plugin 298555
  2. Microsoft Support KB5075970
  3. Microsoft Update Catalog KB5075970
  4. NVD CVE-2026-21513
  5. CISA KEV entry for CVE-2026-21513
  6. Akamai analysis of CVE-2026-21513 exploitation
  7. FIRST EPSS API documentation
05 · The Call

Final Verdict
↓ DOWNGRADED to HIGH (8.2/10)

Why this verdict

  • Upward pressure: KEV + live exploitation. CVE-2026-21513 is not theoretical; CISA KEV and Akamai's analysis say attackers are already using it.
  • Downward pressure: attacker position still matters. The main path needs a person or prior foothold to trigger MSHTML content, which means this is not a broadcast-grade service exploit against every server.
  • Downward pressure: narrow exposed population. In real enterprises, only a fraction of 2012 R2 servers are interactive enough for this to matter immediately: admin jump servers, RDS hosts, and a depressing number of legacy dual-use boxes.
  • Upward pressure: privilege-escalation bundle. Once code lands locally, the same rollup closes multiple local EoP paths that can convert a small foothold into full host takeover.
  • Upward pressure: legacy OS economics. 2012 R2 estates are often the least instrumented and least cleanly segmented servers in the environment, so when this hits the wrong box, containment is usually worse than on modern builds.

Why not higher?

Because the practical chain is not unauthenticated remote-to-SYSTEM on a listening server process. It generally requires user interaction, content handling, or an already-established local foothold, which means a lot of ordinary back-end 2012 R2 servers are simply not reachable through the dominant attack path. If this were a wormable RDP/SMB class bug with the same exploitation evidence, it would be CRITICAL.

Why not lower?

Because the threat side is already settled: KEV-listed and exploited means defenders are racing reality, not a lab exercise. Also, the patch is cumulative: if an attacker does get execution on a legacy 2012 R2 box, the bundled local EoPs make post-exploitation easier and more damaging than a single isolated user-context flaw.

06 · Verification

Crowdsourced verification payload.

Run this on the target Windows Server 2012 R2 host or through your RMM/EDR live response. Invoke with powershell.exe -ExecutionPolicy Bypass -File .\check-kb5075970.ps1; standard local read access is usually enough, but Administrator is recommended so package enumeration works reliably.

noisgate-verify.ps1
POWERSHELLREAD-ONLYSAFE
# check-kb5075970.ps1

# Purpose: Verify whether Windows Server 2012 R2 has KB5075970 installed.

# Output: VULNERABLE / PATCHED / UNKNOWN

# Exit codes: 0=PATCHED, 1=VULNERABLE, 2=UNKNOWN, 3=ERROR


$ErrorActionPreference = 'Stop'

function Write-Result {
    param(
        [string]$State,
        [string]$Message,
        [int]$Code
    )
    Write-Output "$State - $Message"
    exit $Code
}

try {
    $os = Get-CimInstance Win32_OperatingSystem
    $caption = $os.Caption
    $version = $os.Version

    if ($caption -notmatch 'Windows Server 2012 R2') {
        Write-Result -State 'UNKNOWN' -Message "This script is intended for Windows Server 2012 R2. Detected: $caption ($version)" -Code 2
    }

    $kbInstalled = $false
    $installMethod = @()

    # Method 1: Get-HotFix

    try {
        $hf = Get-HotFix -Id KB5075970 -ErrorAction Stop
        if ($hf) {
            $kbInstalled = $true
            $installMethod += 'Get-HotFix'
        }
    } catch {
        # ignore and continue

    }

    # Method 2: Component Based Servicing package registry

    if (-not $kbInstalled) {
        try {
            $cbsPath = 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\Packages'
            $pkg = Get-ChildItem $cbsPath -ErrorAction Stop | Where-Object { $_.PSChildName -match 'KB5075970' }
            if ($pkg) {
                $kbInstalled = $true
                $installMethod += 'CBS Registry'
            }
        } catch {
            # ignore and continue

        }
    }

    # Method 3: DISM package listing fallback

    if (-not $kbInstalled) {
        try {
            $dism = & dism.exe /online /Get-Packages 2>$null | Select-String -Pattern 'KB5075970'
            if ($dism) {
                $kbInstalled = $true
                $installMethod += 'DISM'
            }
        } catch {
            # ignore and continue

        }
    }

    # Optional: note servicing stack prerequisite visibility

    $ssuInstalled = $false
    try {
        $ssu = Get-HotFix -Id KB5068783 -ErrorAction Stop
        if ($ssu) { $ssuInstalled = $true }
    } catch {
        try {
            $ssuPkg = Get-ChildItem 'HKLM:\SOFTWARE\Microsoft\Windows\CurrentVersion\Component Based Servicing\Packages' -ErrorAction Stop | Where-Object { $_.PSChildName -match 'KB5068783' }
            if ($ssuPkg) { $ssuInstalled = $true }
        } catch {
            # ignore

        }
    }

    if ($kbInstalled) {
        $msg = 'KB5075970 is installed'
        if ($installMethod.Count -gt 0) {
            $msg += " (detected via: $($installMethod -join ', '))"
        }
        if ($ssuInstalled) {
            $msg += '; prerequisite SSU KB5068783 also present'
        }
        Write-Result -State 'PATCHED' -Message $msg -Code 0
    } else {
        $msg = 'KB5075970 not detected on Windows Server 2012 R2'
        if (-not $ssuInstalled) {
            $msg += '; SSU KB5068783 also not detected and may be required before install'
        }
        Write-Result -State 'VULNERABLE' -Message $msg -Code 1
    }
}
catch {
    Write-Result -State 'UNKNOWN' -Message $_.Exception.Message -Code 3
}