Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
CVE-2023-28218 — Подробный технический анализ и эксплойт-доказательство концепции для CVE-2023-28218, уязвимости повышения привилегий в ядре Windows в драйвере AFD.sys, с прохождением эксплуатации и анализом патча. | Kitploit
Инструменты/GitHubGitHub/h1bana/cve-2023-28218
Повышение привилегийАнализ уязвимостейЭксплуатацияОбучение и ОбразованиеЭксплуатация Бинарных Файлов
GitHubh1bana/cve-2023-28218

CVE-2023-28218

Подробный технический анализ и эксплойт-доказательство концепции для CVE-2023-28218, уязвимости повышения привилегий в ядре Windows в драйвере AFD.sys, с прохождением эксплуатации и анализом патча.

Репозиторий
1113 лет назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →
Поделиться

Report CVE-2023-28218

Обзор уязвимости

Уязвимость приводит к повышению привилегий в ядре Windows. Ошибка присутствует в драйвере Windows Ancrillary Function Driver for WinSock (AFD.sys). Уязвимость была исправлена в обновлении от 11 апреля 2023 года. Имеет оценку CVSS:3.1 7.0 / 6.1 и классифицируется как Important.

Описание уязвимости

  • Тип ошибки: Double fetch и Integer overflow, приводящие к pool overflow.
  • Ошибка возникает в функциях Afd!AfdComputeCMSGLength и Afd!AfdCopyCMSGBuffer. img1

Обе функции принимают v82 в качестве входного параметра. v82 — это адрес, контролируемый usermode. В функции Afd!AfdComputeCMSGLength этот адрес напрямую разыменовывается для получения значения. Затем вычисляется длина CMSG buffer и возвращается. После этого по этому размеру выделяется pool. Контролируя два входных параметра a1 и a2, можно контролировать размер, который будет возвращён в параметре a3. img2

В функции Afd!AfdCopyCMSGBuffer адрес v82 напрямую разыменовывается для получения значения. После нескольких проверок это значение будет использоваться как размер операции memmove. img3

В этой функции есть ошибка Integer overflow; в сочетании с тем, что обе функции напрямую выполняют fetch из адреса на стороне usermode, мы можем изменить это значение во время выполнения. Это приводит к тому, что размер, используемый в memmove, становится очень большим. Когда копирование доходит до недоступной области памяти, срабатывает try catch. Но копирование предыдущих областей памяти уже произошло. Таким образом, мы можем выполнять копирование нужного нам размера. img4

  • Чтобы запустить POC, сначала нужно создать socket с параметром type равным SOCK_DGRAM. Затем использовать handle этого socket в качестве параметра при вызове функции bind. Наконец, создать 2 потока: один поток будет постоянно вызывать DeviceControl с IOCTL 0x120D3. Настроить подходящий userbuffer, чтобы обойти некоторые проверки. Оставшийся поток будет постоянно изменять значение, хранящееся по usermode-адресу, который передаётся в качестве параметра в обе вышеупомянутые функции.

Эксплуатация

  • С помощью этой ошибки можно переполнить non-paged NX pool с нужным размером, при этом данные полностью контролируются со стороны usermode.
  • Подход к эксплуатации: распылить (spray) как можно больше объектов Namedpipe, затем освободить часть объектов, чтобы создать дыры в куче. Затем создать пул на основе размера, вычисленного функцией Afd!AfdComputeCMSGLength; этот размер должен совпадать с размером объекта Namedpipe. Тогда пул будет выделен в только что освобождённые объекты. Используя ошибку, переполнить соседние объекты Namedpipe, после чего использовать механизмы Namedpipe для получения возможности чтения/записи памяти ядра. Прочитать токен системного процесса и записать его в токен текущего процесса.

