← Back to Feed CACHED · 2026-10-01 08:22:46 · CACHE_KEY CVE-2026-50656
CVE-2026-50656 · CWE-59 · Disclosed 2026-06-10

Microsoft Malware Protection Engine Elevation of Privilege via Improper Link Resolution (RoguePlanet)

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

Your antivirus is the locksmith handing out master keys to anyone already inside the building

CVE-2026-50656 ("RoguePlanet") is an elevation-of-privilege flaw in mpengine.dll, the Microsoft Malware Protection Engine that powers Microsoft Defender, Defender for Endpoint, and Microsoft Security Essentials. A low-privileged local user exploits CWE-59 (improper link resolution) by racing Defender's own scan-and-remediate pipeline: the attacker plants an EICAR trigger file, redirects Defender's privileged file operations through NTFS junctions or Object Manager symlinks, and causes the engine — running as NT AUTHORITY\SYSTEM — to write attacker-controlled content into a protected system location. The result is a reliable SYSTEM shell from any unprivileged foothold. Affected: all Windows 10, Windows 11 (including 25H2), and Windows Server 2025 endpoints running Defender with any engine version. The original RoguePlanet vector was patched in engine v1.1.26060.3008 (July 2026), but the ShieldBreak bypass (CVE-2026-69414), released August 12, 2026, moves the redirect to the NT Object Manager namespace and achieves 100% success on patched systems. No fix for ShieldBreak exists as of October 2026.

Microsoft rated this HIGH (7.8) — and that label was already borderline inadequate in June when the original PoC dropped as a zero-day on Patch Tuesday. Three months later, with a confirmed full patch bypass, two public weaponized PoCs, and no remediation available, the vendor severity is dangerously understated. Defender runs as SYSTEM on effectively every Windows endpoint in every enterprise. This is not a niche application EoP — it is a universal privilege-escalation primitive that converts any low-privilege foothold (phish, compromised service account, insider) into full SYSTEM on every host the attacker touches. On domain controllers, that means domain takeover. On Hyper-V hosts, hypervisor compromise. On backup servers, ransomware operators' dream. The vendor's 7.8 reflects the CVSS base math for a local/low-priv vuln; it does not reflect the blast radius of a bug in the single most widely deployed security agent on the planet, with no patch and a public, reliable exploit.

"Unpatched SYSTEM escalation on every Windows box running Defender. Upgrade to CRITICAL."
02 · The Attack Path

5 steps from start to impact.

STEP 01

Establish local code execution

The attacker obtains a low-privileged shell on a Windows endpoint — via phishing payload, compromised RDP credentials, supply-chain implant, or insider access. No admin rights required; any domain user or local account suffices. This is the only prerequisite, and it matches the initial access stage of virtually every real-world intrusion.
Conditions required:
  • Local code execution as any authenticated user (PR:L)
  • Target runs Windows with Defender active (default on all Windows)
Where this breaks in practice:
  • Requires prior initial access — this is a post-compromise tool, not a first-stage exploit
Detection/coverage: EDR/XDR telemetry on initial access vector (phishing, RDP brute-force, etc.)
STEP 02

Register rogue cloud sync provider

The attacker calls CfRegisterSyncRoot from the Cloud Filter API (cfapi) to register a fake cloud provider named 'Flubber' and creates a placeholder file. This is an unprivileged, documented Windows API — no elevation or special tokens needed. The placeholder file will serve as the bait that triggers Defender's scan pipeline. Tools: ShieldBreak PoC (public, by Chaotic Eclipse / Nightmare Eclipse).
Conditions required:
  • Cloud Filter API available (present on Win10 1709+ and all Server 2019+)
  • Defender is running and scanning (default state)
Where this breaks in practice:
  • CfApi is legitimate and widely available — no friction here
  • API call is not typically monitored by most EDR rulesets
Detection/coverage: Monitor for unusual CfRegisterSyncRoot calls from non-OneDrive/non-known-provider processes. No mainstream EDR signature exists as of October 2026.
STEP 03

Trigger Defender scan with EICAR payload

The rogue cloud provider's callback delivers EICAR test-file content when Defender hydrates the placeholder for scanning. This forces Defender into its remediation pipeline — the engine detects 'malware' and initiates privileged cleanup actions. The EICAR trigger is deterministic (Defender must detect it by specification), making this step 100% reliable.
Conditions required:
  • Defender Real-Time Protection or scheduled scan is active
  • EICAR detection is mandatory per industry spec — cannot be disabled
