Обход Sentinel Value с помощью Chrome v8 HardenProtect
Сентинельное значение — это специальное значение в алгоритмах, часто используемое в качестве условия завершения циклов или рекурсивных алгоритмов. В исходном коде Chrome широко используются такие специальные значения. Недавние исследования показывают, что утечка некоторых объектов сентинельного значения может обеспечить выполнение произвольного кода внутри песочницы Chrome.
В данной статье будет рассмотрен метод обхода механизма HardenProtect Chrome v8 с использованием неинициализированного объекта Oddball. Этот метод был впервые предложен членом Project0 в Issue1352549 и все еще может быть использован в последней версии V8, Google пока не исправил это.
Стоит отметить, что этот метод обладает высокой универсальностью:
Issue1216437(CVE-2021-30551) впервые представил poc для утечки internal uninitialized oddball.
Issue1314616(CVE-2022-1486) также напрямую раскрыл объект UninitializedOddball.
Issue1352549( нет CVE) показал полную цепочку эксплуатации этого метода.
Эти случаи показывают, что этот обходной метод может повлиять на несколько версий программного обеспечения. На данный момент такие программы, как Skype, все еще не исправили этот уязвимость.
Значение Sentinel в V8
В исходном коде V8 определено множество встроенных объектов, включая различные значения Sentinel. Эти объекты расположены в памяти последовательно. Как только встроенные объекты, которые не должны быть раскрыты, становятся доступными для JavaScript, это может привести к выполнению произвольного кода в песочнице.
Чтобы проверить этот метод, мы можем изменить функцию V8 %TheHole() так, чтобы она возвращала объект Uninitialized Oddball.
Следующий код демонстрирует, как использовать утекший объект Uninitialized Oddball для реализации произвольного чтения:
JavaScript
функция read(obj, idx) {
вернуть obj[idx];
}
пусть uninitialized_oddball = %GetUninitialized();
пусть ab = новый ArrayBuffer(8);
пусть f64 = новый Float64Array(ab);
пусть u32 = новый Uint32Array(ab);
для (let i = 0; I < 0x10000; i++) {
read({prop: 1.1}, 0);
}
%ОптимизироватьФункциюНаСледующемВызове(читать);
let val = read({prop: uninitialized_oddball}, 0x1234);
f64[0] = вал;
console.log(u32[0].toString01928374656574839392(, u32).toString[1]16();
Оптимизированный ассемблерный код функции read показывает, что функция проверяет только свойство prop объекта obj, не проверяя значение obj.prop, что приводит к путанице типов и позволяет произвольное чтение.
![Эксклюзивное разоблачение обхода защиты HardenProtect Chrome v8 через утечку Sentinel Value])https://img-cdn.gateio.im/webp-social/moments-26c26345e3ec4effeea2e3e6b7cd8772.webp(
Рекомендуемое решение: при возврате элементов массива из оптимизированной функции добавить проверку на массив map, чтобы избежать прямого вычисления смещения.
![Эксклюзивное разоблачение обхода защиты Chrome v8 HardenProtect через утечку Sentinel Value])https://img-cdn.gateio.im/webp-social/moments-4c091ca0e153e953eb168e99762ff7cc.webp(
Предупреждение PatchGap
Этот обходной метод затрагивает не только исторические уязвимости, но также может повлиять на текущее программное обеспечение. Например, Skype до сих пор не исправил эту проблему. На платформе x86 из-за отсутствия сжатия адресов диапазон произвольного чтения и записи значительно больше.
Этот PatchGap касается не только Issue1352549, но и значительно облегчает использование таких проблем, как Issue1314616 и Issue1216437. Рекомендуется производителям провести полную проверку связанных уязвимостей.
![Эксклюзивное разоблачение обхода защиты Chrome v8 HardenProtect через утечку Sentinel Value])https://img-cdn.gateio.im/webp-social/moments-1e3fda77c04bceafdcc40413824a5d37.webp(
Резюме
В этой статье описывается метод произвольного чтения в V8 с использованием Uninitialized Oddball. В V8 также есть различные Sentinel value, которые могут представлять собой аналогичные риски безопасности. Рекомендуется дальнейшее исследование:
Возможно ли осуществить V8 RCE через утечку других значений Sentinel
Добавьте значение Sentinel в качестве переменной в Fuzzer, чтобы исследовать новые примитивы эксплуатации.
Признавать потенциальные риски безопасности, связанные с такими проблемами
Независимо от того, будет ли этот вопрос официально признан уязвимостью безопасности, он может значительно сократить полный цикл эксплуатации хакерами. Надеюсь, что эта статья привлечет внимание соответствующих сторон.
![Эксклюзивное разоблачение обхода защиты HardenProtect в Chrome v8 через утечку Sentinel Value])https://img-cdn.gateio.im/webp-social/moments-ed89289bebf59d4b27f5bffb5511a8c5.webp(
![Эксклюзивное раскрытие обхода защиты HardenProtect Chrome v8 через утечку Sentinel Value])https://img-cdn.gateio.im/webp-social/moments-0e52075003a8ee2ca492a5fc9f35c36b.webp(
![Эксклюзивное разоблачение обхода Chrome v8 HardenProtect через утечку Sentinel Value])https://img-cdn.gateio.im/webp-social/moments-230537e420d579aabd89bdd168b20878.webp(
! [Эксклюзивное раскрытие обхода Chrome v8 HardenProtect путем утечки значения Sentinel])https://img-cdn.gateio.im/social/moments-506159c94c9e0988552cbd13d971e1(
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
14 Лайков
Награда
14
6
Репост
Поделиться
комментарий
0/400
WinterWarmthCat
· 16ч назад
Пост с деталями сильного сильного обязательно нужно лайкнуть
Посмотреть ОригиналОтветить0
StakeOrRegret
· 08-08 15:35
Снова обнаружена уязвимость в браузере.
Посмотреть ОригиналОтветить0
LayerZeroHero
· 08-07 02:24
Некий крутой уязвимость
Посмотреть ОригиналОтветить0
Web3ProductManager
· 08-07 02:23
Супер рискованный крайний случай здесь
Посмотреть ОригиналОтветить0
GhostWalletSleuth
· 08-07 02:11
Уязвимости действительно невозможно предотвратить.
Обход HardenProtect Chrome v8: использование Sentinel Value для выполнения произвольного кода
Обход Sentinel Value с помощью Chrome v8 HardenProtect
Сентинельное значение — это специальное значение в алгоритмах, часто используемое в качестве условия завершения циклов или рекурсивных алгоритмов. В исходном коде Chrome широко используются такие специальные значения. Недавние исследования показывают, что утечка некоторых объектов сентинельного значения может обеспечить выполнение произвольного кода внутри песочницы Chrome.
В данной статье будет рассмотрен метод обхода механизма HardenProtect Chrome v8 с использованием неинициализированного объекта Oddball. Этот метод был впервые предложен членом Project0 в Issue1352549 и все еще может быть использован в последней версии V8, Google пока не исправил это.
Стоит отметить, что этот метод обладает высокой универсальностью:
Issue1216437(CVE-2021-30551) впервые представил poc для утечки internal uninitialized oddball.
Issue1314616(CVE-2022-1486) также напрямую раскрыл объект UninitializedOddball.
Issue1352549( нет CVE) показал полную цепочку эксплуатации этого метода.
Эти случаи показывают, что этот обходной метод может повлиять на несколько версий программного обеспечения. На данный момент такие программы, как Skype, все еще не исправили этот уязвимость.
Значение Sentinel в V8
В исходном коде V8 определено множество встроенных объектов, включая различные значения Sentinel. Эти объекты расположены в памяти последовательно. Как только встроенные объекты, которые не должны быть раскрыты, становятся доступными для JavaScript, это может привести к выполнению произвольного кода в песочнице.
Чтобы проверить этот метод, мы можем изменить функцию V8 %TheHole() так, чтобы она возвращала объект Uninitialized Oddball.
! Эксклюзивное раскрытие обхода Chrome v8 HardenProtect путем утечки сигнального значения
Байпасный HardenType
Следующий код демонстрирует, как использовать утекший объект Uninitialized Oddball для реализации произвольного чтения:
JavaScript функция read(obj, idx) { вернуть obj[idx]; }
пусть uninitialized_oddball = %GetUninitialized(); пусть ab = новый ArrayBuffer(8); пусть f64 = новый Float64Array(ab); пусть u32 = новый Uint32Array(ab);
для (let i = 0; I < 0x10000; i++) { read({prop: 1.1}, 0);
}
%ОптимизироватьФункциюНаСледующемВызове(читать);
let val = read({prop: uninitialized_oddball}, 0x1234); f64[0] = вал; console.log(u32[0].toString01928374656574839392(, u32).toString[1]16();
Оптимизированный ассемблерный код функции read показывает, что функция проверяет только свойство prop объекта obj, не проверяя значение obj.prop, что приводит к путанице типов и позволяет произвольное чтение.
![Эксклюзивное разоблачение обхода защиты HardenProtect Chrome v8 через утечку Sentinel Value])https://img-cdn.gateio.im/webp-social/moments-26c26345e3ec4effeea2e3e6b7cd8772.webp(
Рекомендуемое решение: при возврате элементов массива из оптимизированной функции добавить проверку на массив map, чтобы избежать прямого вычисления смещения.
![Эксклюзивное разоблачение обхода защиты Chrome v8 HardenProtect через утечку Sentinel Value])https://img-cdn.gateio.im/webp-social/moments-4c091ca0e153e953eb168e99762ff7cc.webp(
Предупреждение PatchGap
Этот обходной метод затрагивает не только исторические уязвимости, но также может повлиять на текущее программное обеспечение. Например, Skype до сих пор не исправил эту проблему. На платформе x86 из-за отсутствия сжатия адресов диапазон произвольного чтения и записи значительно больше.
Этот PatchGap касается не только Issue1352549, но и значительно облегчает использование таких проблем, как Issue1314616 и Issue1216437. Рекомендуется производителям провести полную проверку связанных уязвимостей.
![Эксклюзивное разоблачение обхода защиты Chrome v8 HardenProtect через утечку Sentinel Value])https://img-cdn.gateio.im/webp-social/moments-1e3fda77c04bceafdcc40413824a5d37.webp(
Резюме
В этой статье описывается метод произвольного чтения в V8 с использованием Uninitialized Oddball. В V8 также есть различные Sentinel value, которые могут представлять собой аналогичные риски безопасности. Рекомендуется дальнейшее исследование:
Независимо от того, будет ли этот вопрос официально признан уязвимостью безопасности, он может значительно сократить полный цикл эксплуатации хакерами. Надеюсь, что эта статья привлечет внимание соответствующих сторон.
![Эксклюзивное разоблачение обхода защиты HardenProtect в Chrome v8 через утечку Sentinel Value])https://img-cdn.gateio.im/webp-social/moments-ed89289bebf59d4b27f5bffb5511a8c5.webp(
![Эксклюзивное раскрытие обхода защиты HardenProtect Chrome v8 через утечку Sentinel Value])https://img-cdn.gateio.im/webp-social/moments-0e52075003a8ee2ca492a5fc9f35c36b.webp(
![Эксклюзивное разоблачение обхода Chrome v8 HardenProtect через утечку Sentinel Value])https://img-cdn.gateio.im/webp-social/moments-230537e420d579aabd89bdd168b20878.webp(
! [Эксклюзивное раскрытие обхода Chrome v8 HardenProtect путем утечки значения Sentinel])https://img-cdn.gateio.im/social/moments-506159c94c9e0988552cbd13d971e1(
! [Эксклюзивное раскрытие обхода Chrome v8 HardenProtect путем утечки сигнального значения])https://img-cdn.gateio.im/webp-social/moments-e9e2000fd501b69ee3ee643a459a26dd.webp(