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

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

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

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

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

Категории

Все категории
Loading categories
Инструменты/GitHubGitHub/ronf98/cve-2023-21716-poc
Анализ уязвимостейЭксплуатацияСтатьи и ИсследованияОбучение и ОбразованиеЭксплуатация Бинарных Файлов
GitHubronf98/cve-2023-21716-poc

CVE-2023-21716-POC

Доказательство концепции для CVE-2023-21716 Microsoft Word повреждение кучи

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

Популярное

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

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

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

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

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

История

В феврале 2023 года Microsoft исправила критическую уязвимость в Microsoft Word, идентифицированную как CVE-2023-21716 с оценкой CVSS 9,8, которая позволяла злоумышленникам выполнять удаленный код без аутентификации. Эта уязвимость также затрагивала область предварительного просмотра Outlook, что означает возможность ее срабатывания при простом предварительном просмотре файла. Microsoft выпустила патч и временное решение, но не раскрыла подробностей об этой проблеме. 6 марта исследователь, обнаруживший ошибку (Joshua J. Drake — @jduck), опубликовал доказательство концепции (PoC) в Twitter.

Как это происходит

CVE-2023-21716 возникает из-за того, как Microsoft Word обрабатывает файлы Rich Text Format (RTF), особенно управляющее слово \fonttbl, которое определяет шрифты в документе с помощью формата \f. \fonttbl внутри wwlib.dll выделяет определенный объем памяти в куче (Heap) (это связано с тем, что выделения в куче обычно используются для динамических данных, таких как разбор больших структур вроде таблицы шрифтов, где размер может меняться в зависимости от входных данных). Сбой происходит из-за переполнения буфера, когда количество шрифтов превышает лимит (доказано в POC — 32760). Переполнение выделенного пространства в куче приводит к перезаписи указателя возврата инструкции (RIP), что вызывает падение приложения.

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

  • Microsoft Office 2019
  • Microsoft Office Online Server
  • Microsoft Office LTSC 2021
  • Microsoft Office LTSC for Mac 2021
  • Microsoft Word 2013 Service Pack 1
  • Microsoft Word 2013 RT Service Pack 1
  • Microsoft Word 2016
  • Microsoft SharePoint Server 2019
  • Microsoft SharePoint Enterprise Server 2013 Service Pack 1
  • Microsoft SharePoint Enterprise Server 2016
  • Microsoft SharePoint Foundation 2013 Service Pack 1
  • Microsoft SharePoint Server Subscription Edition Language Pack
  • Microsoft SharePoint Server Subscription Edition
  • Microsoft Office Web Apps Server 2013 Service Pack 1
  • Microsoft 365 Apps for Enterprise

Устранение уязвимости

Пользователям настоятельно рекомендуется установить последние обновления безопасности от Microsoft, которые устраняют эту проблему. Для тех, кто не может выполнить обновление, Microsoft также предоставила несколько временных решений, которые можно найти здесь: https://msrc.microsoft.com/update-guide/vulnerability/CVE-2023-21716.

CVE-2023-21716-POC

Шаги для воспроизведения

  1. Установите уязвимую версию Microsoft Office.
  2. Загрузите и запустите скрипт RTF-creator.
  3. Если вы не хотите создавать файл заново, вы можете использовать этот файл: malicious.rtf, который содержит 32761 шрифт и вызовет переполнение буфера, приводящее к сбою службы.
  4. Отправьте .rtf-файл по электронной почте жертве; если у нее уязвимая версия Office, уязвимость сработает.

Логика работы

Используя WinDbg, мы можем более детально рассмотреть причину сбоя. Вот процесс:

  1. Запустите Microsoft Word.
  2. Откройте WinDbg и подключитесь к процессу WINWORD.
  3. Откройте файл malicious.rtf с помощью Word.

WinDbg автоматически остановится при возникновении сбоя, что позволит нам проанализировать его дальше. Для начала введите 'k', чтобы просмотреть стек вызовов:

0:000> k
 # ChildEBP RetAddr      
