Аналіз та використання вразливостей безпеки значення Sentinel у движку Chrome V8

Аналіз Sentinel Value в движку Google Chrome V8 та його безпекові ризики

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

Значення Sentinel у V8

Файл roots.h виходу V8 визначає велику кількість рідних об'єктів, які розташовані в пам'яті послідовно. Якщо ці рідні об'єкти, які не повинні бути відкритими для JavaScript, будуть витікати, це може призвести до втечі з пісочниці. Витік об'єкта TheHole в минулому є типовим прикладом.

Для перевірки проблеми у останній версії V8 можна змінити функцію %TheHole(), щоб вона повертала об'єкт Uninitialized Oddball:

Javascript print(%DebugPrint(%TheHole())); // Вивід:Невизначене значення

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

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

Використовуючи Uninitialized Oddball, можна побудувати наступний PoC код для реалізації довільного читання:

Javascript function read(obj, idx) { повернути obj[idx]; }

let uninitialized = %TheHole(); нехай arr = [1.1]; %ПідготуватиФункціюДляОптимізації(читати); read(arr, 0); read(arr, 0); %ОптимізуватиФункціюНаНаступномуВиклику(читати); read(arr, 0);

print(read(некоректно 0x1234n));

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

Оптимізована функція read після дизасемблювання показує, що вона не проводить сувору перевірку типу Value obj.prop, а безпосередньо обчислює зміщення відповідно до семантики JavaScript і повертає елементи масиву, що призводить до змішування типів та реалізації довільного читання.

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

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

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

Попередження про ризики PatchGap

Аналіз показав, що деяке програмне забезпечення, таке як Skype, може мати проблему PatchGap, яка ще не була виправлена. Хакери можуть використати цю уразливість для швидкого завершення повного експлуатаційного ланцюга.

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

Крім того, після публікації нового методу обходу, використання деяких історичних вразливостей (, таких як Issue1314616 та Issue1216437), значно спростилося. Рекомендується виробникам повторно оцінити пов'язані з вразливостями ризики безпеки.

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

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

Підсумок

У V8 є ще багато інших значень Sentinel, які варто дослідити. Рекомендується розглянути можливість додавання таких змінних, як %TheHole/Uninitialized_Oddball, до Fuzzer для виявлення нових експлуатаційних примітивів. Незалежно від того, чи буде ця проблема офіційно визнана проблемою безпеки, вона може значно скоротити повний цикл експлуатації для зловмисників.

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

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

SENC10.69%
Переглянути оригінал
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
  • Нагородити
  • 5
  • Репост
  • Поділіться
Прокоментувати
0/400
ParanoiaKingvip
· 9год тому
Ще одна загроза.
Переглянути оригіналвідповісти на0
WenMoon42vip
· 9год тому
Знову глибоке дослідження!
Переглянути оригіналвідповісти на0
CryptoSourGrapevip
· 9год тому
Виявляється, тут також є ями.
Переглянути оригіналвідповісти на0
ForkItAllDayvip
· 9год тому
Новий підхід до переповнення стеку
Переглянути оригіналвідповісти на0
Fren_Not_Foodvip
· 9год тому
Обійти вразливість так круто!
Переглянути оригіналвідповісти на0
  • Закріпити