Исследование рисков безопасности, связанных с утечкой Sentinel Value в движке Chrome V8
Введение
Значение-сентинель — это специальное значение в алгоритмах, обычно используемое в качестве условия завершения в циклических или рекурсивных алгоритмах. Этот специальный значение широко используется в исходном коде Chrome. Недавно исследователи с помощью утечки объекта TheHole реализовали выполнение произвольного кода в песочнице для CVE-2021-38003 и CVE-2022-1364. Команда Google быстро исправила эти два уязвимости.
Однако, помимо объекта TheHole, в V8 существуют и другие встроенные объекты, которые не должны быть раскрыты в JavaScript. В этой статье будет сосредоточено внимание на объекте Uninitialized Oddball и описано, как его можно использовать для обхода механизма HardenProtect V8. Стоит отметить, что этот способ обхода по-прежнему применим к последней версии V8 и еще не исправлен.
Сентинельное значение в V8
Большинство встроенных объектов V8 определены в файле v8/src/roots/roots.h, и эти объекты расположены последовательно в памяти. Как только эти встроенные объекты, которые не должны быть раскрыты в JavaScript, становятся доступными, это может привести к выполнению произвольного кода в песочнице.
Чтобы это проверить, мы можем изменить родные функции V8, чтобы утечь Uninitialized Oddball в JavaScript. Конкретный метод заключается в изменении смещения относительно isolate в функции %TheHole(), чтобы она возвращала Uninitialized Oddball.
Обход защиты HardenType
Использование неинициализированного объекта Oddball позволяет осуществлять произвольное чтение и запись. В оптимизированном коде JavaScript функция read не проверяет значение с ключом obj.prop, а напрямую вычисляет смещение в соответствии с семантикой JavaScript, чтобы получить значение из массива. Это приводит к путанице типов во время вычислений, что, в свою очередь, позволяет осуществлять произвольное чтение.
Для любого операции записи можно обратиться к методу построения, описанному в Issue1352549. Рекомендуемое решение заключается в том, чтобы при возврате элементов массива из оптимизированной функции добавить проверку массива map, чтобы избежать прямого вычисления смещения для возврата значений массива.
После анализа Issue1352549 мы обнаружили, что в некоторых программных обеспечениях может существовать проблема PatchGap. Важно отметить, что на данный момент Skype все еще не исправил этот уязвимость. В среде x86 реализация произвольного чтения и записи будет отличаться, так как отсутствует сжатие адресов, и можно непосредственно работать относительно всего процесса.
Проблема PatchGap на этот раз затрагивает не только Issue1352549, но и открытие нового метода обхода значительно снизило сложность эксплуатации уязвимостей, таких как Issue1314616 и Issue1216437. Хакерам практически не нужны никакие исследовательские затраты, чтобы полностью использовать любую утечку uninitialized_oddball.
Резюме
В этой статье кратко обсуждается метод реализации произвольного чтения примитивов через утечку uninitialized_Oddball в Sentinel value. В V8 также существует множество других Sentinel value, которые могут привести к аналогичным проблемам безопасности. Это дает нам следующие выводы:
Другие uninitialized_Oddball утечки также могут легко привести к удаленному выполнению кода V8.
Существует разногласие по поводу того, следует ли считать такие вопросы официальными вопросами безопасности.
Рассмотрите возможность добавления таких значений-сентинелов, как %TheHole/uninitialized_Oddball, в fuzzer в качестве переменных для извлечения других уязвимостей.
Независимо от того, рассматриваются ли такие вопросы как официальные проблемы безопасности, они значительно сокращают время, необходимое хакерам для полного использования уязвимости.
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
25 Лайков
Награда
25
6
Репост
Поделиться
комментарий
0/400
FUD_Vaccinated
· 07-26 03:20
Снова черный Google, эта дыра слишком частая 8
Посмотреть ОригиналОтветить0
MetaverseLandlord
· 07-24 11:22
Вот черт, у других браузеров такие высококлассные уязвимости.
Исследование утечки Sentinel Value в движке Chrome V8 и анализ рисков безопасности
Исследование рисков безопасности, связанных с утечкой Sentinel Value в движке Chrome V8
Введение
Значение-сентинель — это специальное значение в алгоритмах, обычно используемое в качестве условия завершения в циклических или рекурсивных алгоритмах. Этот специальный значение широко используется в исходном коде Chrome. Недавно исследователи с помощью утечки объекта TheHole реализовали выполнение произвольного кода в песочнице для CVE-2021-38003 и CVE-2022-1364. Команда Google быстро исправила эти два уязвимости.
Однако, помимо объекта TheHole, в V8 существуют и другие встроенные объекты, которые не должны быть раскрыты в JavaScript. В этой статье будет сосредоточено внимание на объекте Uninitialized Oddball и описано, как его можно использовать для обхода механизма HardenProtect V8. Стоит отметить, что этот способ обхода по-прежнему применим к последней версии V8 и еще не исправлен.
Сентинельное значение в V8
Большинство встроенных объектов V8 определены в файле v8/src/roots/roots.h, и эти объекты расположены последовательно в памяти. Как только эти встроенные объекты, которые не должны быть раскрыты в JavaScript, становятся доступными, это может привести к выполнению произвольного кода в песочнице.
Чтобы это проверить, мы можем изменить родные функции V8, чтобы утечь Uninitialized Oddball в JavaScript. Конкретный метод заключается в изменении смещения относительно isolate в функции %TheHole(), чтобы она возвращала Uninitialized Oddball.
Обход защиты HardenType
Использование неинициализированного объекта Oddball позволяет осуществлять произвольное чтение и запись. В оптимизированном коде JavaScript функция read не проверяет значение с ключом obj.prop, а напрямую вычисляет смещение в соответствии с семантикой JavaScript, чтобы получить значение из массива. Это приводит к путанице типов во время вычислений, что, в свою очередь, позволяет осуществлять произвольное чтение.
! Эксклюзивное раскрытие обхода Chrome v8 HardenProtect путем утечки сигнального значения
Для любого операции записи можно обратиться к методу построения, описанному в Issue1352549. Рекомендуемое решение заключается в том, чтобы при возврате элементов массива из оптимизированной функции добавить проверку массива map, чтобы избежать прямого вычисления смещения для возврата значений массива.
! Эксклюзивное раскрытие обхода Chrome v8 HardenProtect путем утечки значения Sentinel
! Эксклюзивное раскрытие обхода Chrome v8 HardenProtect путем утечки значения Sentinel
! Эксклюзивное раскрытие обхода Chrome v8 HardenProtect путем утечки сигнального значения
Предупреждение PatchGap
После анализа Issue1352549 мы обнаружили, что в некоторых программных обеспечениях может существовать проблема PatchGap. Важно отметить, что на данный момент Skype все еще не исправил этот уязвимость. В среде x86 реализация произвольного чтения и записи будет отличаться, так как отсутствует сжатие адресов, и можно непосредственно работать относительно всего процесса.
! Эксклюзивное раскрытие обхода Chrome v8 HardenProtect путем утечки значения Sentinel
Проблема PatchGap на этот раз затрагивает не только Issue1352549, но и открытие нового метода обхода значительно снизило сложность эксплуатации уязвимостей, таких как Issue1314616 и Issue1216437. Хакерам практически не нужны никакие исследовательские затраты, чтобы полностью использовать любую утечку uninitialized_oddball.
Резюме
В этой статье кратко обсуждается метод реализации произвольного чтения примитивов через утечку uninitialized_Oddball в Sentinel value. В V8 также существует множество других Sentinel value, которые могут привести к аналогичным проблемам безопасности. Это дает нам следующие выводы:
Другие uninitialized_Oddball утечки также могут легко привести к удаленному выполнению кода V8.
Существует разногласие по поводу того, следует ли считать такие вопросы официальными вопросами безопасности.
Рассмотрите возможность добавления таких значений-сентинелов, как %TheHole/uninitialized_Oddball, в fuzzer в качестве переменных для извлечения других уязвимостей.
Независимо от того, рассматриваются ли такие вопросы как официальные проблемы безопасности, они значительно сокращают время, необходимое хакерам для полного использования уязвимости.
! Эксклюзивное раскрытие обхода Chrome v8 HardenProtect путем утечки сигнального значения