Where this breaks in practice:
  • None — EICAR detection is guaranteed behavior
Detection/coverage: Defender will log an EICAR detection event (Event ID 1116). This is expected to be noisy and is not itself malicious.
STEP 04

Redirect via Object Manager symlinks + CLFS manipulation

While Defender processes the remediation, the attacker creates symbolic links in the \BaseNamedObjects\Restricted\ namespace using undocumented NT APIs (NtCreateDirectoryObjectEx, NtCreateSymbolicLinkObject). Simultaneously, CLFS (Common Log File System) log manipulation swaps the identity of phoneinfo.dll in System32 with a malicious DLL payload. The attacker uses a UNC loopback path (\\127.0.0.1\C$ with an Alternate Data Stream) to exploit Defender's elevated write privileges. This is the core race — and ShieldBreak reports 100% success rate because the Object Manager redirect is deterministic, not timing-dependent like the original NTFS junction race.
Conditions required:
  • NT Object Manager namespace manipulation (unprivileged)
  • CLFS subsystem available (all supported Windows versions)
  • Defender's SYSTEM-level file operations follow the redirected path
Where this breaks in practice:
  • Microsoft's July patch hardened NTFS junctions but did NOT cover Object Manager namespace — this vector is unpatched
  • Race condition in ShieldBreak is deterministic, not probabilistic
Detection/coverage: Monitor for Object Manager namespace manipulation from non-SYSTEM processes. Tanium Signal: *Conhost Spawned Executable*. KQL: DeviceProcessEvents | where InitiatingProcessFileName =~ "MsMpEng.exe" with child shell processes at System integrity.
STEP 05

QueueReporting task loads malicious DLL → SYSTEM shell

The attacker starts the Windows Error Reporting scheduled task QueueReporting via Task Scheduler. This task runs as SYSTEM and loads the now-replaced phoneinfo.dll from System32. The malicious DLL coordinates via a named pipe (\\.\pipe\SHIELDBREAK) to deliver an interactive SYSTEM-level command shell to the attacker. Game over — full host compromise from any unprivileged account.
Conditions required:
  • QueueReporting task exists and is enabled (default on all Windows)
  • phoneinfo.dll has been successfully substituted in System32
Where this breaks in practice:
  • None — QueueReporting is a default scheduled task
  • Named pipe coordination is reliable and well-tested in the PoC
Detection/coverage: High-fidelity signal: child processes of wermgr.exe launched with -upload argument, or SYSTEM shells spawned by WER lineage. Monitor Report.wer file writes from non-SYSTEM processes in the WER ReportQueue path.
03 · Compensating Control

