Анализ проблемы безопасности, вызванной утечкой Sentinel Value в движке Chrome v8
Сентинельное значение — это специальное значение в алгоритмах, которое обычно используется в качестве условия завершения в циклах или рекурсивных алгоритмах. В исходном коде Chrome существует несколько сентинельных значений, утечка некоторых из которых в среду JavaScript может привести к проблемам с безопасностью.
Ранее исследования показали, что через утечку объекта TheHole можно выполнить произвольный код внутри песочницы Chrome. Вскоре после этого команда Google исправила соответствующий CVE. Однако, помимо объекта TheHole, в v8 есть и другие встроенные объекты, которые не должны утекать в JS. В этой статье будет обсуждаться объект Uninitialized Oddball, метод обхода которого в настоящее время все еще доступен в последней версии V8.
Стоит отметить, что этот метод обладает определенной универсальностью:
В CVE-2021-30551 первоначальный POC заключается в утечке внутреннего неинициализированного странного значения.
В CVE-2022-1486 POC также напрямую раскрывает UninitializedOddball.
В Issue1352549( представлено полное эксплойт-код для нераспределенного CVE).
Эти примеры показывают, что утечка Uninitialized Oddball может привести к серьезным проблемам с безопасностью.
Значение Sentinel в V8
Большинство встроенных объектов V8 определены в файле v8/src/roots/roots.h, эти объекты последовательно размещены в памяти. Если встроенные объекты, которые не должны быть раскрыты, будут раскрыты в JavaScript, это может привести к выполнению произвольного кода в песочнице.
Чтобы это подтвердить, мы можем изменить нативную функцию V8, чтобы утечка Uninitialized Oddball произошла в JavaScript. В частности, можно изменить смещение относительно isolate в функции %TheHole(), чтобы она возвращала Uninitialized Oddball.
пусть val = read(uninitialized_oddball, "prop");
fa[0] = вал;
console.log(ia0192828374656574839201[0];
В оптимизированном ассемблерном коде смещение вычисляется и возвращает значение массива напрямую в соответствии с семантикой JavaScript, без проверки значения obj.prop как ключа. Это приводит к смешиванию типов, что позволяет произвольное чтение.
Поскольку Uninitialized Oddball располагается в памяти V8 ближе к началу и является более примитивным, его легче подделать, чем объект TheHole, что делает его предпочтительным методом обхода HardenType.
Рекомендуемое решение состоит в том, чтобы при возврате элементов массива оптимизированной функции добавить проверку массива map, чтобы избежать прямого вычисления смещения для возврата значений массива.
![Эксклюзивное разоблачение обхода защиты HardenProtect Chrome v8 через утечку Sentinel Value])https://img-cdn.gateio.im/webp-social/moments-4c091ca0e153e953eb168e99762ff7cc.webp(
Предупреждение PatchGap
После анализа Issue1352549 было обнаружено, что у некоторых программ может быть проблема PatchGap. Например, у Skype этот уязвимость до сих пор не исправлена. На платформе x86, из-за отсутствия сжатия адресов, произвольное чтение и запись осуществляется относительно всего процесса.
Хотя Skype включил ASLR, из-за большого размера файла хакеры могут просто выполнять чтение и запись по определенному фиксированному адресу, что дает им большую вероятность чтения и записи содержимого файла Skype. В сочетании с традиционными методами, такими как анализ PE, можно завершить всю цепочку эксплуатации уязвимости.
Этот PatchGap не только касается Issue1352549, но также значительно упрощает использование уязвимостей, таких как CVE-2022-1486 и CVE-2021-30551. Хакерам почти не требуется дополнительное исследование для полного использования.
![Эксклюзивное раскрытие обхода защиты Chrome v8 HardenProtect через утечку Sentinel Value])https://img-cdn.gateio.im/webp-social/moments-1e3fda77c04bceafdcc40413824a5d37.webp(
Резюме
В данной статье кратко рассматривается метод осуществления произвольного чтения через утечку Uninitialized Oddball. В V8 также существует множество других значений-стражей, которые могут представлять собой аналогичные угрозы безопасности. Это дает нам следующие выводы:
Могут ли другие Uninitialized Oddball утечки также легко привести к V8 RCE.
Существует спор о том, следует ли рассматривать такие вопросы как официальные проблемы безопасности.
Необходимо ли включать такие переменные, как %TheHole/Uninitialized Oddball в Fuzzer для обнаружения новых уязвимостей.
В любом случае, подобные проблемы значительно сокращают период полного использования хакерами, и мы должны уделять этому серьезное внимание.
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
6 Лайков
Награда
6
5
Поделиться
комментарий
0/400
HallucinationGrower
· 15ч назад
Ё-моё, как это могло утечь?
Посмотреть ОригиналОтветить0
CodeAuditQueen
· 15ч назад
Ещё одна поверхность атаки варианта CVE, тьфу-тьфу.
Посмотреть ОригиналОтветить0
WhaleWatcher
· 15ч назад
Гугл, вы играете с огнем? Двигаетесь назад в истории.
Посмотреть ОригиналОтветить0
BearMarketSurvivor
· 15ч назад
Невозможно закончить исправление багов.
Посмотреть ОригиналОтветить0
CryptoAdventurer
· 15ч назад
Снова пришло время платить налог на интеллект? Понимающие поймут
Утечка Sentinel Value из V8-движка вызывает риски безопасности. Неинициализированный Oddball стал новым вектором атаки.
Анализ проблемы безопасности, вызванной утечкой Sentinel Value в движке Chrome v8
Сентинельное значение — это специальное значение в алгоритмах, которое обычно используется в качестве условия завершения в циклах или рекурсивных алгоритмах. В исходном коде Chrome существует несколько сентинельных значений, утечка некоторых из которых в среду JavaScript может привести к проблемам с безопасностью.
Ранее исследования показали, что через утечку объекта TheHole можно выполнить произвольный код внутри песочницы Chrome. Вскоре после этого команда Google исправила соответствующий CVE. Однако, помимо объекта TheHole, в v8 есть и другие встроенные объекты, которые не должны утекать в JS. В этой статье будет обсуждаться объект Uninitialized Oddball, метод обхода которого в настоящее время все еще доступен в последней версии V8.
Стоит отметить, что этот метод обладает определенной универсальностью:
В CVE-2021-30551 первоначальный POC заключается в утечке внутреннего неинициализированного странного значения.
В CVE-2022-1486 POC также напрямую раскрывает UninitializedOddball.
В Issue1352549( представлено полное эксплойт-код для нераспределенного CVE).
Эти примеры показывают, что утечка Uninitialized Oddball может привести к серьезным проблемам с безопасностью.
Значение Sentinel в V8
Большинство встроенных объектов V8 определены в файле v8/src/roots/roots.h, эти объекты последовательно размещены в памяти. Если встроенные объекты, которые не должны быть раскрыты, будут раскрыты в JavaScript, это может привести к выполнению произвольного кода в песочнице.
Чтобы это подтвердить, мы можем изменить нативную функцию V8, чтобы утечка Uninitialized Oddball произошла в JavaScript. В частности, можно изменить смещение относительно isolate в функции %TheHole(), чтобы она возвращала Uninitialized Oddball.
! Эксклюзивное раскрытие обхода Chrome v8 HardenProtect путем утечки сигнального значения
Обход защиты HardenType
Использование Uninitialized Oddball позволяет реализовать относительно произвольное чтение. Ключевой код приведен ниже:
JavaScript function read(obj, idx) { вернуть obj[idx]; }
пусть uninitialized_oddball = %TheHole(); пусть ab = новый ArrayBuffer(8); пусть fa = новый Float64Array(ab); пусть ia = новый BigInt64Array(ab);
пусть зло = [1.1, 2.2, 3.3]; evil.prop = 1;
%ПодготовитьФункциюДляОптимизации(читать); читай(зло, 0); читай(зло, 1); %ОптимизироватьФункциюНаСледующемВызове(читать); читай(зло, 0);
пусть val = read(uninitialized_oddball, "prop"); fa[0] = вал; console.log(ia0192828374656574839201[0];
В оптимизированном ассемблерном коде смещение вычисляется и возвращает значение массива напрямую в соответствии с семантикой JavaScript, без проверки значения obj.prop как ключа. Это приводит к смешиванию типов, что позволяет произвольное чтение.
! [Эксклюзивное раскрытие обхода Chrome v8 HardenProtect путем утечки сигнального значения])https://img-cdn.gateio.im/webp-social/moments-26c26345e3ec4effeea2e3e6b7cd8772.webp(
Поскольку Uninitialized Oddball располагается в памяти V8 ближе к началу и является более примитивным, его легче подделать, чем объект TheHole, что делает его предпочтительным методом обхода HardenType.
Рекомендуемое решение состоит в том, чтобы при возврате элементов массива оптимизированной функции добавить проверку массива map, чтобы избежать прямого вычисления смещения для возврата значений массива.
![Эксклюзивное разоблачение обхода защиты HardenProtect Chrome v8 через утечку Sentinel Value])https://img-cdn.gateio.im/webp-social/moments-4c091ca0e153e953eb168e99762ff7cc.webp(
Предупреждение PatchGap
После анализа Issue1352549 было обнаружено, что у некоторых программ может быть проблема PatchGap. Например, у Skype этот уязвимость до сих пор не исправлена. На платформе x86, из-за отсутствия сжатия адресов, произвольное чтение и запись осуществляется относительно всего процесса.
Хотя Skype включил ASLR, из-за большого размера файла хакеры могут просто выполнять чтение и запись по определенному фиксированному адресу, что дает им большую вероятность чтения и записи содержимого файла Skype. В сочетании с традиционными методами, такими как анализ PE, можно завершить всю цепочку эксплуатации уязвимости.
Этот PatchGap не только касается Issue1352549, но также значительно упрощает использование уязвимостей, таких как CVE-2022-1486 и CVE-2021-30551. Хакерам почти не требуется дополнительное исследование для полного использования.
![Эксклюзивное раскрытие обхода защиты Chrome v8 HardenProtect через утечку Sentinel Value])https://img-cdn.gateio.im/webp-social/moments-1e3fda77c04bceafdcc40413824a5d37.webp(
Резюме
В данной статье кратко рассматривается метод осуществления произвольного чтения через утечку Uninitialized Oddball. В V8 также существует множество других значений-стражей, которые могут представлять собой аналогичные угрозы безопасности. Это дает нам следующие выводы:
Могут ли другие Uninitialized Oddball утечки также легко привести к V8 RCE.
Существует спор о том, следует ли рассматривать такие вопросы как официальные проблемы безопасности.
Необходимо ли включать такие переменные, как %TheHole/Uninitialized Oddball в Fuzzer для обнаружения новых уязвимостей.
В любом случае, подобные проблемы значительно сокращают период полного использования хакерами, и мы должны уделять этому серьезное внимание.
! [Эксклюзивное раскрытие обхода Chrome v8 HardenProtect путем утечки сигнального значения])https://img-cdn.gateio.im/webp-social/moments-ed89289bebf59d4b27f5bffb5511a8c5.webp(
! [Эксклюзивное раскрытие обхода Chrome v8 HardenProtect путем утечки значения Sentinel])https://img-cdn.gateio.im/webp-social/moments-0e52075003a8ee2ca492a5fc9f35c36b.webp(
! [Эксклюзивное раскрытие обхода Chrome v8 HardenProtect путем утечки значения Sentinel])https://img-cdn.gateio.im/webp-social/moments-230537e420d579aabd89bdd168b20878.webp(
![Эксклюзивное разоблачение обхода защиты Chrome v8 HardenProtect через утечку Sentinel Value])https://img-cdn.gateio.im/webp-social/moments-506159c94c9e0988552cbcbd13d971e1.webp(
! [Эксклюзивное раскрытие обхода Chrome v8 HardenProtect путем утечки сигнального значения])https://img-cdn.gateio.im/webp-social/moments-e9e2000fd501b69ee3ee643a459a26dd.webp(