
RPC 라이브러리의 원격 코드 실행 취약점
CVE-2022-26809 - 핵심 Windows 구성 요소(RPC)의 취약점으로, CVSS 점수 9.8을 받은 데에는 이유가 있습니다. 공격에 인증이 필요하지 않고 네트워크를 통해 원격으로 실행될 수 있으며, RPC 서비스의 권한으로 원격 코드 실행(RCE)이 가능합니다. RPC 서비스의 권한은 RPC 런타임을 호스팅하는 프로세스에 따라 달라집니다. 약간의 운이 따르는 이 치명적인 버그는 패치되지 않은 SMB를 실행하는 Windows 호스트에 접근할 수 있게 해줍니다. 이 취약점은 네트워크 외부에서 침입하기 위해, 그리고 네트워크 내부의 머신 간에도 악용될 수 있습니다.
CVE에 따르면 취약점은 Windows RPC 런타임, 즉 rpcrt4.dll이라는 라이브러리에 있으며, 이 런타임 라이브러리는 RPC 프로토콜을 사용하여 통신하는 클라이언트 및 서버 프로세스 모두에 로드됩니다. 우리는 버전 10.0.22000.434(3월)와 10.0.22000.613(패치됨)을 비교하여 변경 사항 목록을 추려냈습니다.
OSF_SCALL::ProcessResponse와 OSF_CCALL::ProcessReceivedPDU 함수는 성격이 유사합니다. 둘 다 RPC 패킷을 처리하지만, 하나는 서버 측에서 실행되고 다른 하나는 클라이언트 측에서 실행됩니다(SCALL 및 CCALL). OSF_SCALL::ProcessReceivedPDU를 비교 분석(diffing)하여 새 버전에 추가된 두 개의 코드 블록을 발견했습니다.


패치된 코드를 살펴보면, QUEUE::PutOnQueue 이후에 새로운 함수가 호출되었습니다. 새 함수를 조사하고 코드를 분석한 결과, 이 함수가 정수 오버플로우를 검사한다는 것을 알아냈습니다. 즉, 패치에 추가된 새 함수는 정수 변수가 예상 값 범위 내에 유지되는지 확인하기 위한 것입니다.

OSF_SCALL:GetCoalescedBuffer의 취약한 코드를 더 자세히 살펴보면, 정수 오버플로우 버그가 힙 버퍼 오버플로우로 이어질 수 있음을 알 수 있습니다. 이는 데이터를 채우기에 너무 작은 버퍼에 데이터가 복사되는 경우입니다. 이로 인해 버퍼의 경계를 넘어 힙에 데이터가 기록될 수 있습니다. 악용되면 이 기본 요소는 원격 코드 실행으로 이어집니다!
정수 오버플로우를 검사하는 동일한 호출이 다른 함수에도 추가되었습니다.
OSF_CCALL::ProcessResponse OSF_SCALL::GetCoalescedBuffer OSF_CCALL::GetCoalescedBuffer
정수 오버플로우 취약점과 이를 방지하는 함수는 클라이언트 측 및 서버 측 실행 흐름 모두에 존재합니다.
아직 개발 중이며, 예상 완료 시기는 없습니다.