Технічний аналіз обходу захисту HardenProtect Chrome V8 за допомогою значення Sentinel
Sentinel value є спеціальним значенням в алгоритмах, яке зазвичай використовується в якості умови завершення в циклі або рекурсивному алгоритмі. У вихідному коді Chrome є багато Sentinel value. Нещодавні дослідження показали, що через витік об'єкта TheHole можна реалізувати довільне виконання коду в пісочниці для CVE-2021-38003 та CVE-2022-1364. Команда Google згодом оновила ці два вразливості.
Крім об'єкта TheHole, в V8 є й інші рідні об'єкти, які не повинні бути розкриті в JavaScript. У цій статті обговорюється об'єкт Uninitialized Oddball, який все ще можна використовувати в останній версії V8.
Більшість вбудованих об'єктів V8 визначено у файлі v8/src/roots/roots.h, ці об'єкти розташовані в пам'яті поряд. Якщо вбудовані об'єкти, які не повинні бути розкриті, будуть розкриті в JavaScript, це може призвести до виконання довільного коду в пісочниці.
Щоб перевірити цей метод, можна змінити нативні функції V8, щоб витоку Uninitialized Oddball в JavaScript. Конкретно, можна змінити зміщення відносно isolate в функції %TheHole(), щоб вона повертала Uninitialized Oddball.
Використання Uninitialized Oddball дозволяє реалізувати відносно довільне читання та запис. Оптимізована функція читання JavaScript безпосередньо обчислює зсув за семантикою JavaScript, отримуючи значення масиву, що призводить до змішування типів і реалізації довільного читання.
Рекомендоване рішення полягає в тому, щоб при поверненні елементів масиву з оптимізованої функції додати перевірку масиву map, щоб уникнути прямого обчислення зсуву для повернення значення масиву.
Варто зазначити, що цей метод підходить не тільки для Chrome, інше програмне забезпечення, яке використовує двигун V8, також може бути під загрозою. Наприклад, Skype наразі ще не виправив цю вразливість. У x86, через відсутність стиснення адрес, довільне читання та запис здійснюється безпосередньо відносно всього процесу.
В цілому, через витік uninitialized_Oddball у значенні Sentinel можна реалізувати довільне читання примітиву. У V8 є й інші значення Sentinel, які можуть призвести до подібних проблем. Рекомендується додати ці значення Sentinel як змінні до fuzzer, щоб виявити більше потенційних експлуатаційних примітивів. Незалежно від того, чи вважаються ці проблеми офіційно безпечними, такі проблеми значно скорочують час, необхідний хакерам для реалізації повної експлуатації.
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
11 лайків
Нагородити
11
4
Поділіться
Прокоментувати
0/400
TommyTeacher
· 07-20 16:35
Дійсно, це трохи небезпечно.
Переглянути оригіналвідповісти на0
BrokeBeans
· 07-20 16:22
Весь день думаю про виривання ям і свердління, хіба не краще просто вирішувати завдання?
Аналіз та захист уразливості витоку Sentinel Value в двигуні Chrome V8
Технічний аналіз обходу захисту HardenProtect Chrome V8 за допомогою значення Sentinel
Sentinel value є спеціальним значенням в алгоритмах, яке зазвичай використовується в якості умови завершення в циклі або рекурсивному алгоритмі. У вихідному коді Chrome є багато Sentinel value. Нещодавні дослідження показали, що через витік об'єкта TheHole можна реалізувати довільне виконання коду в пісочниці для CVE-2021-38003 та CVE-2022-1364. Команда Google згодом оновила ці два вразливості.
Крім об'єкта TheHole, в V8 є й інші рідні об'єкти, які не повинні бути розкриті в JavaScript. У цій статті обговорюється об'єкт Uninitialized Oddball, який все ще можна використовувати в останній версії V8.
Більшість вбудованих об'єктів V8 визначено у файлі v8/src/roots/roots.h, ці об'єкти розташовані в пам'яті поряд. Якщо вбудовані об'єкти, які не повинні бути розкриті, будуть розкриті в JavaScript, це може призвести до виконання довільного коду в пісочниці.
! Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel
Щоб перевірити цей метод, можна змінити нативні функції V8, щоб витоку Uninitialized Oddball в JavaScript. Конкретно, можна змінити зміщення відносно isolate в функції %TheHole(), щоб вона повертала Uninitialized Oddball.
! Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel
Використання Uninitialized Oddball дозволяє реалізувати відносно довільне читання та запис. Оптимізована функція читання JavaScript безпосередньо обчислює зсув за семантикою JavaScript, отримуючи значення масиву, що призводить до змішування типів і реалізації довільного читання.
! Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel
! Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel
! Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel
Рекомендоване рішення полягає в тому, щоб при поверненні елементів масиву з оптимізованої функції додати перевірку масиву map, щоб уникнути прямого обчислення зсуву для повернення значення масиву.
Варто зазначити, що цей метод підходить не тільки для Chrome, інше програмне забезпечення, яке використовує двигун V8, також може бути під загрозою. Наприклад, Skype наразі ще не виправив цю вразливість. У x86, через відсутність стиснення адрес, довільне читання та запис здійснюється безпосередньо відносно всього процесу.
! Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel
! Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel
! Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel
В цілому, через витік uninitialized_Oddball у значенні Sentinel можна реалізувати довільне читання примітиву. У V8 є й інші значення Sentinel, які можуть призвести до подібних проблем. Рекомендується додати ці значення Sentinel як змінні до fuzzer, щоб виявити більше потенційних експлуатаційних примітивів. Незалежно від того, чи вважаються ці проблеми офіційно безпечними, такі проблеми значно скорочують час, необхідний хакерам для реалізації повної експлуатації.