00 012f5134 77a5feb5     ntdll!RtlReportCriticalFailure+0x4b       
01 012f5170 77a5dda9     ntdll!RtlpReportHeapFailure+0x2f
02 012f5170 77a66220     ntdll!RtlpHpHeapHandleError+0x89
03 012f5188 77a5dab7     ntdll!RtlpLogHeapFailure+0x43
04 012f51ec 779b400d     ntdll!RtlpAnalyzeHeapFailure+0x281
05 012f5348 779f806d     ntdll!RtlpFreeHeap+0x24d
06 012f53a4 779b3d66     ntdll!RtlpFreeHeapInternal+0x783
07 012f53c4 6ea4aa24     ntdll!RtlFreeHeap+0x46                       //Функции в ntdll относятся к обработке ошибок повреждения кучи
08 012f53d8 6ea4a9cb     mso20win32client!Ordinal1068+0xab
09 012f53e8 6ea4a995     mso20win32client!Ordinal1068+0x52
0a 012f53f4 6cccda52     mso20win32client!Ordinal1068+0x1c
0b 012f5410 03657fea     mso!Ordinal1387+0x24
0c 012f5424 03990115     wwlib!PTLS7::FsUpdateFinitePage+0x7e26f      //wwlib отвечает за обработку таблицы шрифтов
0d 012f5670 034ea593     wwlib!PTLS7::LsDestroyContext+0x245f90
0e 012f6f5c 033a68ef     wwlib!PTLS7::FsUpdateBottomlessPage+0x17494
0f 012f7484 035054ed     wwlib!PTLS7::LsAssert+0x2bd1c
10 012f888c 03503d3b     wwlib!PTLS7::FsUpdateBottomlessPage+0x323ee
11 012f8910 0400be52     wwlib!PTLS7::FsUpdateBottomlessPage+0x30c3c
12 012f9e9c 0390013a     wwlib!wdGetApplicationObject+0xdf8a0
13 012faf48 03ebf20e     wwlib!PTLS7::LsDestroyContext+0x1b5fb5
14 012faf90 0410ab2a     wwlib!DllCanUnloadNow+0xcc314
15 012fcfe0 03752fb4     wwlib!wdGetApplicationObject+0x1de578
16 012ff538 03385b93     wwlib!PTLS7::LsDestroyContext+0x8e2f
17 012ff578 75e6173b     wwlib!PTLS7::LsAssert+0xafc0
18 012ff5a4 75e57eaa     USER32!_InternalCallWinProc+0x2b
19 012ff68c 75e57e8a     USER32!UserCallWinProcCheckWow+0x33a
1a 012ff6c4 75e57666     USER32!CallWindowProcAorW+0x7f
1b 012ff6dc 7500ae9d     USER32!CallWindowProcW+0x1b
.....
.....

Две ключевые библиотеки — wwlib.dll, основная библиотека Word, управляющая содержимым документа (шрифты, текст, макет), и ntdll.dll, отвечающая за низкоуровневые системные задачи, такие как управление памятью и обработка ошибок. Сбой возникает, когда Word обрабатывает большое количество шрифтов из RTF-файла. Когда ntdll.dll обнаруживает, что Word пытается получить доступ к недопустимой памяти или освободить ее (скорее всего, поврежденной из-за переполнения шрифтов), возникает ошибка повреждения кучи, приводящая к сбою.

Чтобы углубиться, мы можем установить точку останова в последней части библиотеки wwlib, чтобы увидеть, как шрифты загружаются в память, и понять, что вызвало проблему:

bc *  //удалить все остальные точки останова

bp wwlib!PTLS7::FsUpdateFinitePage+0x7e26f  //создать точку останова

Теперь мы получаем нарушение доступа:

(ba4.1a14): Access violation - code c0000005 (first chance)
First chance exceptions are reported before any exception handling.
This exception may be expected and handled.
eax=004f1ce4 ebx=00000001 ecx=000004e4 edx=ffff7ffc esi=13474fe8 edi=00008002
eip=02b300d5 esp=004f1c3c ebp=004f1c48 iopl=0         nv up ei pl nz na pe nc
cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00210206
wwlib!PTLS7::FsUpdateFinitePage+0x7635a:
02b300d5 66894c5604      mov     word ptr [esi+edx*2+4],cx ds:002b:13464fe4=????  //Остановка происходит здесь

Поскольку мы остановили программу раньше, в точке, где wwlib.dll впервые пытается получить доступ к недопустимой памяти или изменить ее (в FsUpdateFinitePage), это позволяет нам увидеть начальное нарушение доступа (которое вызывает повреждение памяти), давая нам шанс проверить, что пошло не так, прежде чем ошибка повреждения кучи будет обнаружена ntdll.dll.

Точнее, программа остановилась из-за нарушения доступа (код c0000005) по инструкции mov word ptr [esi+edx*2+4],cx внутри функции wwlib!PTLS7::FsUpdateFinitePage+0x7635a. Эта ошибка указывает, что Word попытался обратиться к недопустимому адресу памяти, а именно при попытке сохранить значение (cx) в память по адресу esi+edx*2+4.

Если мы посмотрим на регистр ESI, то увидим, что он содержит данные о шрифтах: изображение изображение Каждое 16-битное значение (два байта) в формате little-endian представляет запись о шрифте в формате \fA;

Скачать инструмент