Служба Windows MIDI Services, которая обслуживает USB-устройства стандарта MIDI 2.0, содержит уязвимость, дающую обычной учётной записи полный контроль над системой. Речь о процессе midisrv.exe и его диагностическом канале, через который клиент обменивается данными со службой. Пользователь из группы BUILTIN\User без администраторских прав запускает подготовленную программу, получает выполнение кода от имени LOCAL SERVICE, а затем повышает права до SYSTEM. В финале на рабочем столе вошедшего пользователя открывается консоль с правами SYSTEM.
Уявзимость CVE-2026-62688
Приём, на котором строится атака, опирается на устройство разделяемой памяти. Диагностический транспорт выдаёт каждому подключённому клиенту пару кольцевых буферов: один несёт данные от клиента к службе, второй в обратную сторону. Каждый буфер занимает двухмегабайтную область с двойным отображением, а рядом лежит небольшая страница регистров. В ней хранятся позиции чтения и записи, которые клиент продвигает по мере отправки и приёма байтов MIDI. Страницу клиент отображает в своё адресное пространство и меняет в ней любые значения.
Две внутренние процедуры службы берут эти позиции и подставляют их как смещения от начала буфера, не проверяя верхнюю границу. Одна читает байты по адресу начала первого буфера плюс позиция чтения. Вторая копирует исходящее сообщение по адресу начала второго буфера плюс позиция записи. Поскольку оба значения приходят от клиента, нужные смещения задаёт сам атакующий. Единственная проверка выстроена как разность двух клиентских величин. Она обходится подбором: достаточно сделать позицию чтения больше позиции записи на требуемую величину, и условие проходит. Абсолютного ограничения нет ни на одну из позиций, поэтому запись можно направить по любому смещению от начала буфера, а чтение по любому смещению в обратную сторону.
Опасным любое смещение делает расположение буферов. Обе области отстоят от стека рабочего потока службы на фиксированные расстояния, которые не меняются при рандомизации адресного пространства (ASLR). На проверенной сборке размером 643 072 байта эти расстояния составляют примерно 2,6 и 4,7 мегабайта. Поэтому запись по произвольному смещению дотягивается до сохранённого адреса возврата на стеке. На той же сборке отключена технология контроля потока выполнения (CET), а в повреждённой процедуре нет стекового канареечного значения, то есть защиты /GS. Защита потока управления (CFG) на месте, однако она прикрывает только прямые вызовы и переходы, а перехват адреса возврата её обходит. Атакующий собирает цепочку возвратно-ориентированного программирования (ROP) из коротких фрагментов уже загруженного кода и переписывает адрес возврата на её начало.
Остаётся дождаться, когда служба сама передаст управление. Выбранная процедура не защищена канареечным значением и останавливается в пятисекундном ожидании, после чего возвращает управление прямо в подготовленную цепочку. Затем служба загружает библиотеку, заранее положенную злоумышленником во временную папку C:\Windows\Temp. Библиотека исполняется в контексте LOCAL SERVICE. У этой учётной записи есть право олицетворения (SeImpersonatePrivilege), то есть возможность действовать от имени другого пользователя, подключившегося к службе. Этим пользуются известные инструменты класса EfsPotato: они вынуждают службу олицетворить более привилегированную учётную запись и забрать её маркер доступа. На выходе получаются маркер SYSTEM, консоль на интерактивном рабочем столе и файлы, принадлежащие SYSTEM.
Уязвимость воспроизводится на предварительной сборке 29610.1000 ветки rs_prerelease, то есть в тестовой ветке Windows MIDI Services для USB-MIDI 2.0. Атака локальная: удалённо её не проводят, для запуска нужен вход в систему под обычной учётной записью. Для корпоративных рабочих мест и терминальных серверов такое ограничение мало что меняет. Если на одной машине работают несколько пользователей с разными правами, одного непривилегированного аккаунта достаточно. Злоумышленник забирает чужой маркер доступа, читает закрытые данные и закрепляется в системе надолго. При этом служба работает в фоне, поэтому сторонний наблюдатель почти не видит следов подготовки.
Microsoft закрыла проблему обновлением от 11 августа 2026 года. Администраторам нужно сверить номер сборки и убедиться, что исправление установлено. На тестовых стендах с предварительными выпусками проверку лучше не откладывать. Полезно также пересмотреть список учётных записей, которым разрешён локальный вход, и не держать на машине лишние права. Полностью закрыть класс таких атак на стороне пользователя нельзя. Основная ставка здесь - своевременная установка обновлений и контроль того, кто может запускать произвольный код локально.
Диагностические интерфейсы часто проектируют как удобный канал для отладки и тестов, и разделяемая память с клиентскими позициями выглядит дешёвым решением. Плата за такую простоту - доверие к данным, которые приходят от непривилегированного процесса. Пока служба уровня LOCAL SERVICE принимает от клиента смещения и не ограничивает их абсолютными значениями, одна ошибка в проверке даёт полный контроль над машиной. Фиксированные расстояния между структурами и стеком сами по себе защиты не дают, а интерфейсы, доступные обычному пользователю, требуют такой же строгой проверки входных данных, как сетевые.
Ссылки
- https://msrc.microsoft.com/update-guide/vulnerability/CVE-2026-62688
- https://www.nccgroup.com/research/technical-advisory-microsoft-windows-midi-service-module-escalation-of-privileges-cve-2026-62688/