Аналіз вразливості Sentinel Value в двигуні Chrome V8: реалізація RCE без додаткових досліджень

robot
Генерація анотацій у процесі

Аналіз використання вразливості Sentinel Value у движку Chrome V8

Sentinel value є спеціальним значенням в алгоритмах, яке зазвичай використовується як умова завершення в циклах або рекурсивних алгоритмах. У вихідному коді Chrome існує велика кількість Sentinel value. Раніше були дослідження, які показали, що через витік об'єкта TheHole можна реалізувати виконання будь-якого коду в пісочниці Chrome. Команда Google згодом виправила відповідні уразливості.

Однак у V8 також існують інші рідні об'єкти, які не повинні бути витікати в JS. У цій статті обговорюється об'єкт Uninitialized Oddball, витік якого може призвести до методів обходу пісочниці, які наразі все ще доступні в останній версії V8.

Слід звернути увагу на те, що цей метод має певну універсальність:

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

  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

Обхід захисту HardenType

У випуску 1352549 наведено повний код обходу. Спрощена основна логіка виглядає наступним чином:

Javascript функція 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

Аналізуючи оптимізований асемблерний код функції read, можна помітити, що він лише перевіряє, чи є атрибут prop об'єкта obj правильним, але не перевіряє значення obj.prop як ключа. Це призводить до змішування типів під час обчислень, що дозволяє здійснювати довільне читання.

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

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

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

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

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

PatchGap попередження

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

Хоча Skype увімкнув ASLR, але через великий розмір файлу, який безпосередньо розміщено в 4 ГБ пам'яті, зловмиснику достатньо лише читати і писати за певною фіксованою адресою, щоб з великою ймовірністю отримати доступ до вмісту файлу Skype. Поєднуючи традиційні методи, такі як аналіз PE, можна реалізувати всю ланцюг експлуатації вразливості.

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

Цей PatchGap не тільки стосується Issue1352549, але й значно знижує складність використання, подібну до Issue1314616 та Issue1216437. Хакери практично не потребують додаткових досліджень, щоб реалізувати повне використання будь-якого витоку uninitialized_oddball.

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

Підсумок

Ця стаття описує метод реалізації довільного читання примітиву через витік uninitialized_Oddball у значенні Sentinel. У V8 також існують інші значення Sentinel, які можуть призвести до подібних проблем. Це дає нам такі висновки:

  1. Інші uninitialized_Oddball витоки також можуть легко реалізувати RCE V8.

  2. Чи слід ці питання розглядати як офіційні питання безпеки, все ще існує суперечка.

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

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

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

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

SENC-8.28%
Переглянути оригінал
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією 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
  • Закріпити