Анализ значения Sentinel в движке Google Chrome V8 и его угроз безопасности
Sentinel value — это специальное значение в алгоритме, часто используемое в качестве условия завершения цикла или рекурсии. Исходный код Chrome содержит несколько Sentinel value, некоторые из которых, если они утекут в среду JavaScript, могут привести к проблемам с безопасностью. В этой статье будет рассмотрен метод обхода механизма HardenProtect Chrome V8 с использованием утекшего объекта Uninitialized Oddball.
Сентинельное значение в V8
Файл roots.h исходного кода V8 определяет множество нативных объектов, которые расположены в памяти последовательно. Если эти нативные объекты, которые не должны быть раскрыты JavaScript, будут скомпрометированы, это может привести к побегу из песочницы. Утечка объекта TheHole в прошлом является典型ным примером.
Чтобы проверить проблему в последней версии V8, можно изменить функцию %TheHole(), чтобы она возвращала объект Uninitialized Oddball:
JavaScript
print(%DebugPrint(%TheHole()));
// Вывод:Неинициализированное значение
Обойти защиту HardenType
Используя Uninitialized Oddball, можно создать следующий код PoC для реализации произвольного чтения:
JavaScript
функция read(obj, idx) {
вернуть obj[idx];
}
Оптимизированная функция read после декомпиляции показывает, что она не проверяет строго тип Value объекта obj.prop, а просто вычисляет смещение и возвращает элемент массива в соответствии с семантикой JavaScript, что приводит к путанице типов и реализации произвольного чтения.
Рекомендуемое решение заключается в том, чтобы при возврате элементов массива из оптимизированной функции добавлять проверку массива map, чтобы избежать прямого вычисления смещения возвращаемого значения.
Анализ показывает, что некоторые программы, такие как Skype, могут иметь проблему PatchGap, и этот уязвимость еще не исправлена. Хакеры могут использовать эту уязвимость для быстрого завершения полной цепочки эксплуатации.
Кроме того, после открытия нового метода обхода, эксплуатация некоторых исторических уязвимостей (, таких как Issue1314616 и Issue1216437), значительно упростилась. Рекомендуется производителям пересмотреть связанные с уязвимостями риски безопасности.
В V8 есть много других значений Sentinel, которые стоят дальнейшего изучения. Рекомендуется рассмотреть возможность добавления таких переменных, как %TheHole/Uninitialized_Oddball, в Fuzzer для поиска новых примитивов эксплуатации. Независимо от того, считается ли эта категория проблем официально проблемой безопасности, она может значительно сократить полный цикл эксплуатации для хакеров.
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
Анализ и использование уязвимости безопасности Sentinel Value в движке Chrome V8
Анализ значения Sentinel в движке Google Chrome V8 и его угроз безопасности
Sentinel value — это специальное значение в алгоритме, часто используемое в качестве условия завершения цикла или рекурсии. Исходный код Chrome содержит несколько Sentinel value, некоторые из которых, если они утекут в среду JavaScript, могут привести к проблемам с безопасностью. В этой статье будет рассмотрен метод обхода механизма HardenProtect Chrome V8 с использованием утекшего объекта Uninitialized Oddball.
Сентинельное значение в V8
Файл roots.h исходного кода V8 определяет множество нативных объектов, которые расположены в памяти последовательно. Если эти нативные объекты, которые не должны быть раскрыты JavaScript, будут скомпрометированы, это может привести к побегу из песочницы. Утечка объекта TheHole в прошлом является典型ным примером.
Чтобы проверить проблему в последней версии V8, можно изменить функцию %TheHole(), чтобы она возвращала объект Uninitialized Oddball:
JavaScript print(%DebugPrint(%TheHole())); // Вывод:Неинициализированное значение
Обойти защиту HardenType
Используя Uninitialized Oddball, можно создать следующий код PoC для реализации произвольного чтения:
JavaScript функция read(obj, idx) { вернуть obj[idx]; }
let uninitialized = %TheHole(); пусть arr = [1.1]; %ПодготовитьФункциюДляОптимизации(читать); read(arr, 0); read(arr, 0); %ОптимизироватьФункциюНаСледующемВызове(читать); read(arr, 0);
print(read(неинициализирован, 0x1234n));
! Эксклюзивное раскрытие обхода Chrome v8 HardenProtect путем утечки сигнального значения
Оптимизированная функция read после декомпиляции показывает, что она не проверяет строго тип Value объекта obj.prop, а просто вычисляет смещение и возвращает элемент массива в соответствии с семантикой JavaScript, что приводит к путанице типов и реализации произвольного чтения.
! Эксклюзивное раскрытие обхода Chrome v8 HardenProtect путем утечки значения Sentinel
Рекомендуемое решение заключается в том, чтобы при возврате элементов массива из оптимизированной функции добавлять проверку массива map, чтобы избежать прямого вычисления смещения возвращаемого значения.
! Эксклюзивное раскрытие обхода Chrome v8 HardenProtect путем утечки значения Sentinel
Уведомление о риске PatchGap
Анализ показывает, что некоторые программы, такие как Skype, могут иметь проблему PatchGap, и этот уязвимость еще не исправлена. Хакеры могут использовать эту уязвимость для быстрого завершения полной цепочки эксплуатации.
! Эксклюзивное раскрытие обхода Chrome v8 HardenProtect путем утечки сигнального значения
Кроме того, после открытия нового метода обхода, эксплуатация некоторых исторических уязвимостей (, таких как Issue1314616 и Issue1216437), значительно упростилась. Рекомендуется производителям пересмотреть связанные с уязвимостями риски безопасности.
! Эксклюзивное раскрытие обхода Chrome v8 HardenProtect путем утечки значения Sentinel
Резюме
В V8 есть много других значений Sentinel, которые стоят дальнейшего изучения. Рекомендуется рассмотреть возможность добавления таких переменных, как %TheHole/Uninitialized_Oddball, в Fuzzer для поиска новых примитивов эксплуатации. Независимо от того, считается ли эта категория проблем официально проблемой безопасности, она может значительно сократить полный цикл эксплуатации для хакеров.
! Эксклюзивное раскрытие обхода Chrome v8 HardenProtect путем утечки сигнального значения