Дослідження безпекових ризиків, пов'язаних із витоком значення Sentinel у движку Chrome V8
Сentinel value - це значення, яке використовується в алгоритмах як спеціальна мітка, зазвичай в циклах або рекурсії в якості умов завершення. У вихідному коді движка Chrome V8 існує кілька значень Sentinel, деякі з яких не повинні бути виведені в середовище JavaScript. У цій статті буде обговорено метод обходу механізму Chrome V8 HardenProtect шляхом витоку об'єкта Uninitialized Oddball.
Значення Sentinel у V8
У файлі roots.h виходу V8 визначено велику кількість рідних об'єктів, які розміщені в пам'яті сусідньо. Як тільки ці об'єкти потрапляють у JavaScript, це може призвести до виходу з пісочниці.
Ми можемо перевірити це, змінюючи рідні функції V8. Наприклад, змініть зсув функції %TheHole(), щоб вона повертала об'єкт Uninitialized Oddball замість об'єкта TheHole.
Використання об'єкта Uninitialized Oddball дозволяє здійснювати відносно довільне зчитування пам'яті. Ключовим моментом є те, що у оптимізованій функції читання JavaScript перевіряється лише правильність властивості prop об'єкта, але не перевіряється значення за ключем obj.prop. Це призводить до змішування типів під час обчислень, що дозволяє здійснювати довільне зчитування.
Аналіз оптимізованого асемблерного коду показує, що при передачі uninitialized_oddball програма безпосередньо обчислює зсув та читає дані, не проводячи перевірки типу. Цей метод легше конструювати та використовувати, ніж об'єкт TheHole.
Рекомендований варіант виправлення полягає в тому, щоб при поверненні елементів масиву з оптимізованої функції додати перевірку масиву map, щоб уникнути прямого обчислення значення масиву за зміщенням.
Окрім того, що потрібно звертати увагу на відомі історичні вразливості, нам також слід звертати увагу на проблеми, які постачальники тихо виправляють у базових компонентах. Після аналізу виявлено, що програмне забезпечення Skype досі не виправило цю вразливість. На платформі x86, через відсутність стиснення адрес, діапазон довільного читання та запису є більшим, і майже можна читати та записувати весь простір процесу.
Цей PatchGap стосується не лише Issue1352549, а й подібних вразливостей, таких як Issue1314616 та Issue1216437. Після публікації нового методу обходу, складність експлуатації цих вразливостей значно знизилася, і зловмисники практично не потребують додаткових досліджень для завершення повного ланцюга експлуатації.
Ця стаття коротко обговорює методи реалізації довільного читання через витік Uninitialized Oddball. У V8 також існує кілька інших значень Sentinel, які можуть призвести до подібних проблем. Це нагадує нам:
Інші uninitialized_Oddball витоки також можуть призвести до втечі з пісочниці V8.
Чи слід такі питання вважати формальними вразливостями безпеки, все ще залишається спірним.
Розгляньте можливість додавання значення Sentinel як змінної в модульному тестуванні для виявлення нових методів використання.
У будь-якому випадку, такі питання значно скорочують цикл повного використання зловмисниками, тому на них слід звертати особливу увагу.
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
12 лайків
Нагородити
12
4
Поділіться
Прокоментувати
0/400
MoonBoi42
· 13год тому
Трохи страшно, занадто багато вразливостей.
Переглянути оригіналвідповісти на0
SleepyArbCat
· 08-02 05:40
Кіт, який втомився настільки, що може лише писати код...zZz
Аналіз безпекових ризиків та використання витоку значення Sentinel у движку Chrome V8
Дослідження безпекових ризиків, пов'язаних із витоком значення Sentinel у движку Chrome V8
Сentinel value - це значення, яке використовується в алгоритмах як спеціальна мітка, зазвичай в циклах або рекурсії в якості умов завершення. У вихідному коді движка Chrome V8 існує кілька значень Sentinel, деякі з яких не повинні бути виведені в середовище JavaScript. У цій статті буде обговорено метод обходу механізму Chrome V8 HardenProtect шляхом витоку об'єкта Uninitialized Oddball.
Значення Sentinel у V8
У файлі roots.h виходу V8 визначено велику кількість рідних об'єктів, які розміщені в пам'яті сусідньо. Як тільки ці об'єкти потрапляють у JavaScript, це може призвести до виходу з пісочниці.
Ми можемо перевірити це, змінюючи рідні функції V8. Наприклад, змініть зсув функції %TheHole(), щоб вона повертала об'єкт Uninitialized Oddball замість об'єкта TheHole.
! Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel
Обхід захисту HardenType
Використання об'єкта Uninitialized Oddball дозволяє здійснювати відносно довільне зчитування пам'яті. Ключовим моментом є те, що у оптимізованій функції читання JavaScript перевіряється лише правильність властивості prop об'єкта, але не перевіряється значення за ключем obj.prop. Це призводить до змішування типів під час обчислень, що дозволяє здійснювати довільне зчитування.
Аналіз оптимізованого асемблерного коду показує, що при передачі uninitialized_oddball програма безпосередньо обчислює зсув та читає дані, не проводячи перевірки типу. Цей метод легше конструювати та використовувати, ніж об'єкт TheHole.
! Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel
! Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel
! Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel
! Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel
Рекомендований варіант виправлення полягає в тому, щоб при поверненні елементів масиву з оптимізованої функції додати перевірку масиву map, щоб уникнути прямого обчислення значення масиву за зміщенням.
! Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel
Попередження про безпеку PatchGap
Окрім того, що потрібно звертати увагу на відомі історичні вразливості, нам також слід звертати увагу на проблеми, які постачальники тихо виправляють у базових компонентах. Після аналізу виявлено, що програмне забезпечення Skype досі не виправило цю вразливість. На платформі x86, через відсутність стиснення адрес, діапазон довільного читання та запису є більшим, і майже можна читати та записувати весь простір процесу.
Цей PatchGap стосується не лише Issue1352549, а й подібних вразливостей, таких як Issue1314616 та Issue1216437. Після публікації нового методу обходу, складність експлуатації цих вразливостей значно знизилася, і зловмисники практично не потребують додаткових досліджень для завершення повного ланцюга експлуатації.
! Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel
Підсумок
Ця стаття коротко обговорює методи реалізації довільного читання через витік Uninitialized Oddball. У V8 також існує кілька інших значень Sentinel, які можуть призвести до подібних проблем. Це нагадує нам:
Інші uninitialized_Oddball витоки також можуть призвести до втечі з пісочниці V8.
Чи слід такі питання вважати формальними вразливостями безпеки, все ще залишається спірним.
Розгляньте можливість додавання значення Sentinel як змінної в модульному тестуванні для виявлення нових методів використання.
У будь-якому випадку, такі питання значно скорочують цикл повного використання зловмисниками, тому на них слід звертати особливу увагу.
! Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel