CreateRCE - CreateUri의 또 다른 취약점
Executive Summary
Akamai 연구원 벤 바네아(Ben Barnea)는 Microsoft Windows에서 CVE-2023-35628로 지정된 심각한 취약점을 발견했습니다.
인터넷상의 공격자는 사용자 상호 작용 없이(제로 클릭) Outlook 클라이언트를 대상으로 이 취약점을 유발할 수 있습니다.
취약점은 CreateUri 함수에 의한 경로 구문 분석에 있습니다. 현재 이 취약점을 유발하는 것으로 알려진 2가지 방법은 (1) 조작된 이메일을 Outlook 클라이언트로 보내거나 (2) 사용자가 파일 탐색기를 통해 다운로드한 악성 파일이 포함된 폴더로 이동하도록 유도하는 것입니다.
이 취약점은 Microsoft에 공개되었으며 2023년 12월 패치 화요일에서 해결되었습니다.
2023년 12월 소프트웨어 업데이트가 설치된 Windows 머신은 이 취약점으로부터 보호됩니다. 또한 2023년 3월 소프트웨어 업데이트로 패치된 Exchange 서버를 사용하는 Outlook 클라이언트는 악용되는 기능으로부터 보호됩니다.
서론
Microsoft는 기업 안팎에서 어디에나 존재하기 때문에 공격자들에게 큰 (그리고 수익성이 높은) 표적이 되고 있습니다. 따라서 Akamai는 제품 및 프로토콜 제품군에 대한 광범위한 리서치를 통해 취약점을 발견하고 탐지 및 방어를 지원하는 툴을 구축했습니다 .
리서치의 일환으로 원래 취약점인 CVE-2023-23397에 대한 패치의 일부로 호출되는 WinAPI 함수 CreateUri 에서 새로운 RCE(Remote Code Execution) 취약점을 발견했습니다. 이전 RCE 취약점 체인은 2개의 취약점을 연결해 제로 클릭 RCE 프리미티브를 달성해야 했지만, 이 취약점은 그 자체로 제로 클릭을 달성할 수 있습니다. Outlook 외에도 파일 탐색기에서 취약점을 트리거하는 방법도 보여드리겠습니다.
취약점에 관한 이야기
2023년 3월 패치 화요일 의 일부로 해결된 취약점 중에는 러시아 국가 지원 공격자인 Forest Blizzard가 인터넷에서 악용한, Microsoft가 직접 발견한 중요한 Outlook 취약점( CVE-2023-23397할당)이 포함되어 있습니다 .
2023년 12월, Microsoft와 폴란드 사이버 사령부가 발표한 자료 에 따르면 최근 동일한 공격자가 이 취약점을 악용하려는 시도가 발견되었다고 합니다. 공격자는 이 취약점을 통해 강제로 Outlook 클라이언트가 공격자의 서버에 연결하도록 할 수 있습니다. 이 연결의 일부로 클라이언트는 공격자에게 NTLM 인증정보를 전송하고, 공격자는 이를 오프라인에서 크래킹하거나 릴레이 공격에 사용할 수 있습니다. 이 취약점은 사용자 상호 작용 없이(제로 클릭) 인터넷에서 원격으로 악용될 수 있습니다.
취약점에 대한 패치가 릴리스된 후 사운드 파싱 취약점과 함께 2가지 우회 방법 이 발견되었습니다. 우회 방법과 구문 분석 취약점을 모두 연결하면 Outlook 클라이언트에서 완전한 제로 클릭 RCE 프리미티브가 발생할 수 있습니다.
MapUrlToZone
Outlook 취약점 CVE-2023-23397에 대한 패치의 일부로 사용자 지정 알림음을 처리하는 코드는 MapUrlToZone에 대한 호출을 추가합니다. 이 호출은 확장된 MAPI 속성인 PidLidReminderFileParameter를 통해 지정된 제공된 URL이 인터넷 리소스를 가리키지 않는지 확인합니다.
이렇게 하면 초기 취약점은 방어되지만, 새로운 공격표면인 MapUrlToZone 함수가 추가되고 MapUrlToZone으로 전달되는 경로를 제어하게 됩니다.
MapUrlToZone이 수행하는 구문 분석의 일부로 CreateUri를 호출합니다. CreateUri CreateUri는 유니폼 리소스 식별자(URI)를 나타내는 IUri 오브젝트를 생성합니다. 오브젝트를 생성하기 위해 이 함수는 URL과 일부 DOS Windows 경로를 모두 구문 분석할 수 있습니다 .
파일 경로(예: file:// 스킴 또는 파일/디렉토리를 가리키는 Windows 경로 사용)로 CreateUri 를 호출하면 CrackUrlFile 함수가 호출됩니다. 이 함수는 이전 블로그 게시물에서 설명한 우회 방법이 포함된 함수이기도 합니다.
새로운 취약점
CrackUrlFileCrackUrlFile이 시작될 때 Windows 경로가 아닌 URL을 받으면 입력의 복사본을 만든 다음 PathCreateFromUrlW를 사용해 URL 복사본을 Windows 경로로 변환합니다. 작업 버퍼는 동적으로 할당된 것으로 표시되므로 나중에 버퍼를 해제해야 한다는 것을 알 수 있습니다. 함수가 Windows 경로를 받으면 입력 경로에서 직접 작동하므로 포인터를 해제할 필요가 없습니다.
예를 들어 로컬 디바이스 경로(‘\\.\’ 또는 ‘\\?\’로 시작)인 경우 함수는 작업 버퍼를 구문 분석하는 동안 포인터를 4자씩 전진시킬 수 있습니다. 그런 다음 디바이스 이름이 UNC\’인 경우 4자 더 전진합니다. 백슬래시가 여러 개 있는 경우 이 함수는 중복된 백슬래시를 지나 버퍼를 전진시킵니다.
우회 방법에 대한 패치를 되돌리던 중 2023년 7월에 CrackUrlFile 에 우회 방법과 관련이 없는 것으로 보이는 새로운 코드가 추가된 것을 발견했습니다(그림 1).
이 함수는 경로 구문 분석의 일부로, 경로 구성요소가 드라이브 경로인지 또는 루트 경로인지 확인합니다. 그렇다면 경로를 로컬 경로로 표시합니다. 경로가 드라이브 경로인 경우 새 코드는 경로 구성요소(전진된 버퍼)에 대한 포인터로 원래 버퍼 포인터를 재정의합니다.
이것이 버그의 원인입니다. 전진된 포인터가 저장된 것입니다. 나중에 동적으로 할당된 경우 원래 버퍼 포인터(그림 1의PPWorkingBuffer )가 검색되고 해제됩니다. 고급 포인터로 재정의되었으므로 malloc에서 반환되지 않은 포인터로 free() 호출이 발생합니다. 이로써 공격자는 메모리 할당자에게 악성 청크의 메타데이터를 제공할 수 있는 프리미티브를 얻게 됩니다.
이 취약점이 트리거되려면 먼저 파일 체계 URL을 UNC 경로와 함께 지정해야 합니다. 그런 다음 경로를 드라이브 경로로 표시해야 하므로 공유(C:)를 사용해야 합니다. 취약점을 트리거하는 전체 경로는 다음과 같습니다.
file://./UNC/C:/Akamai.com/file.wav
수정된 코드는 이제 포인터를 저장하는 대신 RtlMoveMemory를 사용해 경로 구성요소의 바이트를 복사합니다.
탐색기를 통한 트리거
이러한 위치를 찾는 것은 리서치 범위를 벗어났지만, 한 가지 간단한 시도를 해보았습니다. 바로 Windows 탐색기를 통해 트리거하는 것입니다.
이를 위해 취약한 경로를 가리키는 바로 가기(.lnk 파일)를 만들었습니다. 피해자가 바로 가기 파일이 있는 디렉터리를 확인하면 탐색기에서 취약점이 트리거되어 즉각적인 충돌이 발생합니다(그림 2).
사용 중인 머신이 이 문제에 취약한지 테스트하고 싶다면 탐색기를 다운시키는 PoC(Proof of Concept) 를 다운로드할 수 있습니다. (사용하기 전에 보안 리서치 리포지토리 에서 PoC에 대한 세부 사항과 리스크를 주의 깊게 읽어보세요.)
요약
이 글은 CVE-2023-23397의 잠재적 영향에 대한 리서치에 대한 마지막 블로그 게시물입니다.
2023년 5월에 첫 번째 우회 방법을 발견했을 때, MapUrlToZone 을 사용하면 새로운 공격표면이 추가되므로 악용된 기능을 제거할 것을 권장했습니다. 또한 샌드박스 없이 제로 클릭 방식으로 원격 공격자에게 사운드 구문 분석 공격표면을 노출하는 것은 사용자에게 가치보다 더 많은 위험을 초래할 수 있다고 언급했습니다.
후속 리서치에서는 두 가지 우회 방법을 찾아내고, 사운드 구문 분석 문제를 찾아내고, 마지막으로 Windows 경로 구문 분석 메모리 손상을 찾아냄으로써 이를 정확히 증명할 수 있었습니다.
이 게시물을 통해 Windows 경로, 사운드 코덱, 다양한 취약점에 대해 새로운 사실을 알게 되셨기를 바랍니다. 다른 연구자들도 패치를 살펴보고 이를 우회할 수 있는 방법을 생각해 보시기 바랍니다. 더 많은 MapUrlToZone 우회 방법이 존재할 가능성도 배제할 수 없습니다.