Исследование угроз безопасности, вызванных утечкой Sentinel Value в движке Chrome V8
Sentinel value – это значение, используемое в алгоритмах в качестве специальной метки, обычно в циклах или рекурсиях в качестве условия завершения. В исходном коде движка Chrome V8 существует несколько Sentinel value, некоторые из которых не должны утекать в среду JavaScript. В данной статье будет обсужден способ обхода механизма HardenProtect в Chrome V8 через утечку объектов Uninitialized Oddball.
Сентинельное значение в V8
В файле roots.h исходного кода V8 определено множество нативных объектов, которые расположены рядом в памяти. Как только эти объекты утекут в JavaScript, это может привести к побегу из песочницы.
Мы можем проверить это, изменив нативные функции V8. Например, изменив смещение функции %TheHole(), чтобы она возвращала объект Uninitialized Oddball вместо объекта TheHole.
Обход защиты HardenType
Использование объектов Uninitialized Oddball позволяет осуществлять произвольное чтение памяти. Ключевым моментом является то, что в оптимизированной функции чтения JavaScript проверяется только правильность свойства prop объекта, но не проверяется значение, соответствующее ключу obj.prop. Это приводит к путанице типов в процессе вычислений, что позволяет осуществлять произвольное чтение.
Анализ оптимизированного ассемблерного кода показывает, что при передаче uninitialized_oddball программа сразу вычисляет смещение и считывает данные, не проводя проверку типа. Этот метод проще в конструировании и использовании по сравнению с объектом TheHole.
Рекомендуемое решение заключается в том, чтобы при возврате элементов массива из оптимизированной функции добавить проверку массива map, чтобы избежать возврата значений массива напрямую с помощью смещения.
Предупреждение о безопасности PatchGap
Помимо внимания к известным историческим уязвимостям, нам также следует обращать внимание на проблемы, которые производители тихо исправляют в основных компонентах. После анализа было установлено, что программа Skype до сих пор не исправила эту уязвимость. На платформе x86, из-за отсутствия сжатия адресов, диапазон произвольного чтения и записи значительно больше, почти можно читать и записывать в всё пространство процесса.
Этот раз PatchGap затрагивает не только Issue1352549, но и подобные уязвимости, такие как Issue1314616 и Issue1216437. После публикации нового метода обхода сложность эксплуатации этих уязвимостей существенно снизилась, и злоумышленникам практически не нужно дополнительных исследований для завершения полной цепочки эксплуатации.
Итог
В данной статье кратко рассматривается метод произвольного чтения через утечку Uninitialized Oddball. В V8 также существуют другие несколько Sentinel значений, которые могут привести к аналогичным проблемам. Это подсказывает нам:
Другие утечки uninitialized_Oddball также могут привести к выходу из песочницы V8.
Существует спор о том, следует ли рассматривать такие вопросы как официальные уязвимости безопасности.
Рассмотрите возможность добавления значения Sentinel в качестве переменной в模糊测试, чтобы обнаружить новые методы эксплуатации.
В любом случае, такие проблемы значительно сокращают период, в течение которого злоумышленник может полностью использовать уязвимость, что заслуживает повышенного внимания.
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
12 Лайков
Награда
12
5
Поделиться
комментарий
0/400
PaperHandsCriminal
· 7ч назад
Хрустящая корочка V8 механизм, я снова взорвал!
Посмотреть ОригиналОтветить0
MoonBoi42
· 23ч назад
Немного нервничаю, слишком много уязвимостей.
Посмотреть ОригиналОтветить0
SleepyArbCat
· 08-02 05:40
Котик, который устал настолько, что может только писать код...zZz
Анализ уязвимостей и эксплуатации утечки Sentinel Value в движке Chrome V8
Исследование угроз безопасности, вызванных утечкой Sentinel Value в движке Chrome V8
Sentinel value – это значение, используемое в алгоритмах в качестве специальной метки, обычно в циклах или рекурсиях в качестве условия завершения. В исходном коде движка Chrome V8 существует несколько Sentinel value, некоторые из которых не должны утекать в среду JavaScript. В данной статье будет обсужден способ обхода механизма HardenProtect в Chrome V8 через утечку объектов Uninitialized Oddball.
Сентинельное значение в V8
В файле roots.h исходного кода V8 определено множество нативных объектов, которые расположены рядом в памяти. Как только эти объекты утекут в JavaScript, это может привести к побегу из песочницы.
Мы можем проверить это, изменив нативные функции V8. Например, изменив смещение функции %TheHole(), чтобы она возвращала объект Uninitialized Oddball вместо объекта TheHole.
Обход защиты HardenType
Использование объектов Uninitialized Oddball позволяет осуществлять произвольное чтение памяти. Ключевым моментом является то, что в оптимизированной функции чтения JavaScript проверяется только правильность свойства prop объекта, но не проверяется значение, соответствующее ключу obj.prop. Это приводит к путанице типов в процессе вычислений, что позволяет осуществлять произвольное чтение.
Анализ оптимизированного ассемблерного кода показывает, что при передаче uninitialized_oddball программа сразу вычисляет смещение и считывает данные, не проводя проверку типа. Этот метод проще в конструировании и использовании по сравнению с объектом TheHole.
! Эксклюзивное раскрытие обхода Chrome v8 HardenProtect путем утечки сигнального значения
! Эксклюзивное раскрытие обхода Chrome v8 HardenProtect путем утечки значения Sentinel
! Эксклюзивное раскрытие обхода Chrome v8 HardenProtect путем утечки сигнального значения
Рекомендуемое решение заключается в том, чтобы при возврате элементов массива из оптимизированной функции добавить проверку массива map, чтобы избежать возврата значений массива напрямую с помощью смещения.
Предупреждение о безопасности PatchGap
Помимо внимания к известным историческим уязвимостям, нам также следует обращать внимание на проблемы, которые производители тихо исправляют в основных компонентах. После анализа было установлено, что программа Skype до сих пор не исправила эту уязвимость. На платформе x86, из-за отсутствия сжатия адресов, диапазон произвольного чтения и записи значительно больше, почти можно читать и записывать в всё пространство процесса.
Этот раз PatchGap затрагивает не только Issue1352549, но и подобные уязвимости, такие как Issue1314616 и Issue1216437. После публикации нового метода обхода сложность эксплуатации этих уязвимостей существенно снизилась, и злоумышленникам практически не нужно дополнительных исследований для завершения полной цепочки эксплуатации.
Итог
В данной статье кратко рассматривается метод произвольного чтения через утечку Uninitialized Oddball. В V8 также существуют другие несколько Sentinel значений, которые могут привести к аналогичным проблемам. Это подсказывает нам:
Другие утечки uninitialized_Oddball также могут привести к выходу из песочницы V8.
Существует спор о том, следует ли рассматривать такие вопросы как официальные уязвимости безопасности.
Рассмотрите возможность добавления значения Sentinel в качестве переменной в模糊测试, чтобы обнаружить новые методы эксплуатации.
В любом случае, такие проблемы значительно сокращают период, в течение которого злоумышленник может полностью использовать уязвимость, что заслуживает повышенного внимания.
! Эксклюзивное раскрытие обхода Chrome v8 HardenProtect путем утечки сигнального значения