Анализ эксплуатации уязвимости Sentinel Value в движке Chrome V8: возможность выполнения кода без дополнительных исследований

robot
Генерация тезисов в процессе

Анализ эксплуатации уязвимости Sentinel Value в движке Chrome V8

Sentinel value — это специальное значение в алгоритмах, которое обычно используется в качестве условия завершения в циклах или рекурсивных алгоритмах. В исходном коде Chrome существует множество Sentinel value. Ранее исследования показали, что можно осуществить произвольное выполнение кода в песочнице Chrome через утечку объекта TheHole. Команда Google впоследствии исправила соответствующие уязвимости.

Однако в V8 также есть другие встроенные объекты, которые не должны быть доступны в JS. В этой статье обсуждается объект Uninitialized Oddball, утечка которого может привести к методам обхода песочницы, которые все еще доступны в последней версии V8.

Следует отметить, что этот метод обладает определенной универсальностью:

  1. CVE-2021-30551 первоначальный PoC просто раскрывает внутренний неинициализированный oddball.

  2. В PoC CVE-2022-1486 также была прямо раскрыта UninitializedOddball.

  3. Issue1352549 ( нераспределенный CVE) подробно описывает методы эксплуатации.

Эти примеры показывают, что стоит обратить внимание на возможность атак с использованием утечки Uninitialized Oddball.

Значение Sentinel в V8

Большинство встроенных объектов V8 определены в файле v8/src/roots/roots.h, и они расположены в памяти последовательно. Как только эти встроенные объекты, которые не должны быть раскрыты, становятся доступными в JavaScript, может быть реализовано выполнение произвольного кода в песочнице.

Чтобы это проверить, можно изменить возвращаемое значение нативной функции V8 %TheHole() на Uninitialized Oddball.

Эксклюзивное разоблачение обхода Chrome v8 HardenProtect через утечку Sentinel Value

Обойти защиту HardenType

В Issue1352549 представлен полный код обхода. Упрощенная основная логика следующая:

JavaScript function read(obj, idx) { вернуться obj[idx]; }

let uninitialized = %TheHole(); пусть arr = [1.1]; пусть res = read(uninitialized, 0x12345); %DebugPrint(res);

Этот код все еще может реализовать относительное чтение в последней версии V8 11.0.0.

Эксклюзивное разоблачение обхода Chrome v8 HardenProtect с помощью утечки Sentinel Value

Анализируя оптимизированный ассемблерный код функции read, можно заметить, что он проверяет только правильность свойства prop объекта obj, но не проверяет значение obj.prop в качестве ключа. Это приводит к путанице типов при вычислениях, что позволяет произвольно читать.

! Эксклюзивное раскрытие обхода Chrome v8 HardenProtect путем утечки значения Sentinel

При передаче uninitialized_oddball, начиная с определенной инструкции, вычисляется от obj, и в конечном итоге произвольное чтение завершается в инструкции vmovsd xmm0,[r9+r11*8+0x7], данные сохраняются в регистре xmm0.

! Эксклюзивное раскрытие обхода Chrome v8 HardenProtect путем утечки значения Sentinel

Рекомендуемое решение заключается в том, чтобы при возврате элементов массива из оптимизированной функции добавить проверку на массив map, чтобы избежать прямого вычисления смещения для возврата значений массива.

Эксклюзивное раскрытие обхода защиты HardenProtect Chrome через утечку Sentinel Value

Предупреждение PatchGap

При проверке программного обеспечения, в котором может быть уязвимость PatchGap, было обнаружено, что Skype на данный момент не исправил этот недостаток. В архитектуре x86, из-за отсутствия сжатия адресов, произвольное чтение и запись осуществляется напрямую относительно всего процесса.

Хотя Skype включил ASLR, из-за его большого размера, если его поместить непосредственно в 4 ГБ памяти, злоумышленнику достаточно читать и записывать по какому-то фиксированному адресу, чтобы с большой вероятностью прочитать или записать содержимое файлов Skype. В сочетании с традиционными методами, такими как анализ PE, можно завершить всю цепочку эксплуатации уязвимости.

! Эксклюзивное раскрытие обхода Chrome v8 HardenProtect путем утечки значения Sentinel

Этот раз PatchGap касается не только Issue1352549, но и значительно упростил эксплуатацию подобных уязвимостей, таких как Issue1314616 и Issue1216437. Хакеры практически не нуждаются в дополнительном исследовании для полной эксплуатации любой утечки uninitialized_oddball.

Эксклюзивное разоблачение обхода Chrome v8 HardenProtect через утечку Sentinel Value

Резюме

В данной статье описывается метод выполнения произвольного чтения примитивов через утечку uninitialized_Oddball из Sentinel value. В V8 также существуют другие Sentinel value, которые могут привести к аналогичным проблемам. Это дает нам следующие выводы:

  1. Может ли утечка других uninitialized_Oddball также легко привести к RCE в V8.

  2. Существует спор о том, следует ли рассматривать такого рода проблемы как официальные вопросы безопасности.

  3. В fuzzer можно рассмотреть возможность добавления таких значений-сентинелов, как %TheHole/uninitialized_Oddball, в качестве переменных для выявления других уязвимостей.

В любом случае, такие проблемы значительно сокращают период, необходимый хакерам для полного использования.

Эксклюзивное разоблачение обхода защиты Chrome v8 HardenProtect через утечку Sentinel Value

! Эксклюзивное раскрытие обхода Chrome v8 HardenProtect путем утечки сигнального значения

SENC-4.42%
Посмотреть Оригинал
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
  • Награда
  • 5
  • Репост
  • Поделиться
комментарий
0/400
CoffeeNFTradervip
· 07-22 08:13
Ещё одна уязвимость безопасности, все в панике.
Посмотреть ОригиналОтветить0
Hash_Banditvip
· 07-21 21:23
добыча с помощью js-движка только что стала реальностью...сложность эксплуатации достигла максимума
Посмотреть ОригиналОтветить0
ConsensusDissentervip
· 07-20 00:25
Еще одна кодовая черная дыра появилась. Это так страшно.
Посмотреть ОригиналОтветить0
Blockblindvip
· 07-20 00:19
v8 тоже имеет такую большую уязвимость? Убиваюсь со смеху
Посмотреть ОригиналОтветить0
BlockchainTalkervip
· 07-20 00:12
на самом деле удивлён, что V8 всё ещё испытывает трудности с этим... кстати, где моя изоляция выполнения, семья?
Посмотреть ОригиналОтветить0
  • Закрепить