Обхід Chrome v8 HardenProtect через витік значення Sentinel
Передмова
Sentinel value є спеціальним значенням в алгоритмах, яке зазвичай використовується в якості умови завершення у циклах або рекурсивних алгоритмах. У вихідному коді Chrome є багато Sentinel value. Раніше були дослідження, які показали, як через витік об'єкта TheHole реалізувати виконання довільного коду в пісочниці. Команда Google швидко випустила відповідні виправлення.
Крім об'єкта TheHole, у V8 є багато інших рідних об'єктів, які не повинні витікати в JS. У цій статті буде обговорено об'єкт Uninitialized Oddball, який наразі все ще доступний у останній версії V8. Варто зазначити, що цей метод має певну універсальність і раніше з'являвся в кількох вразливостях.
Більшість вбудованих об'єктів v8 визначено у файлі v8/src/roots/roots.h, ці об'єкти розташовані в пам'яті послідовно. Як тільки вбудовані об'єкти, які не повинні бути виведені, виводяться в Javascript, стає можливим виконання будь-якого коду в пісочниці.
Щоб перевірити цей метод, ми можемо модифікувати рідні функції v8, щоб витік Uninitialized Oddball у JavaScript. Зокрема, можна змінити зсув відносно ізолятору у функції %TheHole().
Використання Uninitialized Oddball дозволяє реалізувати відносне довільне читання і запис. Ключовим моментом є те, що в оптимізованій функції читання JavaScript перевіряється лише правильність атрибута prop об'єкта obj, але не перевіряється значення з ключем obj.prop, а безпосередньо обчислюється зміщення відповідно до семантики JavaScript для отримання значення масиву. Це призводить до плутанини типів під час обчислень, що дозволяє реалізувати довільне читання.
Оскільки Uninitialized Oddball у пам'яті v8 має вищий пріоритет та є більш первісним, ніж об'єкт TheHole, його легше підробити, тому він є переважним методом обходу виправлень для TheHole.
Рекомендується виправити шляхом додавання перевірки масиву map при поверненні елементів масиву з оптимізованої функції, щоб уникнути прямого обчислення зсуву для повернення значення.
Окрім уваги до історичних вразливостей, слід звертати увагу на вразливості, які постачальники тихо виправляють у базових компонентах. Наразі Skype все ще не виправив цю вразливість. Способи використання під x86 та x64 трохи відрізняються, але в обох випадках можливе виконання довільного читання та запису.
Цей PatchGap не лише стосується Issue1352549, але й публікація нового методу значно знизила складність експлуатації подібних вразливостей. Хакерам практично не потрібно досліджувати, щоб завершити повну експлуатацію будь-якої раніше вразливої прогалини Uninitialized Oddball.
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
9 лайків
Нагородити
9
6
Поділіться
Прокоментувати
0/400
MetaMaskVictim
· 11год тому
Знову попав у пастку v8.
Переглянути оригіналвідповісти на0
gas_fee_therapist
· 08-05 17:35
v8 знову провалився, безпека все більше пAMP.
Переглянути оригіналвідповісти на0
GreenCandleCollector
· 08-05 17:34
Ця вразливість досить жорстка, так?
Переглянути оригіналвідповісти на0
LightningPacketLoss
· 08-05 17:32
Цю помилку знову виправили. Нам потрібно терміново полагодити наш сервер.
Новий метод експлуатації вразливості Chrome v8: витік реалізації неініціалізованого Oddball для втечі з пісочниці
Обхід Chrome v8 HardenProtect через витік значення Sentinel
Передмова
Sentinel value є спеціальним значенням в алгоритмах, яке зазвичай використовується в якості умови завершення у циклах або рекурсивних алгоритмах. У вихідному коді Chrome є багато Sentinel value. Раніше були дослідження, які показали, як через витік об'єкта TheHole реалізувати виконання довільного коду в пісочниці. Команда Google швидко випустила відповідні виправлення.
Крім об'єкта TheHole, у V8 є багато інших рідних об'єктів, які не повинні витікати в JS. У цій статті буде обговорено об'єкт Uninitialized Oddball, який наразі все ще доступний у останній версії V8. Варто зазначити, що цей метод має певну універсальність і раніше з'являвся в кількох вразливостях.
! Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel
Значення Sentinel у V8
Більшість вбудованих об'єктів v8 визначено у файлі v8/src/roots/roots.h, ці об'єкти розташовані в пам'яті послідовно. Як тільки вбудовані об'єкти, які не повинні бути виведені, виводяться в Javascript, стає можливим виконання будь-якого коду в пісочниці.
Щоб перевірити цей метод, ми можемо модифікувати рідні функції v8, щоб витік Uninitialized Oddball у JavaScript. Зокрема, можна змінити зсув відносно ізолятору у функції %TheHole().
! Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel
Обхід HardenType
Використання Uninitialized Oddball дозволяє реалізувати відносне довільне читання і запис. Ключовим моментом є те, що в оптимізованій функції читання JavaScript перевіряється лише правильність атрибута prop об'єкта obj, але не перевіряється значення з ключем obj.prop, а безпосередньо обчислюється зміщення відповідно до семантики JavaScript для отримання значення масиву. Це призводить до плутанини типів під час обчислень, що дозволяє реалізувати довільне читання.
Оскільки Uninitialized Oddball у пам'яті v8 має вищий пріоритет та є більш первісним, ніж об'єкт TheHole, його легше підробити, тому він є переважним методом обходу виправлень для TheHole.
Рекомендується виправити шляхом додавання перевірки масиву map при поверненні елементів масиву з оптимізованої функції, щоб уникнути прямого обчислення зсуву для повернення значення.
! Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel
! Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel
! Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel
Попередження про ризики PatchGap
Окрім уваги до історичних вразливостей, слід звертати увагу на вразливості, які постачальники тихо виправляють у базових компонентах. Наразі Skype все ще не виправив цю вразливість. Способи використання під x86 та x64 трохи відрізняються, але в обох випадках можливе виконання довільного читання та запису.
Цей PatchGap не лише стосується Issue1352549, але й публікація нового методу значно знизила складність експлуатації подібних вразливостей. Хакерам практично не потрібно досліджувати, щоб завершити повну експлуатацію будь-якої раніше вразливої прогалини Uninitialized Oddball.
! Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel
Підсумок
У v8 є багато інших значень Sentinel, які можуть мати подібні проблеми. Це дає нам певні підказки:
Чи також легко реалізувати v8 RCE через інші Uninitialized Oddball витоки?
Чи слід такі питання офіційно вважати питаннями безпеки, досі залишається спірним.
Під час тестування на надійність, можливо, слід розглянути можливість додавання різних значень Sentinel як змінних.
У будь-якому разі, такі проблеми значно скорочують повний цикл експлуатації хакерами. Ми повинні бути пильними щодо цього.
! Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel