Внутренняя информация о том, как обойти HardenProtect в Chrome V8 с помощью утечки Sentinel Value
Введение
Sentinel value - это специальное значение в алгоритмах, которое часто используется в циклических или рекурсивных алгоритмах в качестве условия завершения. В исходном коде Chrome широко используются такого рода значения. Недавно исследователи безопасности обнаружили, что через утечку объекта TheHole можно реализовать произвольное выполнение кода внутри песочницы Chrome. Команда Google быстро устранила эти два уязвимости в дикой природе.
Тем не менее, в V8 также существуют другие нативные объекты, которые не должны быть раскрыты в JavaScript. В этой статье будет обсуждаться новый объект: Uninitialized Oddball. Этот метод обхода впервые появился в Issue, представленном участником Project0, и в настоящее время все еще доступен в последней версии V8.
Стоит отметить, что этот метод обладает высокой универсальностью:
В CVE-2021-30551 первым POC является утечка внутреннего неинициализированного элемента.
POC для CVE-2022-1486 также напрямую раскрывает UninitializedOddball.
Необработанный CVE также использовал этот метод.
Эти примеры достаточно ясно демонстрируют важность данной проблемы и заслуживают повторного рассмотрения программного обеспечения, которое может быть затронуто.
Большинство нативных объектов V8 определены в файле v8/src/roots/roots.h, они последовательно располагаются в памяти. Как только эти нативные объекты, которые не должны быть раскрыты, попадают в JavaScript, это может привести к выполнению произвольного кода внутри песочницы.
Мы можем утечь Uninitialized Oddball в JavaScript, модифицируя нативные функции V8. Конкретный способ заключается в изменении смещения относительно isolate в функции %TheHole(), чтобы она возвращала Uninitialized Oddball.
Использование Uninitialized Oddball позволяет осуществлять произвольное чтение и запись. Ключевым моментом является то, что оптимизированная функция read проверяет только свойство prop объекта, но не проверяет значение obj.prop в качестве ключа. Это приводит к путанице типов при вычислении, что позволяет осуществлять произвольное чтение.
В архитектуре x86, из-за отсутствия сжатия адресов, произвольное чтение и запись осуществляется относительно всего процесса. Хотя отсутствуют удобства, предоставляемые сжатием адресов, из-за того, что некоторые крупные программные файлы имеют большой объем, все равно существует высокая вероятность чтения и записи целевого содержимого.
Предупреждение PatchGap
Этот PatchGap касается не только Issue1352549, но также включает в себя несколько уязвимостей, таких как Issue1314616 и Issue1216437. После опубликования нового метода обхода сложность эксплуатации этих уязвимостей значительно снизилась. Хакерам почти не нужно проводить дополнительные исследования, чтобы завершить полную цепочку эксплуатации.
Резюме
В V8 также есть много других значений Sentinel, которые могут иметь аналогичные проблемы. Это дает нам некоторые подсказки:
Другие утечки uninitialized_Oddball также могут привести к V8 RCE?
Должны ли такие вопросы официально рассматриваться как проблемы безопасности?
Должен ли Sentinel value быть добавлен как переменная в тесте Fuzzer?
В любом случае, подобные проблемы значительно сокращают период, необходимый хакерам для полного использования уязвимости, и это заслуживает нашего серьезного внимания.
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
18 Лайков
Награда
18
6
Репост
Поделиться
комментарий
0/400
ContractTester
· 08-15 05:19
Старая уязвимость, новая проблема снова появилась.
Новая уязвимость в движке Chrome V8: утечка Uninitialized Oddball обхода песочницы
Внутренняя информация о том, как обойти HardenProtect в Chrome V8 с помощью утечки Sentinel Value
Введение
Sentinel value - это специальное значение в алгоритмах, которое часто используется в циклических или рекурсивных алгоритмах в качестве условия завершения. В исходном коде Chrome широко используются такого рода значения. Недавно исследователи безопасности обнаружили, что через утечку объекта TheHole можно реализовать произвольное выполнение кода внутри песочницы Chrome. Команда Google быстро устранила эти два уязвимости в дикой природе.
Тем не менее, в V8 также существуют другие нативные объекты, которые не должны быть раскрыты в JavaScript. В этой статье будет обсуждаться новый объект: Uninitialized Oddball. Этот метод обхода впервые появился в Issue, представленном участником Project0, и в настоящее время все еще доступен в последней версии V8.
Стоит отметить, что этот метод обладает высокой универсальностью:
В CVE-2021-30551 первым POC является утечка внутреннего неинициализированного элемента.
POC для CVE-2022-1486 также напрямую раскрывает UninitializedOddball.
Необработанный CVE также использовал этот метод.
Эти примеры достаточно ясно демонстрируют важность данной проблемы и заслуживают повторного рассмотрения программного обеспечения, которое может быть затронуто.
! Эксклюзивное раскрытие обхода Chrome v8 HardenProtect путем утечки сигнального значения
Сентинельное значение в V8
Большинство нативных объектов V8 определены в файле v8/src/roots/roots.h, они последовательно располагаются в памяти. Как только эти нативные объекты, которые не должны быть раскрыты, попадают в JavaScript, это может привести к выполнению произвольного кода внутри песочницы.
Мы можем утечь Uninitialized Oddball в JavaScript, модифицируя нативные функции V8. Конкретный способ заключается в изменении смещения относительно isolate в функции %TheHole(), чтобы она возвращала Uninitialized Oddball.
! Эксклюзивное раскрытие обхода Chrome v8 HardenProtect путем утечки сигнального значения
! Эксклюзивное раскрытие обхода Chrome v8 HardenProtect путем утечки значения Sentinel
Байпасный HardenType
Использование Uninitialized Oddball позволяет осуществлять произвольное чтение и запись. Ключевым моментом является то, что оптимизированная функция read проверяет только свойство prop объекта, но не проверяет значение obj.prop в качестве ключа. Это приводит к путанице типов при вычислении, что позволяет осуществлять произвольное чтение.
! Эксклюзивное раскрытие обхода Chrome v8 HardenProtect путем утечки значения Sentinel
! Эксклюзивное раскрытие обхода Chrome v8 HardenProtect путем утечки сигнального значения
! Эксклюзивное раскрытие обхода Chrome v8 HardenProtect путем утечки значения Sentinel
В архитектуре x86, из-за отсутствия сжатия адресов, произвольное чтение и запись осуществляется относительно всего процесса. Хотя отсутствуют удобства, предоставляемые сжатием адресов, из-за того, что некоторые крупные программные файлы имеют большой объем, все равно существует высокая вероятность чтения и записи целевого содержимого.
Предупреждение PatchGap
Этот PatchGap касается не только Issue1352549, но также включает в себя несколько уязвимостей, таких как Issue1314616 и Issue1216437. После опубликования нового метода обхода сложность эксплуатации этих уязвимостей значительно снизилась. Хакерам почти не нужно проводить дополнительные исследования, чтобы завершить полную цепочку эксплуатации.
Резюме
В V8 также есть много других значений Sentinel, которые могут иметь аналогичные проблемы. Это дает нам некоторые подсказки:
Другие утечки uninitialized_Oddball также могут привести к V8 RCE?
Должны ли такие вопросы официально рассматриваться как проблемы безопасности?
Должен ли Sentinel value быть добавлен как переменная в тесте Fuzzer?
В любом случае, подобные проблемы значительно сокращают период, необходимый хакерам для полного использования уязвимости, и это заслуживает нашего серьезного внимания.
! Эксклюзивное раскрытие обхода Chrome v8 HardenProtect путем утечки сигнального значения