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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2021-21017 — # Эксплойт PoC для CVE-2021-21017 Эксплойт, подтверждающий концепцию, для CVE-2021-21017 — ошибки несоответствия типов в Adobe Reader, приводящей к чтению за пределами буфера и переполнению кучи, с техническим анализом и рекомендациями по обнаружению. | Kitploit
Инструменты/GitHubGitHub/tzwlhack/cve-2021-21017
Криминалистика памятиАнализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийАнализ Бинарных Файлов
GitHubtzwlhack/cve-2021-21017

CVE-2021-21017

# Эксплойт PoC для CVE-2021-21017 Эксплойт, подтверждающий концепцию, для CVE-2021-21017 — ошибки несоответствия типов в Adobe Reader, приводящей к чтению за пределами буфера и переполнению кучи, с техническим анализом и рекомендациями по обнаружению.

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

Популярное

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

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

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

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

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

CVE-2021-21017

Ещё один баг с порядком байтов в Adobe Reader :)

root@kitploit:~
# Плагин IA32, вер. 2020.013.20074.
char * __cdecl FUN_2581894c(char *base_url,LPCSTR rel_url)
{
  ............................................................
  ............................................................
  if ((base_url != (char *)0x0) && (rel_url != (LPCSTR)0x0)) {
    if ((*base_url == -2) && (base_url[1] == -1)) {
      iVar6 = bytes_len(base_url);
      pcVar7 = base_url + iVar6;
      pcVar8 = rel_url + 2;
      do {
        do {
          cVar3 = *pcVar8;
          pcVar1 = pcVar8 + 2;
          *pcVar7 = cVar3;
          pcVar2 = pcVar7 + 2;
          cVar4 = pcVar8[1];
          pcVar7[1] = cVar4;
          pcVar7 = pcVar2;
          pcVar8 = pcVar1;
        } while (cVar3 != '\0');
      } while (cVar4 != '\0');
    }
    else {
      lstrcatA(base_url,rel_url);
    }
    return base_url;
  }
  .............................................................
  .............................................................
}

При построении абсолютного URL из относительного по отношению к baseURL PDF-документа для использования в таких API, как: app.launchURL, document.submitForm или app.media.createPlayer, если baseURL выглядит как строка UTF-16BE, относительный URL также обрабатывается как строка UTF-16BE при выполнении конкатенации, хотя на самом деле это строка ANSI.

Это может привести, с одной стороны, к чтению за пределами границ буфера. С другой стороны, при выделении памяти под целевой буфер относительный URL «измеряется» как строка ANSI. Этого, конечно, недостаточно, если происходит чтение за пределами границ. (строка + завершающий NULL, заполняющий целый блок кучи).

Что это значит?

Путаница типов => Чтение за пределами границ => Переполнение кучи => ПОЛНЫЙ ФЕЙЕРВЕРК!

PoC прилагается

Чаще всего это приводит к сбою, а иногда и к перезаписи byteLength объекта ArrayBuffer значением 0xFF.

Если у вас есть вопросы, не стесняйтесь связаться со мной в Twitter: https://twitter.com/Zeusb0x

Обнаружение

В каталоге PDF-документа будет запись URI, содержащая косвенную ссылку на объект-словарь. В свою очередь, в нём будет запись Base, которая и является фактическим baseURL. Скорее всего, она будет представлена в шестнадцатеричной нотации и будет начинаться с символов \xFE\xFF. (см. PoC). К счастью, это единственный способ изменить baseURL документа в обычном, непривилегированном контексте. Попытка сделать это из JavaScript вызовет исключение безопасности.

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