
PoC для CVE-2026-58635: локальное повышение привилегий через Windows Narrator Braille
Доказательство концепции для CVE-2026-58635 — уязвимости внедрения команд в шрифте Брайля Windows Narrator. Локальный аутентифицированный пользователь может использовать записываемый параметр BrlAPI, чтобы заставить привилегированную службу BRLTTY выполнить произвольную программу.
Корпорация Майкрософт оценивает уязвимость как Важную с рейтингом CVSS 3.1 7.8 (CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H) и относит её к CWE-77.
Этот репозиторий предназначен только для авторизованного тестирования в изолированной лаборатории. Не запускайте его на производственных системах или на системах, которыми вы не владеете или не управляете.
PoC проходит по следующему пути:
обычный пользователь
-> запускает локально доступную службу BrlAPI
-> подключается к localhost:0 с auth=none
-> записывает глобальный параметр BrlAPI 29 (таблица литерального шрифта Брайля)
-> BRLTTY интерпретирует путь к исполняемому файлу как внешнюю таблицу сокращений
-> BRLTTY запускает предоставленную программу от имени LocalService
-> опциональный этап с токеном SeImpersonate
-> интерактивная командная строка SYSTEM
Примитив, специфичный для CVE, завершается произвольным выполнением от имени LocalService.
В проверенной конфигурации Windows этот токен имеет привилегию SeImpersonatePrivilege, поэтому в демонстрацию опционально включено использование SigmaPotato для получения токена SYSTEM и запуска видимой оболочки в активной консольной сессии.
BRLTTY 6.4.1 предоставляет BRLAPI_PARAM_LITERARY_BRAILLE_TABLE как глобальный и доступный для записи. Сервер передаёт предоставленную строку через свой загрузчик таблиц сокращений. На Windows путь, расширение которого присутствует в PATHEXT, обрабатывается как внешняя программа сокращений и запускается через запускатор команд хоста BRLTTY.
Триггер нормализует обычный путь Windows, например C:\lab\bin\localservice_stage.exe, в формат с косой чертой, ожидаемый в этой ветке обработки путей BRLTTY/MinGW. Никакие профили пользователей, буквы дисков, каталоги Windows или имена учётных записей не встроены в PoC.
Для существования проверенной поверхности атаки должна быть установлена опциональная возможность Accessibility.Braille. В записи Microsoft CNA перечислены несколько веток клиентских и серверных Windows как уязвимые ниже исправленных версий за июль 2026 года. Типичные примеры:
Номера сборок сами по себе являются лишь сигналом для проверки, но не заменяют собой консультации поставщика и инвентаризацию установленных компонентов. Используйте прилагаемую проверку только для чтения:
powershell -ExecutionPolicy Bypass -File .\scripts\Check-Vulnerability.ps1
Она сообщает:
brlapi.dll и brltty.exe;Проверка не запускает BrlAPI, не записывает параметр 29 и не выполняет полезную нагрузку.
.
├── bin/ Скомпилированные бинарные файлы PoC и SigmaPotato
├── scripts/
│ ├── Check-Vulnerability.ps1 Проверка уязвимости/сборки (только чтение)
│ ├── Clear-Results.cmd Удаление сгенерированных файлов результатов
│ ├── Get-SigmaPotato.ps1 Загрузка и проверка хеша вспомогательного инструмента
│ ├── Prepare-Lab.ps1 Установка опциональной функции и настройка ACL лаборатории
│ └── Run-PoC.cmd Сквозная демонстрация от имени обычного пользователя
├── src/
│ ├── brlapi_trigger.cpp Клиент BrlAPI и запись параметра 29
│ ├── localservice_stage.cpp Подтверждение идентичности LocalService и опциональная цепочка
│ ├── path_util.h Вспомогательные функции для работы с путями во время выполнения
│ └── system_shell_launcher.cpp
├── third_party/SigmaPotato/ Версия, хеш, лицензия и авторство
├── Makefile
├── LICENSE
├── SHA256SUMS
└── NOTICE
Оригинальный PoC написан на C++17 и собирается с помощью цепочки инструментов MinGW-w64 x86-64.
В Debian или Ubuntu:
sudo apt install make g++-mingw-w64-x86-64
make
Сборка создаёт:
bin/brlapi_trigger.exe
bin/localservice_stage.exe
bin/system_shell_launcher.exe
Чтобы получить точную версию SigmaPotato, используемую в сквозной демонстрации, запустите из Windows:
powershell -ExecutionPolicy Bypass -File .\scripts\Get-SigmaPotato.ps1
Сценарий загрузки закрепляет выпуск v1.2.6 и проверяет SHA-256:
EC68A6BF7F104A815BD21E27E73A8DFB8AFCB282D4997BEBE9ECCD6C89259506
Из повышенной командной строки PowerShell в корне репозитория:
powershell -ExecutionPolicy Bypass -File .\scripts\Prepare-Lab.ps1
Этот сценарий:
Accessibility.Braille~~~~0.0.1.0, если он отсутствует;bin\results.Если возможность установлена, но служба ещё не зарегистрирована, перезагрузите компьютер и снова запустите сценарий подготовки.
Войдите в систему с любой локальной или доменной учётной записью, которая не является членом локальной группы администраторов. Репозиторий не создаёт пользователей и не задаёт пароли.
Продукты безопасности часто обнаруживают инструменты доказательства концепции, использующие олицетворение токенов. Настройте изолированную лабораторию в соответствии с политикой тестирования вашей организации перед размещением или запуском бинарных файлов. Не ослабляйте защиту конечных точек на обычной рабочей станции.
Из командной строки без повышенных привилегий:
scripts\Run-PoC.cmd
Ожидаемый вывод включает:
Connection: descriptor=<number> host=localhost:0 auth=none
Parameter 29 global write: 0
USER=LOCAL SERVICE
SID=S-1-5-19
Опциональный второй этап записывает свой вывод в bin\results\escalation.log. В случае успеха файл bin\results\system_shell_status.txt содержит CREATED=1, и открывается новое окно с заголовком CVE-2026-58635 SYSTEM SHELL. В этом окне:
whoami
должно вернуть:
nt authority\system
Все сгенерированные доказательства помещаются в bin\results:
Удалите сгенерированные результаты с помощью:
scripts\Clear-Results.cmd
Установите соответствующее обновление безопасности за июль 2026 года или более позднее накопительное обновление. Для Windows 11 24H2 и 25H2 корпорация Майкрософт предоставляет исправленные версии в KB5101650 (26100.8875 и 26200.8875). Если поддержка Брайля не требуется, удаление опциональной возможности также устраняет эту поверхность атаки:
Remove-WindowsCapability -Online -Name Accessibility.Braille~~~~0.0.1.0
После устранения снова запустите Check-Vulnerability.ps1 и убедитесь, что система соответствует исправленной версии или что компонент отсутствует.
| Ветка продукта | Потенциально уязвимые версии ниже | Известный исправленный уровень |
|---|
| Windows 10 1809 / Server 2019 | 17763.9020 | 17763.9020 или новее |
| Windows 10 21H2 | 19044.7548 | 19044.7548 или новее |
| Windows 10 22H2 | 19045.7548 | 19045.7548 или новее |
| Windows Server 2022 | 20348.5386 | 20348.5386 или новее |
| Windows 11 24H2 | 26100.8875 | 26100.8875 или новее |
| Windows 11 25H2 | 26200.8875 | 26200.8875 или новее |
| Windows 11 26H1 | 28000.2525 | 28000.2525 или новее |
| Файл | Назначение |
|---|
localservice_identity.txt | Имя пользователя, SID и PID этапа, запущенного через CVE |
localservice_whoami.txt | Полные группы и привилегии токена |
escalation.log | Вывод от опционального вспомогательного инструмента олицетворения токена |
escalation_status.txt | Статус создания/ошибки/завершения вспомогательного процесса |
system_shell_status.txt | Результат создания оболочки в активной сессии |