A janitor with a master key being tricked into mopping the vault floor
CVE-2026-50656 is a link-following flaw (CWE-59) in Microsoft Defender's local service surface — the platform component that handles signature updates, quarantine I/O, and scan-result writes under NT AUTHORITY\SYSTEM. A logged-in low-privileged user plants a junction or NTFS reparse point along a path Defender touches during routine operations; Defender follows the link and performs a privileged file write/delete on an arbitrary target the user could not otherwise reach. Affected ranges per the MSRC advisory cover Defender platform builds prior to the June 2026 platform refresh and Defender for Endpoint sensor versions before the equivalent backport.
Microsoft's HIGH (7.8) rating is accurate, and we are not downgrading. The CVSS vector (AV:L/AC:L/PR:L/UI:N) honestly reflects that an attacker must already be logged in, but that is exactly the threat model EDR exists to defeat — a commodity infostealer or phishing payload arrives as a Medium-Integrity user and uses Defender itself as the SYSTEM primitive. E:F (functional exploit) plus the role of the affected component is what holds the score at HIGH.
5 steps from start to impact.
Attacker obtains low-priv code execution on the host
- Interactive or service-account session on the target host
- Ability to write to a user-controlled directory (e.g.
%LOCALAPPDATA%,%TEMP%)
- EDR/AV may already flag the initial loader before stage 2
- AppLocker / WDAC in Enforced mode blocks unsigned binaries
Plant NTFS junction / reparse point on a Defender-touched path
mklink /J, CreateSymbolicLink, or a tool like James Forshaw's symboliclink-testing-tools (CreateMountPoint.exe, CreateSymlink.exe) to redirect a Defender-managed directory — typically a quarantine staging path, scan-cache directory, or platform update scratch dir — to a SYSTEM-writable target such as C:\Windows\System32.- Write access to a directory Defender enumerates or writes into
- Knowledge of which Defender operation triggers the vulnerable I/O
- Some Defender paths are ACL'd to SYSTEM-only and cannot be pre-created by a user
- Recent Windows builds harden non-admin symlink creation outside opt-in directories
Trigger the privileged Defender operation
MpCmdRun.exe -SignatureUpdate, or scheduling a scan. Defender's SYSTEM-context worker follows the junction and writes/deletes on the redirected path.- Defender real-time protection enabled (it almost always is)
- Service responsive to user-triggerable events
- If real-time protection is in Passive mode (when a 3rd-party AV is primary), the vulnerable code path may not fire
- Tamper Protection limits some
MpCmdRuninvocations
Convert arbitrary write/delete into SYSTEM code execution
- A known privileged process that loads from a writable-by-primitive path
- Ability to wait for or trigger that process
- Modern Windows hardening (CFG, dependency-signing, Protected Process Light) blocks naive DLL-search hijacks against some services
- EDR behavioral rules can catch the post-exploitation child process spawn
MsMpEng.exe/MpDefenderCoreService.exe writing to atypical paths.Disable Defender, pivot, and persist
- SYSTEM token from step 4
- Cloud-delivered Defender telemetry may still flag post-SYSTEM behaviors before the attacker disables sensors
- Conditional Access / device-compliance policies may quarantine the host from corporate apps once telemetry stops
The supporting signals.
| In-the-wild status | Not on KEV as of 2026-06-20. CVSS temporal flag E:F (Functional) indicates Microsoft is aware of working exploit code; no confirmed campaign attribution yet. |
|---|---|
| Public PoC | No standalone public PoC on GitHub as of writing; primitives generalize from James Forshaw / Project Zero symlink toolkit and prior Defender EoPs (CVE-2023-24934, CVE-2024-21434 patterns). |
| EPSS | 0.00343 (~0.3%) — low predicted 30-day exploitation likelihood, consistent with local-only AV vector. |
| KEV status | Not listed. Re-check weekly; KEV adds for Defender EoPs typically follow incident-response disclosures. |
| CVSS vector | CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H/E:F/RL:U/RC:C — local, low-complexity, low-priv attacker, no user interaction, full CIA impact, Unavailable remediation level at time of vector publication. |
| Affected versions | Microsoft Defender Antimalware Platform versions prior to 4.18.26050.x (June 2026 platform refresh); Defender for Endpoint sensor versions prior to the equivalent monthly sensor build. Server 2016/2019/2022/2025 and Windows 10/11 all in scope. |
| Fixed versions | Microsoft Defender platform 4.18.26050.x or later, delivered via the standard platform update channel (MpCmdRun.exe -SignatureUpdate -MMPC or WSUS/Intune). |
| Exposure data | Not internet-facing — no Shodan/Censys signal applies. Installed base ≈ every domain-joined Windows endpoint in the enterprise; this is the universal-deployment case. |
| Disclosure date | Microsoft Patch Tuesday cycle — June 2026 MSRC advisory. |
| Reporter | Credited via MSRC; symlink-class Defender bugs in recent years have come from independent researchers and the broader Windows EoP community. |
noisgate verdict.
Role multiplier holds the floor at HIGH: the affected component is a kernel-mode-adjacent security agent running as SYSTEM on effectively 100% of managed Windows endpoints, so a successful chain ends in SYSTEM on any host the attacker can already log into. Local-only attack vector is the only reason this is not CRITICAL.
Why this verdict
- Role multiplier — kernel-class security agent: Defender runs as SYSTEM on every managed Windows host; the chain ends in SYSTEM and EDR-tamper on the box. Per the noisgate role-multiplier rule, a bug *in* an EDR/AV component canonically occupies the high-value role on ≥10% of installs — in this case it is 100% — so the floor is at least HIGH.
- Friction — local-only (AV:L): Attacker must already be executing code as a non-admin user. That is real friction and is the only reason we are not at CRITICAL: there is no remote, unauthenticated path. We do not break the HIGH floor downward because the post-foothold scenario (commodity stealer, phishing payload, malicious insider) is the dominant real-world initial-access pattern.
- Friction — no internet exposure: Zero attack-surface from the perimeter. Useless to opportunistic mass exploitation; useful to any attacker already inside, which is every targeted intrusion.
- Exploit maturity —
E:FFunctional, no public PoC yet: Functional exploit code exists per Microsoft but is not commoditized. This argues against same-day mass abuse but does not change the floor; symlink-EoP primitives are well-understood and a public PoC is historically a matter of weeks.
Why not higher?
Not CRITICAL because the attack vector is strictly local (AV:L) — there is no wormable or remote-unauth path. CRITICAL is reserved for cases where the chain succeeds against an unauthenticated remote attacker or pivots across the fleet without per-host foothold; this requires interactive code execution per host first.
Why not lower?
Not MEDIUM because the affected component is a kernel-class security agent deployed on the entire Windows estate, and the outcome is SYSTEM plus EDR-tamper on the compromised host. Treating a Defender SYSTEM-EoP as MEDIUM would ignore the deployment-role blast radius rule — EDR bypass is what makes every other post-exploitation step easier.
What to do — in priority order.
- Force Defender platform update to 4.18.26050.x fleet-wide — The Defender Antimalware Platform updates out-of-band from Windows cumulative updates via the Microsoft Malware Protection Center channel. Push via Intune Endpoint Security policy, ConfigMgr, or
MpCmdRun.exe -SignatureUpdate -MMPCin a scheduled task. Per noisgate mitigation SLA for HIGH, this rollout must be complete within 30 days. - Enable Tamper Protection on every endpoint — Tamper Protection raises the cost of step 5 (sensor disable) materially and is the single highest-leverage post-EoP control. Enforce via Intune *Endpoint security → Antivirus → Windows Security Experience* or the Defender for Endpoint portal. Deploy within the same 30-day mitigation window.
- Audit and minimize interactive logon rights on servers — This bug requires a logged-in user. Restrict
SeInteractiveLogonRighton server tiers (especially Tier-0/Tier-1 — DCs, ADCS, backup servers) to break the precondition. GPOComputer Configuration → Windows Settings → Security Settings → Local Policies → User Rights Assignment. Implement within 30 days. - Hunt for reparse-point creation by non-admin users in Defender directories — Sysmon EventID 11 with a filter on
TargetFilenamematchingC:\ProgramData\Microsoft\Windows Defender\*plusIntegrityLevel != Systemis a high-signal detection for stage 2 of the chain. Push the rule within 7 days; it is cheap insurance during the patch rollout window. - Verify Defender real-time protection is in Active (not Passive) mode where it is the primary AV — Ironically, hosts where Defender is Passive are *less* exposed to this bug — but you need to know which is which.
Get-MpComputerStatus | Select AMRunningModeacross the fleet inventories this in minutes.
- Network segmentation / firewall rules — the entire attack is on-host, no network traffic involved.
- MFA / Conditional Access — does not protect against an already-authenticated low-priv user; the bug is *post-auth* by definition.
- Disabling SMB / RDP — irrelevant; not a remote vector.
- Windows cumulative update (LCU) — Defender platform updates ship on a *separate* channel; the June 2026 LCU does NOT carry the platform fix on its own. You must verify the platform build number specifically.
Crowdsourced verification payload.
Run on the target Windows host in an elevated PowerShell session (Defender platform queries require local admin to read all fields reliably). Invoke as .\Check-CVE-2026-50656.ps1. Returns exit code 0 = PATCHED, 1 = VULNERABLE, 2 = UNKNOWN. Suitable for ConfigMgr/Intune proactive remediation packaging.
#requires -Version 5.1
# Check-CVE-2026-50656.ps1
# noisgate verification: Microsoft Defender EoP (CWE-59 symlink)
# PATCHED -> Defender platform >= 4.18.26050.0
# VULNERABLE -> Defender platform < 4.18.26050.0
# UNKNOWN -> Defender not present / status unreadable
$ErrorActionPreference = 'Stop'
$FixedVersion = [Version]'4.18.26050.0'
try {
$status = Get-MpComputerStatus -ErrorAction Stop
} catch {
Write-Output 'UNKNOWN: Defender not installed or Get-MpComputerStatus unavailable.'
exit 2
}
if (-not $status.AMProductVersion) {
Write-Output 'UNKNOWN: AMProductVersion not reported.'
exit 2
}
try {
$current = [Version]$status.AMProductVersion
} catch {
Write-Output "UNKNOWN: cannot parse AMProductVersion '$($status.AMProductVersion)'."
exit 2
}
$rtp = $status.RealTimeProtectionEnabled
$tamper = $status.IsTamperProtected
$mode = $status.AMRunningMode # Normal | Passive | EDR Block Mode | SxS Passive Mode
Write-Output "Defender platform version : $current"
Write-Output "Real-time protection : $rtp"
Write-Output "Tamper protection : $tamper"
Write-Output "Running mode : $mode"
if ($current -ge $FixedVersion) {
Write-Output 'PATCHED'
exit 0
} else {
Write-Output "VULNERABLE: platform $current < fixed $FixedVersion (CVE-2026-50656)"
if ($mode -eq 'Passive' -or $mode -eq 'SxS Passive Mode') {
Write-Output 'NOTE: running in Passive mode — exposure reduced but still patch.'
}
exit 1
}
If you remember one thing.
Sources
- MSRC Update Guide — CVE-2026-50656
- Microsoft — Manage Defender Antimalware Platform updates
- Microsoft — Tamper Protection for Defender for Endpoint
- MITRE CWE-59: Improper Link Resolution Before File Access
- James Forshaw — symboliclink-testing-tools
- CISA Known Exploited Vulnerabilities Catalog
- FIRST EPSS Model
- Microsoft — Get-MpComputerStatus PowerShell reference
What defenders are saying.
Crowdsourced verification outputs.
Results submitted by users who ran the verification payload against their environment.