Обход защиты HardenProtect Chrome v8 с помощью утечки Sentinel Value
Введение
Значение-страж — это специальное значение в алгоритмах, которое обычно используется в качестве условия остановки в циклах или рекурсивных алгоритмах. В исходном коде Chrome имеется множество значений-стражей. Ранее было проведено исследование, в котором описывалось, как с помощью утечки объекта TheHole можно выполнить произвольный код в песочнице. Команда Google быстро обновила соответствующие исправления.
Кроме объекта TheHole, в v8 есть много других нативных объектов, которые не должны просочиться в JS. В этой статье будет обсуждаться объект Uninitialized Oddball, который по-прежнему доступен в последней версии V8. Стоит отметить, что этот метод обладает определенной универсальностью и встречался в нескольких уязвимостях.
Сенсорное значение в V8
Большинство коренных объектов v8 определены в файле v8/src/roots/roots.h, эти объекты располагаются последовательно в памяти. Как только коренной объект, который не должен быть раскрыт, будет раскрыт в Javascript, можно выполнить любой код в песочнице.
Чтобы проверить этот метод, мы можем изменить нативные функции v8, чтобы утечь Uninitialized Oddball в JavaScript. В частности, можно изменить смещение относительно isolate в функции %TheHole().
Использование Uninitialized Oddball позволяет осуществлять относительно произвольное чтение и запись. Ключевым моментом является то, что в оптимизированной функции чтения JavaScript проверяется только правильность свойства prop объекта, но не проверяется значение по ключу obj.prop, а вместо этого напрямую вычисляется смещение по семантике JavaScript для получения значения массива. Это приводит к путанице типов при вычислении и позволяет произвольное чтение.
Поскольку Uninitialized Oddball находится в памяти v8 в более раннем и более примитивном порядке, его легче подделать по сравнению с объектом TheHole, он является предпочтительным методом обхода исправления после его смягчения.
Рекомендуемое решение заключается в том, чтобы при возврате элементов массива из оптимизированной функции добавить проверку массива map, чтобы избежать прямого вычисления смещения для возврата значений.
Помимо внимания к историческим уязвимостям, также следует обратить внимание на уязвимости, которые производители тихо исправляют в базовых компонентах. В настоящее время Skype все еще не исправил эту уязвимость. Способы эксплуатации немного различаются на x86 и x64, но в обоих случаях возможен произвольный чтение и запись.
Этот PatchGap касается не только Issue1352549, но и открытие нового метода значительно снизило сложность эксплуатации подобных уязвимостей. Хакеры почти не нуждаются в изучении, чтобы завершить полную эксплуатацию любых ранее утечек уязвимости Uninitialized Oddball.
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
12 Лайков
Награда
12
9
Репост
Поделиться
комментарий
0/400
LiquiditySurfer
· 22ч назад
Снова нашли маленькую уязвимость в v8? Эта волна не маленькая.
Посмотреть ОригиналОтветить0
SleepTrader
· 08-08 08:00
Я снова наткнулся на уязвимость.
Посмотреть ОригиналОтветить0
digital_archaeologist
· 08-08 04:11
Снова придумали что-то новенькое tql
Посмотреть ОригиналОтветить0
MetaMaskVictim
· 08-06 23:06
Снова попал в ловушку v8.
Посмотреть ОригиналОтветить0
gas_fee_therapist
· 08-05 17:35
v8 снова провалился, безопасность становится все хуже.
Посмотреть ОригиналОтветить0
GreenCandleCollector
· 08-05 17:34
Эта уязвимость довольно жесткая, да?
Посмотреть ОригиналОтветить0
LightningPacketLoss
· 08-05 17:32
Этот баг снова исправлен. Нам нужно срочно починить наш сервер.
Посмотреть ОригиналОтветить0
ChainMelonWatcher
· 08-05 17:32
А это... снова Долбежник выпустил новое.
Посмотреть ОригиналОтветить0
ImpermanentLossFan
· 08-05 17:31
Я в шоке, v8 действительно имеет такую уязвимость.
Новый метод эксплуатации уязвимости Chrome v8: утечка реализации Uninitialized Oddball для обхода песочницы
Обход защиты HardenProtect Chrome v8 с помощью утечки Sentinel Value
Введение
Значение-страж — это специальное значение в алгоритмах, которое обычно используется в качестве условия остановки в циклах или рекурсивных алгоритмах. В исходном коде Chrome имеется множество значений-стражей. Ранее было проведено исследование, в котором описывалось, как с помощью утечки объекта TheHole можно выполнить произвольный код в песочнице. Команда Google быстро обновила соответствующие исправления.
Кроме объекта TheHole, в v8 есть много других нативных объектов, которые не должны просочиться в JS. В этой статье будет обсуждаться объект Uninitialized Oddball, который по-прежнему доступен в последней версии V8. Стоит отметить, что этот метод обладает определенной универсальностью и встречался в нескольких уязвимостях.
Сенсорное значение в V8
Большинство коренных объектов v8 определены в файле v8/src/roots/roots.h, эти объекты располагаются последовательно в памяти. Как только коренной объект, который не должен быть раскрыт, будет раскрыт в Javascript, можно выполнить любой код в песочнице.
Чтобы проверить этот метод, мы можем изменить нативные функции v8, чтобы утечь Uninitialized Oddball в JavaScript. В частности, можно изменить смещение относительно isolate в функции %TheHole().
! Эксклюзивное раскрытие обхода Chrome v8 HardenProtect путем утечки сигнального значения
Байпасный HardenType
Использование Uninitialized Oddball позволяет осуществлять относительно произвольное чтение и запись. Ключевым моментом является то, что в оптимизированной функции чтения JavaScript проверяется только правильность свойства prop объекта, но не проверяется значение по ключу obj.prop, а вместо этого напрямую вычисляется смещение по семантике JavaScript для получения значения массива. Это приводит к путанице типов при вычислении и позволяет произвольное чтение.
Поскольку Uninitialized Oddball находится в памяти v8 в более раннем и более примитивном порядке, его легче подделать по сравнению с объектом TheHole, он является предпочтительным методом обхода исправления после его смягчения.
Рекомендуемое решение заключается в том, чтобы при возврате элементов массива из оптимизированной функции добавить проверку массива map, чтобы избежать прямого вычисления смещения для возврата значений.
! Эксклюзивное раскрытие обхода Chrome v8 HardenProtect путем утечки значения Sentinel
! Эксклюзивное раскрытие обхода Chrome v8 HardenProtect путем утечки значения Sentinel
Уведомление о рисках PatchGap
Помимо внимания к историческим уязвимостям, также следует обратить внимание на уязвимости, которые производители тихо исправляют в базовых компонентах. В настоящее время Skype все еще не исправил эту уязвимость. Способы эксплуатации немного различаются на x86 и x64, но в обоих случаях возможен произвольный чтение и запись.
Этот PatchGap касается не только Issue1352549, но и открытие нового метода значительно снизило сложность эксплуатации подобных уязвимостей. Хакеры почти не нуждаются в изучении, чтобы завершить полную эксплуатацию любых ранее утечек уязвимости Uninitialized Oddball.
! Эксклюзивное раскрытие обхода Chrome v8 HardenProtect путем утечки значения Sentinel
Итог
В v8 есть много других значений Sentinel, которые могут иметь аналогичные проблемы. Это дает нам некоторые подсказки:
Другие утечки Uninitialized Oddball также легко реализуют RCE v8.
Существует спор о том, следует ли такие вопросы официально рассматривать как вопросы безопасности.
При проведении тестирования на нечеткость стоит рассмотреть возможность добавления различных значений Sentinel в качестве переменных.
В любом случае, подобные проблемы значительно сократят полный цикл эксплуатации хакеров. Нам следует быть настороже к этому.
! Эксклюзивное раскрытие обхода Chrome v8 HardenProtect путем утечки сигнального значения