1. 개요
본 보고서는 Microsoft Windows Server 운영체제의 Windows Remote Desktop Licensing Service(이하 RDL)에서 발생하는 CVE-2024-38077 원격 코드 실행(Remote Code Execution, RCE) 취약점에 대해 다룬다. 인증되지 않은 공격자가 네트워크를 통해 RDL 서비스에 연결하여 원격 코드 실행을 허용할 수 있는 악성 메세지를 전송할 수 있다. 이 취약점은 피해 시스템에 대한 인증이나 상호작용이 필요 없는 0-Click 형태이고, 외부 네트워크에서 접근할 수 있는 RDL 서비스 하나만 존재하면 공격이 가능하다. 따라서, 시스템에 미칠 수 있는 영향이 중대해 CVSS 점수가 9.8로 지정되었다.
본 보고서는 CVE-2024-38077 취약점의 근본 원인을 심층 분석하고, 이에 대한 방어 및 완화 전략을 제시한다.
2. 취약점 근본 원인 분석
항목 | 내용 |
취약점 번호 | CVE-2024-38077 |
취약점 이름 | Windows Remote Desktop Licensing Service Remote Code Execution Vulnerability |
취약점 종류 | Remote Code Execution |
CWE | Heap-based Buffer Overflow |
CVSS | 9.8(/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H/E:U/RL:O/RC:C) |
CVE-2024-38077은 Heap-based Buffer Overflow 취약점이다. 이 취약점을 활용해 힙 메모리 베이스 주소, 함수의 주소 등을 유출해 보안 기능인 ASLR을 무력화 할 수 있고, CFG를 우회해 최종적으로 원격 코드 실행 공격까지 수행할 수 있다.
2.1. lserver!CDataCoding::DecodeData() 함수의 취약성
[그림 1] RPCView로 조회한 RPC 함수 번호 및 함수 주소
lserver!TLSRpcTelephoneRegisterLKP() 함수는 opnum 49를 갖는 RPC 함수다.
[그림 2] lserver!CDataCoding::DecodeData() 호출 스택
lserver!TLSRpcTelephoneRegisterLKP 호출 시 내부적으로 lserver!CDataCoding::DecodeData() 함수를 호출하게 되고, 이 함수는 RPC 함수의 파라미터로 입력한 Base24로 인코딩된 유니코드 문자열을 원본 바이너리 데이터로 디코딩 한다.
long long __fastcall CDataCoding::DecodeData(wchar_t* pSrcEncodedBuffer, unsigned char** pDstDecodedBuffer, unsigned int* pOutputSize)
{
HANDLE hHeap;
wchar_t* pCurrentEncodedChar;
unsigned char* pDecodedBuffer;
unsigned char* pCurrentDecodeBuffer;
__int64 decodedChar;
int currentIdx;
long long decodeDelta;
unsigned int tmp;
wchar_t Base24Chars[] = L"BCDFGHJKMPQRTVWXY2346789";
currentIdx = 0;
if (pDstDecodedBuffer != NULL) {
*pOutputSize = 0;
*pDstDecodedBuffer = 0;
hHeap = GetProcessHeap();
pDecodedBuffer = (unsigned char*)HeapAlloc(hHeap, 8, 21);
if (pDecodedBuffer != NULL) {
memset(pDecodedBuffer, 0x00, 21);
// 인코딩된 문자열을 순회하여 디코딩 후 힙 메모리에 복사하는 코드
// pSrcEncodedBuffer에서 NULL 바이트를 만날 때 까지 반복하지만
// pSrcEncodedBuffer의 길이를 검사하지 않는다
while (*pSrcEncodedBuffer != NULL) {
pCurrentEncodedChar = wcschr(Base24Chars, *pSrcEncodedBuffer);
if (pCurrentEncodedChar == NULL) {
hHeap = GetProcessHeap();
HeapFree(hHeap, 0, pDecodedBuffer);
return ERROR_INVALID_DATA; // 0xD
}
decodedChar = pCurrentEncodedChar - Base24Chars;
pCurrentDecodeBuffer = pDecodedBuffer;
decodeDelta = currentIdx + 1;
do {
tmp = 18 * *pCurrentDecodeBuffer + decodedChar;
*pCurrentDecodeBuffer++ = tmp;
LODWORD(decodedChar) = tmp >> 8;
--decodeDelta;
} while (decodeDelta);
// 실질적으로 문자열을 힙 메모리에 복사하는 코드
// 21 바이트의 힙 메모리 범위를 넘어서 복사하게 된다
if (decodedChar != NULL)
pDecodedBuffer[++currentIdx] = decodedChar;
++pSrcEncodedBuffer;
}
*pOutputSize = 21;
*pDstDecodedBuffer = pDecodedBuffer;
}
else {
return ERROR_NOT_ENOUGH_MEMORY; // 0x8
}
}
else {
return ERROR_INVALID_PARAMETER; // 0x57
}
return ERROR_SUCCESS; // 0x0
}
C++
복사
[코드 1] lserver!CDataCoding::DecodeData() 함수 코드
이 때, [코드 1]을 살펴보면, lserver!CDataCoding::DecodeData() 함수 내부에는 파라미터의 인코딩된 문자열의 길이를 검사하지 않는다는 사실을 확인할 수 있다. 이 함수는 21 바이트의 힙 메모리를 생성하는데, 길이를 검사하지 않는다. 또한, pSrcEncodedBuffer는 공격자가 제어할 수 있는 RPC 스텁에 포함된다. 따라서, 21 바이트의 힙 메모리 할당 범위를 넘어서 Heap-based Buffer Overflow 공격이 가능하다.
2.2. 원격 코드 실행 과정
[그림 8] CVE-2024-38077 요약
3. 검증 결과 및 시연
[동영상 1] CVE-2024-38077 원격 코드 실행 시연 영상
CVE-2024-38077은 LFH Delay Free라는 새로운 취약점 공격 완화 기법이 적용된 Windows Server 2025에서도 트리거가 가능하다. 이 취약점을 최초로 보고한 보안 연구원은 힙 스프레이 과정에서 일부 메모리를 해제 후 약 5초의 딜레이를 부여하는 아이디어를 제시했다.
LoadLibraryA(), CreateProcess() 와 같은 함수의 인자가 공격자의 원격 SMB 서버에 존재하는 악성코드 경로를 가르키도록 하는 방식으로 원격 코드 실행을 구현할 수 있다.
단, 취약점이 일어나는 NT AUTHORITY\NETWORK SERVICE 세션은 윈도우 운영체제 구조 상 낮은 권한이 부여되어 있어 추가 공격을 수행하기 위해서 공격 목표에 따라 권한 상승 취약점이 추가로 필요할 수도 있다.
4. 공격 영향
본 취약점은 원작자가 PoC의 중요한 부분을 가려 사용 가능한 PoC가 공개되지 않았지만, RPC에 대해 높은 이해도를 가진 공격자는 공개된 부분 만으로도 취약점을 악용하는 코드를 개발할 수 있다. 이 취약점을 성공적으로 악용할 경우 공격자는 NT AUTHORIY\NETWORK SERVICE 권한으로 원격 코드 실행할 수 있으며, 이는 다음과 같은 심각한 위협으로 이어질 수 있다.
•
시스템 장악: 공격자는 서버의 데이터에 접근하고 시스템 설정을 임의로 변경하는 등 제어 권한을 획득할 수 있다.
•
추가 악성코드 감염: 랜섬웨어를 통해 데이터를 암호화하거나, 암호화폐 채굴 악성코드를 설치하여 시스템 자원을 무단으로 사용, 트로이 목마 악성코드를 설치해 민감한 데이터를 유출하는 등 추가적인 악성 행위가 가능하다.
•
네트워크 수평 이동: 공격자는 감염된 서버를 교두보로 삼아, 동일 네트워크에 연결된 다른 내부 시스템을 공격하는 수평 이동(Lateral Movement)을 시도할 수 있다.
5. 완화 및 권고사항
Product | 취약점 영향 버전 |
Microsoft Windows Server 2008 | 6.0.6003.22769 이전 버전 |
Microsoft Windows Server 2008 R2 | 6.1.7600.27219 이전 버전 |
Microsoft Windows Server 2012 | 6.2.9200.24975 이전 버전 |
Microsoft Windows Server 2012 R2 | 6.3.9600.22074 이전 버전 |
Microsoft Windows Server 2016 | 10.0.14393.7159 이전 버전 |
Microsoft Windows Server 2019 | 10.0.17763.6054 이전 버전 |
Microsoft Windows Server 2022 | 10.0.20348.2582 이전 버전 |
Microsoft Windows Server 2022 23H2 | 10.0.25398.1009 이전 버전 |
Microsoft Windows Server | 나열되지 않은 모든 지원 종료된 버전 |
1.
즉각적인 보안 패치 적용: 보안 업데이트가 적용되지 않았고, RDL 서비스를 사용 중인 모든 윈도우 서버는 CVE-2024-38077에 취약하다. RDL 서비스를 사용 중인 시스템은 즉시 Microsoft의 지침에 따라 보안 패치를 적용해야 한다.
2.
방화벽을 통한 네트워크 접근 제어 강화: RDL 서비스는 DCERPC 포트인 TCP 135 포트를 사용한다. VPN을 사용하지 않은 경우 외부 네트워크에서 해당 포트에 접근할 수 없도록 보안 정책을 강화해야 한다. DCERPC 포트를 외부 네트워크에 개방하는 것은 본 취약점 외에도 예측하지 못한 다른 보안 위협에 시스템이 잠재적으로 노출될 가능성이 존재한다.
6. 결론
CVE-2024-38077은 클라이언트가 제어할 수 있는 버퍼 길이를 검사하지 않아 Heap-based Buffer Overflow 취약점이 발생했고, 이 취약점이 인증 과정 이전에 발생하기 때문에 인증이 필요 없는 0-Click RCE가 가능했다.
당사의 솔루션인 PurpleHound는 실전 기반 시나리오를 재구성하여 기업이 보유한 보안 장비와 시스템이 실제 공격에 얼마나 효과적으로 대응 가능한지 검증할 수 있도록 지원한다.
본 보고서에서 분석한 취약점 뿐만 아니라 다른 유형의 취약점, 악성코드 활동, 파일 시스템 조작 등 다양한 위협 시나리오를 직접 실행해보며 보안 인프라의 실효성을 객관적으로 확인할 수 있다.





