Sploitus

Exploit for CVE-2026-41089

kitploit · 2026-08-31

Exploit Code

MARKDOWN136 lines
## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-0XABCD01-CVE-2026-41089
# CVE-2026-41089

root@kitploit:~
    
    
     ██████╗██╗   ██╗███████╗    ██╗  ██╗ ██╗ ██████╗  ██████╗
    ██╔════╝██║   ██║██╔════╝    ██║  ██║███║██╔═████╗██╔═████╗
    ██║     ██║   ██║█████╗      ███████║╚██║██║██╔██║██║██╔██║
    ██║     ╚██╗ ██╔╝██╔══╝      ██╔══██║ ██║████╔╝██║████╔╝██║
    ╚██████╗ ╚████╔╝ ███████╗    ██║  ██║ ██║╚██████╔╝╚██████╔╝
     ╚═════╝  ╚═══╝  ╚══════╝    ╚═╝  ╚═╝ ╚═╝ ╚═════╝  ╚═════╝
    

**Windows Netlogon 通过 CLDAP 栈缓冲区溢出实现远程代码执行**

![CVSS](https://img.shields.io/badge/CVSS_3.1-9.8_CRITICAL-red?style=for-the-badge) ![CWE](https://img.shields.io/badge/CWE-121-orange?style=for-the-badge) ![Python](https://img.shields.io/badge/Python-3.8+-blue?style=for-the-badge&logo=python&logoColor=white) ![License](https://img.shields.io/badge/License-MIT-green?style=for-the-badge)

* * *

一个精心构造的 UDP 数据包发往端口 389,即可溢出任意未打补丁的 Windows 域控制器上 LSASS 内部的 528 字节栈缓冲区。该进程崩溃。域控制器约 60 秒后重启。无需任何身份验证。

|   
---|---  
**攻击向量**|  UDP 389 (CLDAP),预认证,零凭据  
**影响**|  LSASS 崩溃、DC 重启、潜在 RCE  
**CWE**|  CWE-121(基于栈的缓冲区溢出)  
**CVSS 向量**| `AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H`  
**发布时间**|  2026 年 5 月 12 日 by Microsoft  
  
* * *

## 快速开始

root@kitploit:~
    
    
    python3 poc.py 10.0.50.21 corp.local
    

三个阶段:正常 ping 确认 DC 存活,使用 130 字符用户名的溢出 ping,存活检测。整个过程约需 10 秒。

## 受影响系统

每个作为域控制器运行的 Windows Server 版本:

## 根本原因

`NlGetLocalPingResponse` 分配一个 528 字节的栈缓冲区并将其传递给 `BuildSamLogonResponse`。该函数调用 `NetpLogonPutUnicodeString` 将服务器名称、域名、GUID 以及攻击者控制的用户名写入缓冲区。

漏洞在于:`NetpLogonPutUnicodeString` 接收一个以字节为单位的最大长度,但将其视为 WCHAR 计数。通过此路径写入的每个字符串所占空间是预期的两倍。CLDAP 过滤中的 "User" 字段(最多 130 个 wchar,线路上 260 字节)将合并写入推过 528 字节边界。

root@kitploit:~
    
    
    I_NetLogonLdapLookupEx
      -> NlGetLocalPingResponse           // 528 字节栈缓冲区
        -> LogonRequestHandler
          -> BuildSamLogonResponse
            -> NetpLogonPutUnicodeString   // 字节/WCHAR 大小混淆
    

## 使用方法

root@kitploit:~
    
    
    python3 poc.py <target_ip> <domain_name> [options]
    

标志| 描述| 默认值  
---|---|---  
`-l`| 用户名字符长度| 130  
`-t`| UDP recv 超时(秒)| 5  
  
root@kitploit:~
    
    
    # 连通性测试(短用户名,无溢出)
    python3 poc.py 10.0.50.21 corp.local
    
    # 默认溢出尝试
    python3 poc.py 10.0.50.21 corp.local -l 130
    
    # 更大 payload,针对慢速网络使用更长超时
    python3 poc.py 10.0.50.21 corp.local -l 200 -t 10
    

需要 Python 3.8+。无需第三方包。

## 工作原理

  1. **阶段 1.** 使用用户名 "testuser" 的正常 CLDAP ping 确认目标在 UDP 389 上响应。
  2. **阶段 2.** 相同的数据包结构,但用户名改为 130+ 个 "A"。这会将序列化数据推过栈缓冲区边界。如果 LSASS 崩溃,recv 将超时。
  3. **阶段 3.** 在可配置的延迟后,第二次正常 ping 检查 DC 是否仍然存活。无响应 = 确认 LSASS 崩溃。



溢出触发拒绝服务(LSASS 崩溃,DC 重启)。通过栈损坏实现 RCE 在理论上可行。此 PoC 不尝试执行代码。

## 检测

**网络.** 扫描 CLDAP 流量,查找 "User" 过滤属性超过 20-30 个字符的搜索请求。正常的 DC 定位器 ping 使用服务帐户名称(短字符串)。

**主机.** 监控与 netlogon.dll 相关的 LSASS 崩溃(事件 ID 1000)。启用 Netlogon 调试日志:

root@kitploit:~
    
    
    nltest /dbflag:0x2080ffff
    

## 缓解措施

  * 安装 Microsoft 2026 年 5 月安全更新
  * 将 UDP 389 入站限制到受信任的管理子网
  * 对于超出 ESU 范围的旧版 Server:0patch 提供微补丁(单指令修复:`mov edx, 0x40` 将最大用户名长度减半)



## 参考

  * Microsoft Security Update Guide
  * NVD - CVE-2026-41089
  * 0patch Analysis and Micropatch
  * Aretiq AI Reverse Engineering
  * RFC 4511 - LDAP
  * MS-ADTS - CLDAP DC Locator



* * *

> **法律声明.** 此代码仅供授权的安全研究和教育使用。仅对你拥有或已获得明确书面许可的系统进行测试。未经授权访问计算机系统违反了 CFAA 及大多数司法管辖区的等效法律。

**MIT 许可证**