Затронутые версии

  • Windows Server 2012 R2 (установка Server Core) сборки до версии 6.3.9600.20919
  • Windows Server 2012 R2 сборки до версии 6.3.9600.20919
  • Windows Server 2012 (установка Server Core) сборки до версии 6.2.9200.24216
  • Windows Server 2012 сборки до версии 6.2.9200.24216
  • Windows Server 2008 R2 for x64-based Systems Service Pack 1 (установка Server Core) сборки до версии 6.1.7601.26466
  • Windows Server 2008 R2 for x64-based Systems Service Pack 1 сборки до версии 6.1.7601.26466
  • Windows Server 2008 for x64-based Systems Service Pack 2 (установка Server Core) сборки до версии 6.0.6003.22015
  • Windows Server 2008 for x64-based Systems Service Pack 2 сборки до версии 6.0.6003.22015
  • Windows Server 2008 for 32-bit Systems Service Pack 2 (установка Server Core) сборки до версии 6.0.6003.22015
  • Windows Server 2008 for 32-bit Systems Service Pack 2 сборки до версии 6.0.6003.22015
  • Windows Server 2016 (установка Server Core) сборки до версии 10.0.14393.5850
  • Windows Server 2016 сборки до версии 10.0.14393.5850
  • Windows 10 Version 1607 for x64-based Systems сборки до версии 10.0.14393.5850
  • Windows 10 Version 1607 for 32-bit Systems сборки до версии 10.0.14393.5850
  • Windows 10 for x64-based Systems сборки до версии 10.0.10240.19869
  • Windows 10 for 32-bit Systems сборки до версии 10.0.10240.19869
  • Windows 10 Version 22H2 for 32-bit Systems сборки до версии 10.0.19045.2846
  • Windows 10 Version 22H2 for ARM64-based Systems сборки до версии 10.0.19045.2846
  • Windows 10 Version 22H2 for x64-based Systems сборки до версии 10.0.19045.2846
  • Windows 11 Version 22H2 for x64-based Systems сборки до версии 10.0.22621.1555
  • Windows 11 Version 22H2 for ARM64-based Systems сборки до версии 10.0.22621.1555
  • Windows 10 Version 21H2 for x64-based Systems сборки до версии 10.0.19044.2846
  • Windows 10 Version 21H2 for ARM64-based Systems сборки до версии 10.0.19044.2846
  • Windows 10 Version 21H2 for 32-bit Systems сборки до версии 10.0.19044.2846
  • Windows 11 version 21H2 for ARM64-based Systems сборки до версии 10.0.22000.1817
  • Windows 11 version 21H2 for x64-based Systems сборки до версии 10.0.22000.1817
  • Windows 10 Version 20H2 for ARM64-based Systems сборки до версии 10.0.19042.2846
  • Windows 10 Version 20H2 for 32-bit Systems сборки до версии 10.0.19042.2846
  • Windows 10 Version 20H2 for x64-based Systems сборки до версии 10.0.19042.2846
  • Windows Server 2022 (установка Server Core) сборки до версии 10.0.20348.1668
  • Windows Server 2022 сборки до версии 10.0.20348.1668
  • Windows Server 2019 (установка Server Core) сборки до версии 10.0.17763.4252

Патч

  • Ошибка была исправлена заменой двух старых функций на две новые; к именам старых функций добавлен суффикс _old. Эти новые функции уже. В двух новых функциях, хотя double fetch всё ещё присутствует, извлечённое значение проверяется перед использованием. Функции Rtl используются для замены арифметических операций, предотвращая Integer overflow.

Заключение

  • Уязвимость затрагивает очень широкий диапазон систем и угрожает многим системам. Однако у эксплойта при запуске всё ещё есть небольшой процент неудач, приводящих к падению Windows из-за spray в куче. Кроме того, после повышения прав процесса cmd до System, выход из этого процесса также приведёт к падению Windows, поскольку в процессе эксплуатации объект Namedpipe был повреждён (corrupt).

Вложения

  • Минимальный POC minimal
  • Эксплойт POC exploit
Скачать инструмент
  • Windows Server 2019 сборки до версии 10.0.17763.4252
  • Windows 10 Version 1809 for ARM64-based Systems сборки до версии 10.0.17763.4252
  • Windows 10 Version 1809 for x64-based Systems сборки до версии 10.0.17763.4252
  • Windows 10 Version 1809 for 32-bit Systems сборки до версии 10.0.17763.4252