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

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

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

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

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

Категории

Все категории
Loading categories
CVE-2021-21220 — # Образовательная презентация, детализирующая эксплуатацию CVE-2021-21220 — путаницы типов в JIT-компиляторе V8, приводящей к выходу за границы буфера (OOB) и удалённому выполнению кода (RCE) через WebAssembly, с анализом мер смягчения. | Kitploit
Инструменты/GitHubGitHub/borahll/cve-2021-21220
Анализ уязвимостейЭксплуатацияЭксплуатация веб-приложенийСтатьи и ИсследованияОбучение и ОбразованиеЭксплуатация Бинарных Файлов
GitHubborahll/cve-2021-21220

CVE-2021-21220

# Образовательная презентация, детализирующая эксплуатацию CVE-2021-21220 — путаницы типов в JIT-компиляторе V8, приводящей к выходу за границы буфера (OOB) и удалённому выполнению кода (RCE) через WebAssembly, с анализом мер смягчения.

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

Популярное

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

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

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

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

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

Эксплуатация CVE-2021-21220

От некорректного поведения JIT к удалённому выполнению кода

Обзор

Этот доклад объясняет эксплуатацию CVE-2021-21220 — уязвимости в движке V8 JavaScript Google Chrome, вызванной некорректными предположениями JIT-компилятора во время оптимизации.

В докладе рассматривается:

  • Как V8 выполняет JIT-компиляцию (Just-In-Time)
  • Как во время оптимизации возникает ошибка путаницы знаковых/беззнаковых типов
  • Как ошибка приводит к примитиву массива с выходом за границы (OOB)
  • Как атакующие используют OOB-доступ для утечки адресов и произвольной записи в память
  • Как WebAssembly (Wasm) становится целью для выполнения нативного кода
  • Существующие механизмы смягчения и современные защиты браузеров

Цели доклада

Цель этого доклада — продемонстрировать, как незаметная ошибка оптимизации внутри современного JavaScript-движка может перерасти в:

  • Повреждение памяти
  • Примитивы произвольного чтения/записи
  • Модификацию нативного кода
  • Потенциальное удалённое выполнение кода (RCE)

Цепочка эксплуатации показывает, как JIT-движки балансируют между производительностью и безопасностью и как неверные предположения оптимизации становятся эксплуатируемыми.


Рассматриваемые темы

1. Архитектура V8

В докладе представлены основные компоненты V8:

Интерпретатор Ignition

  • Выполняет байткод JavaScript
  • Собирает информацию об исполнении (feedback)
  • Хранит информацию о типах в векторах обратной связи

Оптимизатор TurboFan

  • Строит оптимизированные графы на основе данных об исполнении
  • Вставляет спекулятивные предположения и проверки
  • Выполняет агрессивные проходы оптимизации

Бэкенд машинного кода

  • Генерирует нативные инструкции CPU
  • Создаёт оптимизированный машинный код для «горячих» функций

Схема архитектуры в докладе иллюстрирует, как JavaScript проходит путь от:

root@kitploit:~
Parsing → Bytecode → Optimization → Execution

2. Почему JavaScript сложно оптимизировать

JavaScript сложен для высокопроизводительного исполнения, потому что:

  • Переменные динамически меняют типы
  • Массивы меняют структуру и типы элементов
  • Операторы вроде + могут иметь несколько значений
  • Проверки во время исполнения дороги

V8 использует JIT-компиляцию для оптимизации часто встречающихся паттернов выполнения, делая предположения о поведении во время исполнения.


3. Корневая причина CVE-2021-21220

Уязвимость возникает из-за несоответствия знаковых и беззнаковых целых чисел во время JIT-оптимизации.

Демонстрируемые ключевые концепции:

  • Uint32Array
  • Word32Xor
  • Некорректное распространение типов
  • ChangeInt32ToInt64
  • Неверный выбор инструкций ассемблера

Эксплойт использует значение:

root@kitploit:~
0x80000000

которое устанавливает знаковый бит 32-битного целого числа.


4. Ошибка оптимизации

Уязвимость возникает из-за того, что TurboFan оптимизирует:

root@kitploit:~
x ^ 0

