
CVE-2022-44666에 대한 기술 문서 및 개념 증명, Windows 연락처 syslink 컨트롤 href 속성 이스케이프 취약점으로 조작된 VCF/.contact 파일 및 LDAP 프로토콜 핸들러를 통해 원격 코드 실행을 가능하게 합니다.
이것은 4년 이상 전에 [John Page (hyp3rlinx)][R.1]가 완전히 공개한 또 다른 잊혀진 0day에 관한 이야기입니다. 보고서를 이해하려면 제가 멍청하다는 점을 감안해야 합니다 :-) 그리고 제 멍청함은 간단한 문제를 해결하는 데 더 긴 경로를 선택하게 만들지만, 동시에 어떤 버그를 악용하는 다른 방법을 찾게도 합니다. 왜 이런 말을 할까요? .contact 파일을 만드는 방법이 연락처 폴더로 이동하여 연락처를 생성하는 것임을 빨리 이해하지 못했기 때문입니다. 대신, 저는 이 정보를 사용하여 먼저 VCF 파일을 만든 다음, 이것이 일종의 변종이라고 잘못 생각했습니다. 이는 또한 제 뇌가 일부 0day가 그렇게 오랫동안 잊혀진다는 것을 이해하지 못하기 때문입니다 ¯\(ツ)/¯ 그렇게 한 후, [MSRC][R.2]와 [ZDI][R.3]의 "수정 불가" 답변 이후 추가 조사를 통해 심각도를 높였고, 마침내 .contact 파일과 Windows URL 프로토콜 핸들러 "ldap"에 도달했습니다.
[이 취약점][R.4]에 대한 익스플로잇 코드를 읽는 동안, 실제로 0day로 공개되었으며 [ZDI의 보고서][R.5]를 찾을 수 있습니다.
업데이트 2022/07/21: 이 사례를 MS에 보고한 후, MSRC 관계자들은 Windows 연락처가 VCF 파일을 여는 기본 프로그램이 아니라고 정확히 지적했습니다.

추가 연구 결과, Win7 ESU 및 WinServer2019에서 VCF 파일의 기본 프로그램은 Windows 연락처(wab.exe)이지만, 그 외의 경우 MS People(PeopleApp.exe)이 사용됨을 보여줍니다. 다음은 이 테스트의 전체 표입니다:
어쨌든 그들은 여전히 조작된 VCF 파일을 열고 일부 링크를 클릭하여 버그를 악용하는 사회 공학적 요소가 포함되어 있으므로 MSRC 보안 업데이트 기준을 충족하지 못한다고 주장합니다.

업데이트 2022/07/25: 음, 추가 연구 끝에 동일한 버그임을 확인했습니다. 마침내 .contact 파일의 개념 증명을 찾을 수 있었습니다. HTML 엔티티를 사용하여 .contact 파일을 올바르게 구문 분석하는 것이 실제로 가능합니다. 이는 이전 문제(2022/07/21 업데이트)를 해결하며, 이 파일 형식(.contact)은 시스템에 MS Office가 설치된 경우에도 Windows 연락처(이 파일 확장자의 기본 프로그램)에 의해 열립니다. 첫 번째 파일 연결이 아직 이루어지지 않은 경우에만 필요하며, 기본적으로 설치된 유일한 프로그램은 Windows 연락처입니다.
업데이트 2022/07/25: 이 추가 연구를 통해 얼마 전에 도달하려 했던 지점에 도달했습니다: URL 프로토콜 핸들러를 사용하여 조작된 연락처 데이터를 자동으로 열어 버그를 악용하는 것입니다. 마침내 ldap URI 체계 덕분에 작동시킬 수 있었습니다. 이는 기본적으로 Windows 연락처 애플리케이션과 연결되어 있습니다. 따라서 가짜 LDAP 서버를 설정하고 mail, url 또는 wwwhomepage 속성 아래에 페이로드 데이터를 제공하면, 악성 VCF/Contact 파일을 두 번 클릭할 필요가 없으므로 URL 프로토콜을 사용하여 이를 전달할 수 있어 익스플로잇 영향력이 증가합니다.
업데이트 2023/02/08: MSRC의 선의의 표시로, [John Page (hyp3rlinx)][R.1]가 [CVE-2022-44666][R.10] 발견에 대한 감사 페이지에 포함되었습니다.

보고서는 기본적으로 위 링크와 동일하지만, 관련된 사회 공학적 요소를 약간 개선했습니다. 사실, 제가 가장 먼저 한 일은 링크가 보이는 방식을 개선한 것입니다. 마치 XSS 취약점처럼, 실제로는 HTML 주입이므로 첫 번째 앵커 요소를 닫고 새 요소를 삽입할 수 있습니다. 그런 다음, 해당 HTML 요소의 가시성을 제거하기 위해 가능한 한 긴 "innerHTML"을 설정하여 숨기려고 했습니다(문자 제한이 있기 때문).
사용된 최종 페이로드는 다음과 같습니다:```html URL;WORK:">CLICKMEEEEE...
무슨 일이 일어나는지 확인하려면, procmon을 실행하고 href 속성의 가짜 대상을 다음과 같이 설정하세요:```html
URL;WORK:"></a><a href="https://github.com/j00sean/cve-2022-44666/blob/main/foo.exe">CLICKMEEEEE...</a>
링크를 클릭하면 procmon에서 다음과 같은 출력이 관찰됩니다:
