## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-0XABCD01-CVE-2026-41089
# CVE-2026-41089
root@kitploit:~
██████╗██╗ ██╗███████╗ ██╗ ██╗ ██╗ ██████╗ ██████╗
██╔════╝██║ ██║██╔════╝ ██║ ██║███║██╔═████╗██╔═████╗
██║ ██║ ██║█████╗ ███████║╚██║██║██╔██║██║██╔██║
██║ ╚██╗ ██╔╝██╔══╝ ██╔══██║ ██║████╔╝██║████╔╝██║
╚██████╗ ╚████╔╝ ███████╗ ██║ ██║ ██║╚██████╔╝╚██████╔╝
╚═════╝ ╚═══╝ ╚══════╝ ╚═╝ ╚═╝ ╚═╝ ╚═════╝ ╚═════╝
**Windows Netlogon 通过 CLDAP 栈缓冲区溢出实现远程代码执行**
   
* * *
一个精心构造的 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 许可证**