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

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

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

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

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

Категории

Все категории
Loading categories
Инструменты/GitHubGitHub/devianntsec/cve-2024-30051
Privilege EscalationMemory ForensicsVulnerability AnalysisExploitationReverse EngineeringPapers & ResearchLearning & EducationPayload DevelopmentBinary Exploitation

Популярное

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

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

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

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

Смотреть все инструменты →
GitHubdevianntsec/cve-2024-30051

CVE-2024-30051

Репозиторий
13 месяцев назадЕщё не проверено

Описание

Master's Thesis research on CVE-2024-30051 (Windows DWM Heap Overflow). Features a high-reliability exploit with automated heap spray optimization, real-time logging, and empirical success-rate analysis. Portfolio piece demonstrating advanced Windows binary exploitation, heap layout manipulation, and LPE via Desktop Window Manager.

Поделиться

CVE-2024-30051 — Windows DWM Heap Overflow EoP · Исследование магистерской диссертации

Platform Language License: MIT Research CVSS

Heap-based Buffer Overflow в Windows Desktop Window Manager (dwmcore.dll)
Локальное повышение привилегий → Уровень целостности SYSTEM через процесс DWM
Целевая сборка: Windows 11 22H2 (10.0.22621.3447) · Патч: KB5037771


Описание

Этот репозиторий содержит моё исследование магистерской диссертации по CVE-2024-30051, уязвимости повышения привилегий высокой степени серьезности (CVSS 7.8) в основной библиотеке диспетчера окон Windows (dwmcore.dll).

Уязвимость возникает из-за ошибки вычисления размера при целочисленном делении в CCommandBuffer::Initialize. Размер, используемый для new(), и размер, используемый для memcpy(), расходятся из-за этой ошибки, что приводит к переполнению кучи на 0x8F байт. Успешная эксплуатация заставляет dwm.exe загрузить управляемую злоумышленником DLL, выполняя произвольный код под учетной записью window manager\dwm-1 с уровнем целостности SYSTEM.

Мой вклад


Структура репозитория

root@kitploit:~
CVE-2024-30051-Masters-Thesis/
├── README.md
├── LICENSE
├── setup.bat                        # Копирует s11.dll в требуемое расположение
│
├── exploit/
│   ├── C21.sln                      # Решение Visual Studio 2022
│   ├── exploit_src/
│   │   ├── c26f.vcxproj
│   │   ├── c26f.filters
│   │   └── main.cpp                 # Эксплойт — heap spray + хукинг + переполнение
│   └── payload/
│       ├── payload.vcxproj
│       ├── payload.vcxproj.filters
│       ├── dllmain.cpp              # DLL полезной нагрузки — запуск оболочки SYSTEM + очистка
│       ├── framework.h
│       ├── pch.h
│       └── pch.cpp
│
└── docs/
    ├── screenshots/                 # Снимки patch diffing, WinDbg и криминалистические копии
    └── analysis/
        ├── 01-root-cause.md         # Ошибка целочисленного деления в CCommandBuffer::Initialize
        ├── 02-heap-spray.md         # Эмпирические данные 50 сессий и статистические выводы
        └── 03-timeline.md           # Хронология обнаружения, раскрытия и патча

Быстрый старт

Предварительные требования

  • Windows 11 22H2 (сборка 22621.3447, без патча — без KB5037771)
  • Visual Studio 2022 с рабочей нагрузкой C++ Desktop
  • ВМ с моментальным снимком рекомендуется (требуется для воспроизводимости состояния кучи)

Шаг 1 — Сборка DLL полезной нагрузки

Откройте C21.sln в Visual Studio 2022. Соберите проект payload в конфигурации Release x64.

Шаг 2 — Размещение DLL

Запустите setup.bat из корня репозитория. Он копирует s11.dll в C:\Users\Public\Documents\s11.dll (путь, определенный PAYLOAD_DLL_PATH).

⚠️ DLL обязательно должна находиться по этому точному пути перед запуском C26f.exe. Размещение рядом с исполняемым файлом не сработает.

Шаг 3 — Сборка эксплойта

Соберите проект C26f в конфигурации Release x64.

Шаг 4 — Запуск

root@kitploit:~
x64\Release\C26f.exe

Запускайте из стандартной (не повышенной привилегиями) командной строки. Эксплойт автоматически повторяет попытки до 10 раз. В случае успеха dwm.exe загружает s11.dll и запускает командную строку с уровнем целостности SYSTEM. Журнал сессии записывается в %TEMP%\cve_30051_log.txt.


Конфигурация эксплойта

