Движок Chrome V8 снова обнаружил уязвимость безопасности: утечка Sentinel Value может обойти песочницу

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

Обход защиты HardenProtect Chrome V8 через утечку Sentinel Value

Сентинельное значение — это специальное значение в алгоритмах, которое часто используется в качестве условия завершения циклов или рекурсивных алгоритмов. В исходном коде Chrome существует несколько сентинельных значений. Ранее проводились исследования, указывающие на то, как использовать объект TheHole для утечки и реализации выполнения произвольного кода в песочнице. В данной статье будет обсуждаться другой объект V8 — Uninitialized Oddball, этот метод по-прежнему доступен в последней версии V8.

Этот метод универсален:

  1. В Issue1216437 впервые была предложена концепция утечки внутреннего неинициализированного странного объекта.

  2. В Issue1314616 также была прямо раскрыта UninitializedOddball, хотя на тот момент метод использования еще не был ясен.

  3. Важно обратить внимание на потенциальное влияние Issue1352549.

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

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

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

Основной код обходного метода выглядит следующим образом:

JavaScript функция read(obj, prop) { возврат obj[prop]; }

пусть uninitialized_oddball = %TheHole(); пусть arr = [1.1, 2.2, 3.3];

для (let i = 0; i < 100000; i++) { read(arr, 0);
}

пусть val = read(uninitialized_oddball, 0); console.log(val);

В тестировании V8 11.0.0, когда %TheHole() возвращает UninitializedOddball, все еще возможно реализовать относительно произвольное чтение.

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

Ключевая сборка оптимизированной функции read выглядит следующим образом:

0x558b20004086 mov R11,RDI 0x558b20004089 movzx edi,byte ptr [R11+0xb] 0x558b2000408d cmp edi,0x81 0x558b20004093 jnz 0x558b200040d8 0x558b20004095 mov R9,qword ptr [R11+0xf] 0x558b20004099 тест esi,esi 0x558b2000409b js 0x558b200040d8 0x558b2000409d movsxd R11,esi 0x558b200040a0 CMP R11,Qword PTR [R9+0xf] 0x558b200040a4 Джэ 0x558b200040d8 0x558b200040a6 vmovsd xmm0,[r9+r11*8+0x7]

При передаче uninitialized_oddball, вычисления начинаются с obj по адресу 0x558b20004086 и заканчиваются произвольным чтением в команде vmovsd, данные сохраняются в регистре xmm0.

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

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

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

Этот новый метод обхода значительно снизил сложность эксплуатации ранее подобных уязвимостей. Рекомендуется пересмотреть все утечки uninitialized_oddball.

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

  1. Легко ли реализовать RCE в V8 через другие uninitialized_Oddball утечки?

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

  3. Должен ли Sentinel value быть добавлен в качестве переменной в Fuzzer для обнаружения новых уязвимостей?

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

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

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

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

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

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

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

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

Посмотреть Оригинал
На этой странице может содержаться сторонний контент, который предоставляется исключительно в информационных целях (не в качестве заявлений/гарантий) и не должен рассматриваться как поддержка взглядов компании Gate или как финансовый или профессиональный совет. Подробности смотрите в разделе «Отказ от ответственности» .
  • Награда
  • 5
  • Поделиться
комментарий
0/400
ZKProofEnthusiastvip
· 07-09 11:53
Как всем известно, V8 управляет миром
Посмотреть ОригиналОтветить0
SleepyValidatorvip
· 07-06 23:01
Chrome действительно не подводит, стабильно.
Посмотреть ОригиналОтветить0
FlashLoanLordvip
· 07-06 17:06
Какой большой уязвимость, и все еще не исправлено?
Посмотреть ОригиналОтветить0
ForkItAllvip
· 07-06 17:00
Уязвимость v8 действительно ужасна.
Посмотреть ОригиналОтветить0
FudVaccinatorvip
· 07-06 16:51
Еще одна серьезная уязвимость. Всегда пользоваться Firefox - это прекрасно.
Посмотреть ОригиналОтветить0
  • Закрепить