Глибина аналізу безпеки значення Sentinel двигуна Chrome V8

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

Глибоке дослідження небезпек безпеки Sentinel Value у двигуні Chrome V8

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

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

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

  1. У CVE-2021-30551 вперше було представлено poc для витоку internal uninitialized oddball.

  2. У poc CVE-2022-1486 також безпосередньо розголошує UninitializedOddball.

  3. Issue1352549( ще не призначено CVE) показує повний код експлуатації.

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

Значення Sentinel у V8

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

Щоб перевірити ефективність цього методу в останній версії V8, ми можемо модифікувати рідні функції V8, щоб витікати Uninitialized Oddball у JavaScript. Конкретний метод полягає в модифікації зміщення відносно isolate в функції %TheHole(), щоб вона повертала Uninitialized Oddball.

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

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

Спрощуючи код, наведений у Issue1352549, ми можемо реалізувати відносне читання у версії V8 11.0.0:

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

Коли %TheHole() повертає UninitializedOddball, оптимізована функція читання JavaScript безпосередньо обчислює зсув відповідно до семантики JavaScript, не перевіряючи Value obj.prop, що призводить до плутанини типів і реалізації довільного читання.

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

Подібно до об'єкта TheHole, оскільки uninitialized_oddball в пам'яті V8 має вищий порядок і є більш первісним, його легше підробити. Після обходу заходів безпеки TheHole цей метод став переважним обходом.

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

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

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

Аналізуючи Issue1352549, ми виявили, що Skype наразі ще не виправив цей вразливість. В середовищі x86, довільне читання та запис дещо відрізняється: через відсутність адресної компресії, довільне читання та запис здійснюється безпосередньо відносно всього процесу.

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

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

Цей PatchGap не тільки стосується Issue1352549, але й публікація нового методу обходу значно знизила складність експлуатації подібних CVE-2022-1486 та CVE-2021-30551. Зловмисникам майже не потрібно додаткових досліджень, щоб повністю використати будь-яку уразливість, пов'язану з витоком uninitialized_oddball.

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

Підсумок

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

Це дає нам такі висновки:

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

  2. Google швидко виправив обхід TheHole, але тривале ігнорування використання збору сміття для обходу ASLR вказує на те, що існує неясна межа щодо того, чи вважаються такі проблеми офіційними питаннями безпеки.

  3. Якщо розглядати це як офіційну проблему безпеки, чи є необхідність додати значення Sentinel, такі як %TheHole/uninitialized_Oddball, у fuzzer як змінну, щоб виявити інші вразливості?

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

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

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

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

Переглянути оригінал
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
  • Нагородити
  • 3
  • Поділіться
Прокоментувати
0/400
GateUser-afe07a92vip
· 20год тому
Що там робить Google, це також витік?
Переглянути оригіналвідповісти на0
SelfRuggervip
· 20год тому
Схоже, що V8 цього року чекають великі події.
Переглянути оригіналвідповісти на0
SchrodingerGasvip
· 20год тому
Спав всю ніч і все ще працює v8, хто заплатить за цей газ?
Переглянути оригіналвідповісти на0
  • Закріпити