root@kitploit:~
#define MAX_ATTEMPTS        10      // Максимум автоматических повторных попыток за сессию
#define SPRAY_STEP          0x10    // Индекс шага для дырок (1024 дырки)
#define SPRAY_RANGE_START   0x3000  // Начальный индекс диапазона распыления
#define SPRAY_RANGE_END     0x7000  // Конечный индекс диапазона распыления
#define SLEEP_POST_SPRAY    0xC8    // Ожидание в мс после распыления (200 мс)
#define SLEEP_POST_HOLES    0xC8    // Ожидание в мс после освобождения дырок (200 мс)
#define PAYLOAD_DLL_PATH    "C:\\Users\\Public\\Documents\\s11.dll"

Технический обзор

Первопричина уязвимости

В CCommandBuffer::Initialize (dwmcore.dll 10.0.22621.3447) CD2DSharedBuffer::GetBufferSize вызывается дважды. Размер, передаваемый в new(), подвергается целочисленному делению на 0x90 перед умножением, в то время как memcpy() использует исходное значение:

root@kitploit:~
buffer_size = GetBufferSize()   → например 0x23F

size_new    = (0x23F / 0x90) * 0x90  = 0x1B0   ← выделено
size_memcpy = 0x23F                             ← скопировано

overflow    = 0x23F - 0x1B0 = 0x8F байт

Результаты patch diffing

Сравнение BinDiff между сборками 10.0.22621.3447 (уязвимая) и 10.0.22621.3593 (исправленная):

Аномальная оценка 0.32 на фоне глобального сходства 0.98 является прямой сигнатурой локуса уязвимости.

Цепочка эксплуатации

root@kitploit:~
1. Хук RtlCreateHeap                → перехватить дескриптор кучи dwmcore
2. Хук RtlAllocateHeap              → перехватить адрес базового блока
3. Хук NtDCompositionCreateChannel  → перехватить MappedAddress (разделяемая область памяти)
4. Хук NtDCompositionCommitChannel  → перезаписать поле размера (0x120 → 0x23F)
                                      внедрить дополнительные команды пакета
5. Heap spray 0x10000 объектов CHolographicInteropTexture (размер=0x1B0)
6. Освободить дырки через каждые 0x10 индексов → создать промежутки для попадания переполнения
7. Записать полезную нагрузку в буфер переполнения → KCBTable+0x388 + LoadLibraryA + путь DLL
8. Освободить все объекты распыления    → вызвать переполнение → LoadLibraryA("s11.dll")
9. dwm.exe загружает DLL полезной нагрузки → запускает командную строку с целостностью SYSTEM

Эмпирический анализ heap spray (50 сессий)

Исследовательский вопрос

Влияет ли доступный объем ОЗУ на количество попыток, необходимых для успешного heap spray?

Дизайн эксперимента

Два блока по 25 сессий каждый. Протокол на сессию: восстановление чистого моментального снимка после загрузки → ожидание 100 секунд для стабилизации → запуск эксплойта → запись попытки успеха.

БлокОЗУСессииУспехиНеудачи
A8 192 МБ2524

Результаты

Статистические тесты

ТестСтатистикаp-значениеЗаключение
U-критерий Манна-УитниU = 184.0p = 0.031Отвергает H₀
t-критерий Уэлчаt(23) = −2.695p = 0.011

Ключевые выводы

  • C1: Куча DWM после загрузки в 12.9–19 раз более детерминирована, чем теоретический прогноз.
  • C2: Доступный объем ОЗУ оказывает статистически значимое влияние на надежность распыления (p = 0.031).
  • C3: Уменьшение ОЗУ вдвое удваивает стандартное отклонение (1.135 → 2.645).
  • C4: Частота отказов однородна на уровне 4% в обеих конфигурациях.
  • C5: Константа base = heap_base + 0x720 подтверждает воспроизводимый макет кучи после загрузки как основной драйвер детерминизма, а не плотность дырок.
  • C6: При объеме ОЗУ ≥ 8 ГБ злоумышленник может ожидать успех в течение первых 5 попыток.

Полные исходные данные, формат журнала сессий и наблюдения детерминированной кучи задокументированы в docs/analysis/02-heap-spray.md.


Вывод после эксплуатации

В случае успеха открывается окно командной строки под учетной записью window manager\dwm-1:

root@kitploit:~
=====================================================
  CVE-2024-30051 - Windows DWM Heap Overflow EoP
  CWE-122  |  CVSS 7.8  |  Повышение привилегий
=====================================================

  Исследовано и воспроизведено : devianntsec
  Оригинальный PoC от         : Ricardo Narvaja (Fortra)
  Цель                       : Windows 11 22H2 (22621.3447)

=====================================================

  [*] Текущий пользователь:
  window manager\dwm-1

  [*] Обязательный уровень целостности:
  Mandatory Label\System Mandatory Level   S-1-16-16384

  [*] Включенные привилегии:
  SeImpersonatePrivilege    Включено

=====================================================
  Оболочка выполняется в процессе DWM - уровень SYSTEM