полностью устраняя это выражение.

Во время этой оптимизации:

  • Операция XOR исчезает
  • Информация о типах теряется
  • Знаковые значения начинают интерпретироваться как беззнаковые
  • Поведение JIT расходится с поведением интерпретатора

Это приводит к генерации некорректного машинного кода и значениям, контролируемым атакующим.


5. Создание OOB-примитива

Эксплойт преобразует некорректный результат JIT в контроль над поведением массива.

В докладе демонстрируется:

  1. Неверное оптимизированное целочисленное значение
  2. Преобразование в управляющую переменную i
  3. Расхождение между прогревом и триггерным выполнением
  4. Переполнение длины при Array.shift() (underflow)
  5. Создание массива с возможностью выхода за границы

Важные концепции эксплуатации:

  • Оптимизация после прогрева
  • Спекулятивная оптимизация
  • Путаница типов
  • Повреждение длины массива

6. Выход за границы

Когда длина массива становится -1, атакующий получает:

  • Чтение за пределами границ
  • Запись за пределами границ
  • Доступ к соседним объектам кучи V8

Затем эксплойт демонстрирует:

  • Утечку указателей
  • Определение адресов объектов
  • Перекрывающиеся массивы
  • Извлечение «сырых» указателей V8

7. Использование WebAssembly

В докладе объясняется, как атакующие могут нацеливаться на:

  • Страницы скомпилированного кода WebAssembly
  • Нативную исполняемую память, созданную V8

Порядок атаки:

  1. Создать функцию Wasm
  2. Найти исполняемую память
  3. Перезаписать скомпилированный машинный код
  4. Повторно выполнить Wasm
  5. Добиться произвольного выполнения нативного кода

Это демонстрирует, как ошибка в JavaScript-движке может перейти в выполнение кода на уровне процесса.


Защитные механизмы и смягчение последствий

В заключительном разделе рассматриваются современные защиты браузеров:

Сжатые указатели (Compressed Pointers)

Снижают прямую раскрываемость указателей и предсказуемость кучи.

Косвенность указателей (Pointer Indirection)

Предотвращают прямой доступ к «сырым» адресам памяти.

Песочница для кучи (Heap Sandboxing)

Изолирует области памяти и снижает воздействие эксплойта.

W^X (Write XOR Execute)

Не допускает одновременной записи и исполнения на страницах памяти.

В докладе также приведён реальный diff патча V8, показывающий исправление проблемы знакового расширения.


Основные выводы

Этот доклад демонстрирует, как:

  • Небольшие ошибки оптимизации могут становиться критическими уязвимостями
  • JIT-компиляторы значительно усложняют поверхность атаки
  • Спекуляции во время выполнения могут приводить к опасным несогласованностям
  • WebAssembly меняет ландшафт эксплуатации уязвимостей
  • Современные браузеры требуют многоуровневых защит

Рассматриваемые технологии

  • JavaScript
  • Движок Google V8
  • TurboFan
  • Ignition
  • WebAssembly (Wasm)
  • JIT-компиляция
  • Повреждение памяти
  • Выход за границы
  • Эксплуатация браузеров

Образовательная цель

Этот материал предназначен строго для:

  • Исследований в области безопасности
  • Образовательных демонстраций
  • Изучения внутреннего устройства браузеров
  • Анализа уязвимостей

Не используйте эту информацию против систем, которыми вы не владеете или на тестирование которых у вас нет разрешения.


Ссылки

  • CVE-2021-21220
  • Движок Google Chrome V8
  • Внутренности компилятора TurboFan
  • Безопасность среды выполнения WebAssembly
  • https://www.zerodayinitiative.com/blog/2021/12/15/exploitation-of-cve-2021-21220-from-incorrect-jit-behavior-to-rce
  • https://www.zerodayinitiative.com/blog/2021/12/8/understanding-the-root-cause-of-cve-2021-21220-a-chrome-bug-from-pwn2own-2021
  • https://www.zerodayinitiative.com/blog/2021/12/8/understanding-the-root-cause-of-cve-2021-21220-a-chrome-bug-from-pwn2own-2021
Скачать инструмент