
POC скоро будет доступен
Критическая уязвимость удалённого выполнения кода в Google Chrome (версии 123 и ранее), затрагивающая обработку типов сборщика мусора WebAssembly (WASM). Ошибка вызывает путаницу типов (type confusion), которая может быть использована для произвольного чтения/записи памяти и, в конечном счёте, для выполнения кода.
Уязвимость обусловлена путаницей между изорекурсивными каноническими идентификаторами типов WASM и представлениями wasm::HeapType / wasm::ValueType, используемыми в функциях преобразования JavaScript в WASM.
Критически важно, что канонический идентификатор типа не ограничен значением kV8MaxWasmTypes — он может расти настолько, насколько позволяет память хоста.
Класс ValueType кодирует типы кучи в 20-битном поле, но канонические идентификаторы типов могут превышать этот лимит. Когда канонический идентификатор типа, такой как:
tn = t0 + 0x100000 * n
усекается до 20 бит, он совпадает с t0, что позволяет осуществить атаку с путаницей типов.
Кроме того, канонические идентификаторы типов, соответствующие kAny + 0x100000 * n (где kAny = 1000005), обходят проверки типов и допускают произвольную путаницу типов WASM.
В отчёте описана эксплуатация в три этапа:
Создание WASM-модулей с 1 000 000+ типов приводит к переполнению канонических идентификаторов типов, позволяя путать структурные типы и ссылочные типы. Структурные типы, созданные для совпадения с kAny, обходят проверки типов на границе JS и WASM.
Изменяя поля хранения ArrayBuffer, злоумышленник получает возможность произвольной записи по адресу, причём записываемым значением является адрес метаданных. Это позволяет использовать структуры SlotSpanMetadata для утечки адресов chrome.dll и достижения произвольной записи в память.
Эксплойт перехватывает CodePointerTable и переводит выполнение на ROP-цепочку, которая помечает области шелл-кода как исполняемые.
PoC демонстрирует:
kAny, для обхода проверок типов JS-WASM.Это вариант CVE-2024-2887, обнаруженный Манфредом Полом и представленный на Pwn2Own Vancouver 2024. Он использует аналогичную слабость канонизации типов через другой вектор.
Google Chrome 123 и ранее.
Исправлено в Google Chrome 124.
Seunghyun Lee (Xion, @0x10n), участник TyphoonPWN 2024.