
Эксплойт Proof-of-concept для CVE-2024-21338 — уязвимости повышения привилегий в драйвере Windows AppLocker (appid.sys), которую группировка Lazarus использовала как 0day. Обеспечивает чтение/запись в режиме ядра через специально сформированные запросы IOCTL и манипуляции с PreviousMode.
Это POC для CVE-2024-21338 — уязвимости повышения привилегий в драйвере Windows AppLocker (appid.sys). Эта уязвимость использовалась группировкой Lazarus как 0day для локального повышения привилегий в Windows.
CVE-2024-21338 — это уязвимость повышения привилегий, раскрытая 13 февраля 2024 года в рамках Microsoft Patch Tuesday. Она использовалась хакерской группировкой Lazarus для получения доступа к ядру с целью развёртывания руткита FudModule.
Уязвимость находится в управляющем коде 0x22A018 драйвера appid.sys. Атакующий может отправить специально сформированный запрос IOCTL, чтобы вызвать уязвимость и добиться произвольного вызова callback-функций, что в конечном итоге позволяет получить доступ на чтение и запись к памяти ядра.

Уязвимость находится в функции AppHashComputeImageHashInternal драйвера appid.sys. При обработке запроса 0x22A018 функция AipDeviceIoControlDispatch не проверяет должным образом PreviousMode, что позволяет процессам пользовательского режима запускать callback-функции режима ядра.
Получение прав Local Service: Для доступа к устройству \\Device\\AppID требуются права Local Service, поэтому инструмент сначала находит процесс Local Service и выполняет его имперсонацию.
Формирование запроса IOCTL: Инструмент формирует специальный запрос IOCTL, содержащий управляемый указатель на функцию и аргументы.
Запуск уязвимости: Отправка IOCTL-запроса вызывает уязвимость и запускает gadget-функцию в ядре, которая изменяет поле PreviousMode текущего потока с пользовательского режима на режим ядра.
Получение доступа на чтение и запись к ядру: После изменения PreviousMode процесс пользовательского режима может использовать NtReadVirtualMemory и NtWriteVirtualMemory для чтения и записи произвольной памяти ядра.
Для компиляции проекта используйте Visual Studio 2026, требуется поддержка Windows SDK и компилятора C++.
Включите службу Application Identity на непропатченной системе Windows (например, Windows 10 1709).
Запустите скомпилированный исполняемый файл с правами администратора.
Инструмент автоматически найдёт процесс Local Service и выполнит его имперсонацию.
Инструмент загрузит драйвер appid.sys и сформирует IOCTL-запрос для запуска уязвимости.
После успешного срабатывания уязвимости инструмент предложит ввести адрес ядра и значение для изменения, обеспечивая модификацию памяти ядра.
Данный проект предназначен только для образовательных и исследовательских целей и не должен использоваться в незаконных целях.
| Имя файла | Описание |
|---|
| main.cpp | Главная функция, управляет ходом эксплуатации |
| CVE-2024-21338.h | Структуры и объявления функций, связанных с эксплуатацией |
| CVE-2024-21338.cpp | Реализация функций предварительных условий эксплуатации |
| export_func.h | Объявления экспортируемых функций |
| gadget_search.cpp | Реализация поиска gadget-функций ядра |
| Native.h | Определения нативных API Native |
| PE.h | Вспомогательные функции для работы с PE-файлами |