
Стековое переполнение буфера в MsIo64.sys, доказательство концепции локального повышения привилегий до nt authority/system
Простой PoC для эксплуатации CVE-2021-27965 с целью локального повышения привилегий (LPE) путем запуска системной командной строки.
https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2021-27965
Проблема обнаружена в подписанном драйвере Windows от MICSYS (MsIo64.sys), что может привести к компрометации всей локальной системы. Диспетчерская процедура IOCTL драйвера страдает от переполнения буфера на стеке для всех кодов IOCTL, а также не проверяет буфер, предоставленный пользователем.
Любой может создать дескриптор и отправлять запросы IOCTL по следующим кодам, которые нарушают модель безопасности Windows:
Для каждого кода IOCTL драйвер не обращается напрямую к Irp->SystemBuffer, а использует функцию, подобную memcpy, для копирования Irp->SystemBuffer в буфер кадра стека текущей функции, который всегда имеет фиксированный размер (и затем использует этот буфер). Поскольку и Irp->SystemBuffer, и Irp->CurrentStackLocation->InputBufferLength контролируются вызывающим процессом, злоумышленник может отправить достаточно большой буфер, чтобы переполнить буфер внутри кадра стека функции. Стоит отметить: даже если в DriverEntry присутствует __security_init_cookie(), в диспетчере IOCTL по какой-то причине отсутствует __security_check_cookie().
TODO
TODO