Дослідження ризиків безпеки, пов'язаних з витоком Sentinel Value у движку Chrome V8
Вступ
Значення-сторож є спеціальним значенням в алгоритмах, яке зазвичай використовується як умова завершення в циклі або рекурсивному алгоритмі. У вихідному коді Chrome широко використовували це спеціальне значення. Нещодавно дослідники через витік об'єкта TheHole реалізували виконання довільного коду в пісочниці CVE-2021-38003 і CVE-2022-1364. Команда Google швидко виправила ці два вразливості.
Однак, окрім об'єкта TheHole, у V8 також існують інші рідні об'єкти, які не повинні бути розкриті в JavaScript. У цій статті буде зосереджено увагу на об'єкті Uninitialized Oddball та розглянуто, як використати його для обходу механізму HardenProtect у V8. Варто зазначити, що цей метод обходу наразі залишається дійсним для останньої версії V8 і ще не був виправлений.
Значення Sentinel у V8
Більшість рідних об'єктів V8 визначено у файлі v8/src/roots/roots.h, ці об'єкти розташовані в пам'яті послідовно. Як тільки ці рідні об'єкти, які не повинні бути викриті в JavaScript, потрапляють у відкритий доступ, це може призвести до виконання будь-якого коду в пісочниці.
Щоб це перевірити, ми можемо модифікувати рідні функції V8, щоб вивести Uninitialized Oddball в JavaScript. Конкретний метод полягає в зміні зсуву відносно isolate у функції %TheHole(), щоб вона повертала Uninitialized Oddball.
Використання об'єктів Uninitialized Oddball дозволяє здійснювати відносно довільне читання та запис. У оптимізованому коді JavaScript функція read не перевіряє значення з ключем obj.prop, а безпосередньо обчислює зсув відповідно до семантики JavaScript, отримуючи значення з масиву. Це призводить до плутанини з типами під час обчислень, що дозволяє здійснювати довільне читання.
Щодо будь-якої операції запису, можна звернутися до методу побудови в Issue1352549 для аналізу. Рекомендоване рішення полягає в тому, щоб під час повернення елементів масиву з оптимізованої функції додати перевірку масиву map, щоб уникнути прямого обчислення зсуву для повернення значення масиву.
Аналізуючи Issue1352549, ми виявили, що деяке програмне забезпечення може мати проблему PatchGap. Варто зазначити, що на даний момент Skype все ще не виправив цей вразливість. У середовищі x86 реалізація довільного читання та запису буде різною, оскільки немає стиснення адрес, і можна безпосередньо працювати відносно всього процесу.
Проблема PatchGap цього разу стосується не лише Issue1352549, але й публікація нового методу обходу значно знизила труднощі використання вразливостей, таких як Issue1314616 та Issue1216437. Хакерам майже не потрібно витрачати будь-які кошти на дослідження, щоб завершити повну експлуатацію будь-якої попередньої витоку uninitialized_oddball.
Ця стаття коротко обговорює методи досягнення довільного читання примітивів через витік uninitialized_Oddball у значеннях Sentinel. У V8 також існує багато інших значень Sentinel, які можуть призвести до подібних проблем безпеки. Це дає нам такі висновки:
Чи можуть інші uninitialized_Oddball витоки також легко реалізувати віддалене виконання коду V8.
Чи слід вважати такі питання офіційними питаннями безпеки, все ще викликає суперечки.
Розгляньте можливість додавання таких значень-сентинелів, як %TheHole/uninitialized_Oddball, як змінних у fuzzer для виявлення інших використань примітивів.
Незалежно від того, чи вважаються ці проблеми офіційно проблемами безпеки, вони суттєво скорочують період, протягом якого хакери можуть повністю використовувати уразливість.
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
25 лайків
Нагородити
25
6
Репост
Поділіться
Прокоментувати
0/400
FUD_Vaccinated
· 07-26 03:20
Знову чорний Google, ця дірка занадто часта 8
Переглянути оригіналвідповісти на0
MetaverseLandlord
· 07-24 11:22
Ого, в інших людей браузерні вразливості такі просунуті.
Дослідження витоку Sentinel Value в движку Chrome V8 та аналіз ризиків безпеки
Дослідження ризиків безпеки, пов'язаних з витоком Sentinel Value у движку Chrome V8
Вступ
Значення-сторож є спеціальним значенням в алгоритмах, яке зазвичай використовується як умова завершення в циклі або рекурсивному алгоритмі. У вихідному коді Chrome широко використовували це спеціальне значення. Нещодавно дослідники через витік об'єкта TheHole реалізували виконання довільного коду в пісочниці CVE-2021-38003 і CVE-2022-1364. Команда Google швидко виправила ці два вразливості.
Однак, окрім об'єкта TheHole, у V8 також існують інші рідні об'єкти, які не повинні бути розкриті в JavaScript. У цій статті буде зосереджено увагу на об'єкті Uninitialized Oddball та розглянуто, як використати його для обходу механізму HardenProtect у V8. Варто зазначити, що цей метод обходу наразі залишається дійсним для останньої версії V8 і ще не був виправлений.
Значення Sentinel у V8
Більшість рідних об'єктів V8 визначено у файлі v8/src/roots/roots.h, ці об'єкти розташовані в пам'яті послідовно. Як тільки ці рідні об'єкти, які не повинні бути викриті в JavaScript, потрапляють у відкритий доступ, це може призвести до виконання будь-якого коду в пісочниці.
Щоб це перевірити, ми можемо модифікувати рідні функції V8, щоб вивести Uninitialized Oddball в JavaScript. Конкретний метод полягає в зміні зсуву відносно isolate у функції %TheHole(), щоб вона повертала Uninitialized Oddball.
! Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel
Обхід захисту HardenType
Використання об'єктів Uninitialized Oddball дозволяє здійснювати відносно довільне читання та запис. У оптимізованому коді JavaScript функція read не перевіряє значення з ключем obj.prop, а безпосередньо обчислює зсув відповідно до семантики JavaScript, отримуючи значення з масиву. Це призводить до плутанини з типами під час обчислень, що дозволяє здійснювати довільне читання.
! Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel
Щодо будь-якої операції запису, можна звернутися до методу побудови в Issue1352549 для аналізу. Рекомендоване рішення полягає в тому, щоб під час повернення елементів масиву з оптимізованої функції додати перевірку масиву map, щоб уникнути прямого обчислення зсуву для повернення значення масиву.
! Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel
! Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel
! Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel
Попередження PatchGap
Аналізуючи Issue1352549, ми виявили, що деяке програмне забезпечення може мати проблему PatchGap. Варто зазначити, що на даний момент Skype все ще не виправив цей вразливість. У середовищі x86 реалізація довільного читання та запису буде різною, оскільки немає стиснення адрес, і можна безпосередньо працювати відносно всього процесу.
! Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel
Проблема PatchGap цього разу стосується не лише Issue1352549, але й публікація нового методу обходу значно знизила труднощі використання вразливостей, таких як Issue1314616 та Issue1216437. Хакерам майже не потрібно витрачати будь-які кошти на дослідження, щоб завершити повну експлуатацію будь-якої попередньої витоку uninitialized_oddball.
! Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel
! Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel
Підсумок
Ця стаття коротко обговорює методи досягнення довільного читання примітивів через витік uninitialized_Oddball у значеннях Sentinel. У V8 також існує багато інших значень Sentinel, які можуть призвести до подібних проблем безпеки. Це дає нам такі висновки:
Чи можуть інші uninitialized_Oddball витоки також легко реалізувати віддалене виконання коду V8.
Чи слід вважати такі питання офіційними питаннями безпеки, все ще викликає суперечки.
Розгляньте можливість додавання таких значень-сентинелів, як %TheHole/uninitialized_Oddball, як змінних у fuzzer для виявлення інших використань примітивів.
Незалежно від того, чи вважаються ці проблеми офіційно проблемами безпеки, вони суттєво скорочують період, протягом якого хакери можуть повністю використовувати уразливість.