Sentinel value - це спеціальне значення в алгоритмах, яке часто використовується як умова завершення в циклах або рекурсивних алгоритмах. У вихідному коді Chrome існує кілька різних Sentinel value, деякі з яких можуть викликати проблеми безпеки, якщо потраплять в середовище JavaScript.
Раніше були дослідження, які показали, що витік об'єкта TheHole може призвести до виконання довільного коду в пісочниці. Команда Google виправила це. Але насправді в V8 є й інші рідні об'єкти, які не повинні витікати в JS, такі як Uninitialized Oddball об'єкт.
Витік об'єкта Uninitialized Oddball може призвести до втечі з пісочниці. Ця проблема вперше з'явилася в Issue1352549 і наразі ще не виправлена. Цей метод має певну універсальність і з'являвся в кількох вразливостях.
Вбудовані об'єкти V8 визначені в файлі v8/src/roots/roots.h, вони розташовані в пам'яті сусідньо. Як тільки ці об'єкти витікають у середовище JavaScript, може статися втеча з пісочниці.
Щоб перевірити це питання, можна змінити рідну функцію V8, щоб витоку Uninitialized Oddball в JavaScript. Конкретно можна змінити реалізацію функції %TheHole().
Використання об'єктів Uninitialized Oddball може обійти захист HardenType. Завдяки конструюванню специфічного JavaScript-коду можна досягти відносно довільного читання і запису пам'яті. Це відбувається через те, що оптимізований код недостатньо перевіряє властивості об'єкта.
Щодо рекомендацій щодо виправлення, при поверненні елементів масиву з оптимізованої функції слід додати перевірку масиву map, щоб уникнути прямого обчислення зсуву для повернення значення.
Це питання також нагадує нам про PatchGap, тобто деякі програми можуть використовувати версію V8, у якій ця вразливість не була виправлена. Наприклад, Skype наразі все ще не виправив цю проблему. У архітектурі x86, через відсутність стиснення адрес, можна реалізувати довільне читання та запис у межах процесу.
В цілому, у V8 можуть існувати різні значення Sentinel, які можуть мати подібні проблеми безпеки. Рекомендується провести подальше дослідження впливу інших витоків Uninitialized Oddball, розглянути можливість включення таких об'єктів у сферу фузз-тестування для виявлення більшої кількості потенційних способів використання. У будь-якому випадку, такі проблеми можуть значно скоротити цикл експлуатації вразливостей зловмисниками.
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.
5 лайків
Нагородити
5
5
Поділіться
Прокоментувати
0/400
DuckFluff
· 13год тому
О, круто, ця дірка звучить приємно~
Переглянути оригіналвідповісти на0
ShitcoinConnoisseur
· 07-11 14:18
А чому ще не поспішити з ремонтом? Що там робить v8?
Chrome V8 Sentinel Value безпекова уразливість: Витік неініціалізованого Oddball об'єкта може призвести до втечі з пісочниці
Sentinel Value в Chrome V8: проблеми безпеки
Sentinel value - це спеціальне значення в алгоритмах, яке часто використовується як умова завершення в циклах або рекурсивних алгоритмах. У вихідному коді Chrome існує кілька різних Sentinel value, деякі з яких можуть викликати проблеми безпеки, якщо потраплять в середовище JavaScript.
Раніше були дослідження, які показали, що витік об'єкта TheHole може призвести до виконання довільного коду в пісочниці. Команда Google виправила це. Але насправді в V8 є й інші рідні об'єкти, які не повинні витікати в JS, такі як Uninitialized Oddball об'єкт.
Витік об'єкта Uninitialized Oddball може призвести до втечі з пісочниці. Ця проблема вперше з'явилася в Issue1352549 і наразі ще не виправлена. Цей метод має певну універсальність і з'являвся в кількох вразливостях.
Вбудовані об'єкти V8 визначені в файлі v8/src/roots/roots.h, вони розташовані в пам'яті сусідньо. Як тільки ці об'єкти витікають у середовище JavaScript, може статися втеча з пісочниці.
Щоб перевірити це питання, можна змінити рідну функцію V8, щоб витоку Uninitialized Oddball в JavaScript. Конкретно можна змінити реалізацію функції %TheHole().
! Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel
Використання об'єктів Uninitialized Oddball може обійти захист HardenType. Завдяки конструюванню специфічного JavaScript-коду можна досягти відносно довільного читання і запису пам'яті. Це відбувається через те, що оптимізований код недостатньо перевіряє властивості об'єкта.
! Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel
! Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel
! Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel
! Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel
Щодо рекомендацій щодо виправлення, при поверненні елементів масиву з оптимізованої функції слід додати перевірку масиву map, щоб уникнути прямого обчислення зсуву для повернення значення.
Це питання також нагадує нам про PatchGap, тобто деякі програми можуть використовувати версію V8, у якій ця вразливість не була виправлена. Наприклад, Skype наразі все ще не виправив цю проблему. У архітектурі x86, через відсутність стиснення адрес, можна реалізувати довільне читання та запис у межах процесу.
! Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel
! Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel
В цілому, у V8 можуть існувати різні значення Sentinel, які можуть мати подібні проблеми безпеки. Рекомендується провести подальше дослідження впливу інших витоків Uninitialized Oddball, розглянути можливість включення таких об'єктів у сферу фузз-тестування для виявлення більшої кількості потенційних способів використання. У будь-якому випадку, такі проблеми можуть значно скоротити цикл експлуатації вразливостей зловмисниками.