1
CRITICAL 9.0→HIGH 7.0
SEVERITY REDUCED
Deploy 0-byte phoneinfo.dll placeholder to System32 — ShieldBreak's final stage substitutes C:\Windows\System32\phoneinfo.dll with a malicious DLL. Pre-placing a 0-byte placeholder file with restrictive ACLs (SYSTEM:Full Control, Administrators:Read only, deny write to Users/Everyone) blocks the file-swap mechanism. Tanium Guardian provides an automated mitigation package with rollback. Deploy within 3 days per noisgate mitigation SLA for CRITICAL. Test on a pilot group first — phoneinfo.dll is a legitimate but rarely-used system binary; the placeholder should not cause functional impact on most systems.
2
CRITICAL 9.0→MEDIUM 5.5
SEVERITY REDUCED
Enforce WDAC or AppLocker application control on high-value endpoints — Windows Defender Application Control (WDAC) or AppLocker in enforced mode prevents unsigned or untrusted DLLs from loading, even if written to System32. This blocks the malicious phoneinfo.dll from executing via the QueueReporting task. Prioritize domain controllers, Hyper-V hosts, backup servers, and CI/CD agents. Deploy within 3 days on Tier 0/1 assets. Note: WDAC requires careful policy tuning to avoid blocking legitimate software.
3
CRITICAL 9.0→HIGH 7.5
SEVERITY REDUCED
Restrict symbolic link creation privileges — Remove SeCreateSymbolicLinkPrivilege from all non-administrative accounts via Group Policy (Computer Configuration → Windows Settings → Security Settings → Local Policies → User Rights Assignment → Create symbolic links). While ShieldBreak uses Object Manager symlinks rather than NTFS symlinks, reducing symlink creation rights raises the bar for both the original and variant exploitation paths. Deploy within 3 days.
4
CRITICAL 9.0→HIGH 7.8
SEVERITY REDUCED
Deploy behavioral detection for Defender-spawned shells — Create high-fidelity detection rules: (1) MsMpEng.exe spawning cmd.exe, powershell.exe, or pwsh.exe at System integrity level. (2) wermgr.exe child processes with -upload arguments. (3) Non-SYSTEM processes writing Report.wer to WER ReportQueue paths. KQL for Defender for Endpoint: DeviceProcessEvents | where InitiatingProcessFileName =~ "MsMpEng.exe" | where FileName in~ ("cmd.exe","powershell.exe","pwsh.exe") | where ProcessIntegrityLevel == "System". These are high-fidelity, low-false-positive signals. Deploy immediately.
5
CRITICAL 9.0→HIGH 7.5
SEVERITY REDUCED
Monitor for rogue Cloud Filter API registrations — ShieldBreak registers a cloud sync provider named 'Flubber' via CfRegisterSyncRoot. Monitor ETW provider Microsoft-Windows-CloudFiles-Filter for sync root registrations from unexpected processes (anything that isn't OneDrive, SharePoint, or known cloud storage clients). This is the earliest detection opportunity in the ShieldBreak chain. Deploy within 3 days.
What doesn't work
  • Updating Defender engine to the latest version — Engine v1.1.26060.3008 patches the original RoguePlanet NTFS junction vector, but ShieldBreak uses Object Manager namespace manipulation that the July patch does not cover. Fully patched systems remain vulnerable.
  • Signature-based AV/EDR detection of the PoC — Kudelski Security notes that "signature-based attempts to detect or block the PoC are largely ineffective because minor variations in the exploit bypass them." The exploit uses legitimate Windows APIs (CfApi, Task Scheduler, named pipes) that are not inherently malicious.
  • Disabling Real-Time Protection — The original RoguePlanet PoC "works regardless if real-time protection is on or not" per the researcher. Scheduled scans can also trigger the race. Disabling RTP also removes your primary AV coverage, trading one risk for another.
  • Tamper Protection — Tamper Protection prevents unauthorized changes to Defender settings, but CVE-2026-50656 does not modify Defender settings. It exploits Defender's own legitimate scanning behavior to perform privileged file operations. Tamper Protection does not prevent filesystem redirection via Object Manager symlinks.
  • Network segmentation / firewall rules — This is a local privilege escalation (AV:L). It requires no network access to exploit. Segmentation limits lateral movement after SYSTEM is obtained, but does not prevent the escalation itself.
04 · Intelligence Metadata

The supporting signals.

In-the-wild exploitationNo confirmed in-the-wild exploitation per CISA KEV or Microsoft advisories. However, Microsoft rated it "Exploitation More Likely" on the Exploitability Index. Arctic Wolf notes "initial weaponization appeared in early June 2026" and the original was a zero-day (disclosed before any patch existed). The ShieldBreak bypass re-opened the attack surface in August 2026 with no fix since.
Proof-of-concept availabilityTwo public, functional PoCs. (1) RoguePlanet by 0xBlackash on GitHub — original NTFS junction race, patched in July. (2) ShieldBreak by Chaotic Eclipse / Nightmare Eclipse — full patch bypass via Cloud Filter API + Object Manager symlinks, released August 12, 2026. ShieldBreak claims 100% success rate on Win11 25H2 and Server 2025. Both PoCs are weaponized (shell delivery), not just DoS or crash demos. The SecureWithUmer/CVE-2026-PoCs aggregator also tracks these.
EPSS score~3.4% (varies by source; some report up to 11.36%). This places the CVE in roughly the 85th–95th percentile of all scored CVEs. EPSS likely underweights the ShieldBreak bypass since it post-dates model training data.
KEV statusNot listed on CISA Known Exploited Vulnerabilities catalog as of 2026-10-01. Note: KEV requires confirmed in-the-wild exploitation, and Microsoft has not acknowledged wild use. However, the availability of two public weaponized PoCs with no patch makes exploitation a question of *when*, not *if*.
CVSS vector interpretationCVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H — Local attack vector, low complexity, low privileges required, no user interaction. Temporal: E:F (functional exploit exists), RL:U (remediation level unavailable — no vendor fix for ShieldBreak), RC:C (confirmed by vendor). The temporal modifiers, particularly RL:U, are the most alarming aspect — Microsoft has had no fix for nearly 7 weeks since the bypass dropped.
Affected version rangesAll Windows versions running Microsoft Malware Protection Engine: Windows 10 (all supported builds), Windows 11 (21H2 through 25H2 including Canary), Windows Server 2019/2022/2025. Engine versions < 1.1.26060.3008 are vulnerable to both RoguePlanet and ShieldBreak. Engine ≥ 1.1.26060.3008 is patched for RoguePlanet but still vulnerable to ShieldBreak.
Fixed versionsRoguePlanet (original): Fixed in engine v1.1.26060.3008 (July 9, 2026; auto-updates via Windows Update). ShieldBreak (bypass, CVE-2026-69414): No fix available as of 2026-10-01. Microsoft stated it was "working to provide a high quality security update" with no timeline.
Scanning / exposure dataNot applicable for GreyNoise/Shodan/Censys — this is a local privilege escalation, not a network-exposed service. However, the installed base is enormous: Defender is the default AV on every Windows installation worldwide (~1.4 billion+ active Windows devices per Microsoft). Enterprise exposure is effectively 100% of Windows endpoints unless a third-party AV has fully replaced Defender (and even then, Defender components may remain).
Disclosure timeline2026-06-10: Nightmare Eclipse publishes RoguePlanet PoC on GitHub (same day as June Patch Tuesday). 2026-06-16: Microsoft publishes CVE-2026-50656 advisory. 2026-07-09: Microsoft releases engine v1.1.26060.3008 patch. 2026-08-12: Chaotic Eclipse releases ShieldBreak full bypass PoC. 2026-08-12: Microsoft assigns CVE-2026-69414 to ShieldBreak. 2026-10-01: Still no ShieldBreak fix.
Researcher / disclosureChaotic Eclipse (aliases: Nightmare Eclipse, NightmareEclipse, INFINITE NIGHTMARE, MSNightmare). Uncoordinated disclosure — no prior notification to Microsoft. Previously released BlueHammer, RedSun (Windows LPE), UnDefend (Defender DoS), YellowKey (BitLocker bypass), and GreenPlasma (CTFMON EoP). Described as having a personal dispute with Microsoft. Microsoft has not credited the researcher and previously warned about "pursuing cases involving criminal activity."

Sources.

  1. Arctic Wolf — CVE-2026-50656 RoguePlanet / ShieldBreak Advisory
  2. Help Net Security — Microsoft working on patch for RoguePlanet zero-day
  3. The Hacker News — ShieldBreak Zero-Day PoC Claims Defender Patch Bypass
  4. Tanium — ShieldBreak: The Windows Defender 0-Day with No Patch
  5. Kudelski Security — RoguePlanet Zero Day MS Defender Privilege Escalation
  6. Cryptron Security — ShieldBreak In-Depth Analysis
  7. GitHub — 0xBlackash/CVE-2026-50656 PoC Repository
  8. Penligent — CVE-2026-50656 RoguePlanet Technical Walkthrough
05 · The Call

Final Verdict
↑ UPGRADED to CRITICAL (9.0/10)

Why this verdict

  • Universal deployment surface: Microsoft Defender / Malware Protection Engine is the default AV on every Windows endpoint. This is not a niche component — it runs as SYSTEM on ~100% of the Windows installed base. Any attacker who lands *anywhere* on *any* Windows box with Defender gets this escalation primitive for free. The vendor's AV:L / PR:L friction is real but non-narrowing: it doesn't limit the *population* of reachable targets, it limits the *stage* of the kill chain. Once past initial access (the baseline assumption for every real intrusion), the entire fleet is exposed.
  • Role multiplier — kernel-mode security agent (canonical high-value component): Defender is explicitly in the high-value-role catalog as an AV/EDR agent running with SYSTEM. ≥10% of installs (actually ~100%) occupy this role by definition. The chain succeeds on all tested platforms with 100% reliability. On domain controllers running Defender: SYSTEM → DCSync / credential extraction → full domain takeover (blast radius: domain → fleet). On Hyper-V hosts: SYSTEM → hypervisor escape risk / VM management compromise (blast radius: fleet). On backup servers (Veeam, Commvault on Windows): SYSTEM → backup destruction / ransomware (blast radius: fleet + DR). On CI/CD build agents: SYSTEM → supply-chain poisoning (blast radius: supply chain). Per the hard rule, the verdict floor is CRITICAL because the affected component is canonically a high-value-role component and the chain ends in domain/fleet/supply-chain compromise.
  • No remediation available (RL:U): The ShieldBreak bypass (August 12, 2026) fully defeats the only available patch (engine v1.1.26060.3008). Microsoft has provided no timeline for a fix. As of October 1, 2026, every Windows endpoint running Defender is vulnerable regardless of patch level. This is now a 50-day-old unpatched zero-day with public weaponized exploit code.
  • Exploit reliability eliminates AC:L friction: The original RoguePlanet used a TOCTOU race with probabilistic success. ShieldBreak replaced the race with deterministic Object Manager namespace manipulation and claims 100% success rate. The "race condition might fail" friction is gone.
  • Two weaponized public PoCs lower the barrier to mass exploitation: Both RoguePlanet (GitHub) and ShieldBreak are publicly available, documented, and functional. Any red teamer, ransomware operator, or insider can download and run them today. Signature-based detection is "largely ineffective because minor variations in the exploit bypass them" per Kudelski Security.

Why not higher?

A score above 9.0 would imply unauthenticated remote code execution or wormable capability. CVE-2026-50656 requires local authenticated access (PR:L), meaning it cannot be exploited remotely without a prior foothold. It is a post-compromise amplifier, not an initial access vector. The Scope is Unchanged (S:U), so a single exploitation grants SYSTEM on the local host only — lateral movement requires additional steps. These constraints cap the score below 9.5–10.0.

Why not lower?

A HIGH (7.8) or lower rating ignores the deployment-role blast radius floor. Defender is the canonical AV/SYSTEM-privilege security agent on every Windows box — this IS the high-value-role component. The chain succeeds reliably (100%) and there is no patch available. Any downgrade below CRITICAL requires evidence that <10% of the installed base occupies a high-value role, but Defender's installed base IS the high-value role (it is the security agent). The public, weaponized, unpatched state with functional exploit code and no vendor timeline for a fix makes any rating below CRITICAL indefensible for a fleet of 10,000 Windows hosts.

06 · Verification

Crowdsourced verification payload.

Run on each target Windows host as any local user (no admin required for read checks). Open PowerShell and execute: .\Check-CVE202650656.ps1. The script checks whether Defender is active, reports the engine version, and tests for the ShieldBreak phoneinfo.dll mitigation placeholder. Exit code 1 = VULNERABLE, 0 = PATCHED, 2 = UNKNOWN.

noisgate-verify.ps1
POWERSHELLREAD-ONLYSAFE
#Requires -Version 5.1
<#
.SYNOPSIS
    Check-CVE202650656.ps1 — Detect exposure to CVE-2026-50656 (RoguePlanet / ShieldBreak)
.DESCRIPTION
    Checks Microsoft Defender Malware Protection Engine status and version,
    determines vulnerability to both the original RoguePlanet vector and the
    ShieldBreak patch bypass (CVE-2026-69414).
    Output: VULNERABLE / PATCHED / UNKNOWN
    Exit codes: 1 = VULNERABLE, 0 = PATCHED, 2 = UNKNOWN
#>

$ErrorActionPreference = 'SilentlyContinue'
$result = 'UNKNOWN'
$details = @()

# Check if Defender service is running
$defenderService = Get-Service -Name WinDefend -ErrorAction SilentlyContinue
if (-not $defenderService -or $defenderService.Status -ne 'Running') {
    $details += 'Microsoft Defender service (WinDefend) is not running.'
    # Check if MsMpEng.exe is present at all
    $mpEng = Get-Process -Name MsMpEng -ErrorAction SilentlyContinue
    if (-not $mpEng) {
        $details += 'MsMpEng.exe not found in running processes.'
        $details += 'System may use a third-party AV — Defender engine not active.'
        $result = 'UNKNOWN'
        Write-Host "[*] $($details -join ' ')" -ForegroundColor Yellow
        Write-Host "[$result] Cannot determine vulnerability — Defender not active." -ForegroundColor Yellow
        exit 2
    }
}

# Get Defender engine version via Get-MpComputerStatus
try {
    $mpStatus = Get-MpComputerStatus -ErrorAction Stop
    $engineVersion = $mpStatus.AMEngineVersion
    $platformVersion = $mpStatus.AMServiceVersion
    $rtpEnabled = $mpStatus.RealTimeProtectionEnabled
    $details += "Engine version: $engineVersion"
    $details += "Platform version: $platformVersion"
    $details += "Real-Time Protection: $rtpEnabled"
} catch {
    $details += 'Unable to query Get-MpComputerStatus (may require elevation).'
    # Fallback: check registry
    $regPath = 'HKLM:\SOFTWARE\Microsoft\Windows Defender\Signature Updates'
    $regEngine = (Get-ItemProperty -Path $regPath -Name 'EngineVersion' -ErrorAction SilentlyContinue).EngineVersion
    if ($regEngine) {
        $engineVersion = $regEngine
        $details += "Engine version (registry): $engineVersion"
    } else {
        $details += 'Cannot determine engine version.'
        Write-Host "[*] $($details -join ' | ')" -ForegroundColor Yellow
        Write-Host "[UNKNOWN] Cannot determine Defender engine version." -ForegroundColor Yellow
        exit 2
    }
}

# Parse engine version for RoguePlanet patch check
$patchedEngine = [version]'1.1.26060.3008'
try {
    $currentEngine = [version]$engineVersion
    $roguePlanetPatched = $currentEngine -ge $patchedEngine
} catch {
    $roguePlanetPatched = $false
    $details += 'WARNING: Could not parse engine version for comparison.'
}

# Check for ShieldBreak mitigation: phoneinfo.dll placeholder
$phoneInfoPath = "$env:SystemRoot\System32\phoneinfo.dll"
$shieldBreakMitigated = $false
if (Test-Path $phoneInfoPath) {
    $fileInfo = Get-Item $phoneInfoPath -ErrorAction SilentlyContinue
    if ($fileInfo.Length -eq 0) {
        $shieldBreakMitigated = $true
        $details += 'ShieldBreak mitigation: 0-byte phoneinfo.dll placeholder FOUND.'
    } else {
        # Check if it is the legitimate Microsoft-signed phoneinfo.dll
        $sig = Get-AuthenticodeSignature $phoneInfoPath -ErrorAction SilentlyContinue
        if ($sig -and $sig.Status -eq 'Valid' -and $sig.SignerCertificate.Subject -like '*Microsoft*') {
            $details += "phoneinfo.dll present (legitimate, $($fileInfo.Length) bytes, Microsoft-signed). ShieldBreak mitigation NOT applied."
        } else {
            $details += "WARNING: phoneinfo.dll present ($($fileInfo.Length) bytes) but NOT Microsoft-signed — possible compromise indicator!"
        }
    }
} else {
    $details += 'phoneinfo.dll not present in System32. ShieldBreak mitigation NOT applied.'
}

# Determine overall status
if (-not $roguePlanetPatched) {
    $result = 'VULNERABLE'
    $details += 'VULNERABLE to BOTH RoguePlanet (original) AND ShieldBreak (bypass). Engine below v1.1.26060.3008.'
} elseif ($roguePlanetPatched -and -not $shieldBreakMitigated) {
    $result = 'VULNERABLE'
    $details += 'RoguePlanet (original) patched, but VULNERABLE to ShieldBreak bypass (CVE-2026-69414). No vendor fix available.'
} elseif ($roguePlanetPatched -and $shieldBreakMitigated) {
    $result = 'PATCHED'
    $details += 'RoguePlanet patched (engine updated) and ShieldBreak mitigated (phoneinfo.dll placeholder). Note: ShieldBreak mitigation is a workaround, not a vendor fix.'
}

# Output
$color = switch ($result) {
    'VULNERABLE' { 'Red' }
    'PATCHED'    { 'Green' }
    default      { 'Yellow' }
}

Write-Host ''
Write-Host '=== CVE-2026-50656 (RoguePlanet / ShieldBreak) Check ===' -ForegroundColor Cyan
foreach ($d in $details) {
    Write-Host "  [*] $d" -ForegroundColor Gray
}
Write-Host ''
Write-Host "[$result] CVE-2026-50656" -ForegroundColor $color
Write-Host ''

# Exit code
switch ($result) {
    'VULNERABLE' { exit 1 }
    'PATCHED'    { exit 0 }
    default      { exit 2 }
}