=====================================================

Артефакты (s11.dll и .bat скрипт) автоматически удаляются через 5 секунд с помощью отложенного процесса очистки.


Криминалистические артефакты


Техническая документация

ДокументОписание
Анализ первопричины

Академический контекст

Это исследование является частью моей магистерской диссертации по кибербезопасности (UCAM — Campus Internacional de Ciberseguridad), анализирующей N-Day уязвимости в различных средах.

Данная CVE представляет вектор настольного приложения Windows в рамках диссертации, демонстрируя:

  • Эксплуатацию переполнения кучи на основе кучи через канал ALPC DirectComposition
  • Бинарный diffing (BinDiff) как систематический метод локализации N-Day уязвимостей
  • Внутрипроцессный хукинг API без внешних инструментов
  • Эмпирическую количественную оценку детерминизма heap spray в зависимости от конфигураций ОЗУ

Ключевые слова: EoP · Heap Overflow · DirectComposition · DWM · Patch Diffing · BinDiff · WinDbg · Heap Spray · Эмпирический анализ · CVE-2024-30051


Автор

Annais Molina (devianntsec) — Студент магистратуры по кибербезопасности

GitHub LinkedIn Email


Благодарности

  • Ricardo Narvaja (Fortra/CoreSecurity) — Оригинальный PoC и отчет по обратной разработке
  • Kaspersky GReAT — Первоначальное обнаружение уязвимости и ответственное раскрытие
  • Microsoft MSRC — Патч KB5037771 (май 2024)

Лицензия

Лицензия MIT — см. LICENSE


Правовое предупреждение

Данный репозиторий предоставлен только для образовательных целей и целей исследований в области безопасности в рамках академической магистерской диссертации. Все тестирование проводилось на изолированных виртуальных машинах без сетевой доступности. Используйте только в системах, которыми вы владеете или на тестирование которых имеете явное письменное разрешение. Несанкционированное использование против систем незаконно и может привести к уголовному преследованию.

© 2026 Annais Molina · Магистерская диссертация по кибербезопасности
UCAM Universidad Católica San Antonio de Murcia · Campus Internacional de Ciberseguridad
Скачать инструмент
АспектОписание
Patch diffingПолный анализ BinDiff с идентификацией CCommandBuffer::Initialize как точного локуса уязвимости (оценка схожести 0.32 против глобальной 0.98 по 14 062 сопоставленным функциям)
Динамический анализ WinDbgПошаговая верификация всех 4 хуков, перезаписи поля размера и конструирования полезной нагрузки
Эмпирический анализ heap spray50 контролируемых сессий в двух конфигурациях ОЗУ (8 192 МБ и 4 096 МБ) с формальными статистическими тестами
Статистические выводыU-критерий Манна-Уитни (p = 0.031) и t-критерий Уэлча (p = 0.011) подтверждают влияние ОЗУ; наблюдаемые средние значения в 12.9–19 раз лучше теоретического прогноза ~64 попыток
Централизация пути DLL полезной нагрузкиИзвлечен жестко заданный путь в константу препроцессора #define PAYLOAD_DLL_PATH
Журналирование сессийПолный журнал с метками времени для каждой сессии записывается в %TEMP%\cve_30051_log.txt
Академическая документацияПервопричина, анализ heap spray за 50 сессий и временная шкала CVE
МетрикаЗначение
Глобальное сходство0.98
Уверенность0.99
Сопоставленные функции14 062 (99.1%)
Сходство CCommandBuffer::Initialize0.32
Базовых блоков — уязвимая версия4
Базовых блоков — исправленная версия20 (добавлено 16 блоков проверки)
1
B4 096 МБ25241
БлокОЗУСреднее число попытокСтандартное отклонение95% ДИКоэффициент vs теория (64)
A8 192 МБ3.3751.135[2.896; 3.854]≈ в 19 раз быстрее
B4 096 МБ4.9582.645[3.841; 6.076]≈ в 12.9 раза быстрее
Отвергает H₀
АртефактРасположениеПостоянствоИнструмент обнаружения
cmd.exe как дочерний процесс dwm.exeЖурнал безопасностиДа (если активен аудит процессов)Событие ID 4688
Внешний процесс, обращающийся к dwm.exeSysmonДаСобытие Sysmon ID 10
Аварийное завершение dwm.exe при неудачных попыткахЖурнал приложенийДаСобытие ID 1000
DLL полезной нагрузки s11.dll на дискеC:\Users\Public\Documents\Только первые ~5 секундМониторинг SHA-256
Ошибка целочисленного деления в CCommandBuffer::Initialize, методология patch diffing
Анализ heap sprayЭмпирические данные 50 сессий, исходные данные сессий, статистические тесты
Временная шкала CVEХронология обнаружения, раскрытия и патча