Безпекові ризики, спричинені витоком значення Sentinel у движку Chrome V8
Sentinel value є спеціальним значенням в алгоритмах, яке часто використовується як умова завершення циклів або рекурсивних алгоритмів. У вихідному коді Chrome існує кілька Sentinel value, деякі з яких не повинні бути витекли в середовище JavaScript. У цій статті буде досліджено, як використовувати витік Uninitialized Oddball об'єкта для обходу механізму HardenProtect двигуна Chrome V8.
Значення Sentinel у V8
Більшість вбудованих об'єктів V8 визначені в файлі v8/src/roots/roots.h, ці об'єкти розташовані в пам'яті поруч один з одним. Як тільки ці вбудовані об'єкти, які не повинні бути доступні JavaScript, будуть скомпрометовані, це може призвести до виконання довільного коду в пісочниці.
Ми можемо вивести Uninitialized Oddball у JavaScript, змінивши рідні функції V8. Наприклад, змінивши зміщення функції %TheHole(), щоб вона повертала об'єкт Uninitialized Oddball.
Обхід захисту HardenType
Використовуючи витоку об'єкта Uninitialized Oddball, можна створити наступний код для реалізації відносно довільного читання:
Javascript
функція read(obj, idx) {
повернути obj[idx];
}
для (let i = 0; І < 100000; І++) {
read(arr, 0);
}
%ОптимізуватиФункціюНаНаступномуВиклику(читати);
Нехай результат = read(uninitialized_oddball, 0x12345);
%DebugPrint(result);
Оптимізований асемблерний код функції read показує, що під час обчислення зсуву масиву не перевіряється тип значення obj.prop, а безпосередньо обчислюється за семантикою JavaScript, що призводить до змішування типів і реалізації довільного читання.
Рекомендація щодо виправлення полягає в тому, щоб під час повернення елементів масиву з оптимізованої функції додати перевірку масиву map, щоб уникнути прямого обчислення зсуву для повернення значення.
Ця вразливість наразі не виправлена в деякому програмному забезпеченні, яке використовує застарілу версію V8, такому як Skype(. На платформі x86, через відсутність стиснення адрес, будь-яке читання і запис можуть бути виконані безпосередньо щодо всього процесу.
Публікація цього нового методу обходу знизила складність використання відповідних уразливостей. Хакери майже не потребують додаткових досліджень, щоб здійснити повне використання витоку вразливості Uninitialized Oddball.
! [Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel])https://img-cdn.gateio.im/webp-social/moments-1e3fda77c04bceafdcc40413824a5d37.webp(
Підсумок
У V8 також є інші значення Sentinel, які можуть призвести до подібних проблем з безпекою. Рекомендується провести подальше дослідження:
Чи можуть інші Uninitialized Oddball витоки також реалізувати RCE V8
Чи слід офіційно визнати такі питання як вразливості безпеки
Чи потрібно включати значення Sentinel як змінну в тестуванні Fuzzer
У будь-якому випадку, такого роду проблеми значно скоротять термін повного використання хакерами, що заслуговує на високу увагу.
![Ексклюзивне розкриття обходу захисту HardenProtect Chrome через витік Sentinel Value])https://img-cdn.gateio.im/webp-social/moments-ed89289bebf59d4b27f5bffb5511a8c5.webp(
! [Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel])https://img-cdn.gateio.im/webp-social/moments-0e52075003a8ee2ca492a5fc9f35c36b.webp(
! [Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel])https://img-cdn.gateio.im/webp-social/moments-230537e420d579aabd89bdd168b20878.webp(
! [Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel])https://img-cdn.gateio.im/webp-social/moments-506159c94c9e0988552cbcbd13d971e1.webp(
! [Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel])https://img-cdn.gateio.im/webp-social/moments-e9e2000fd501b69ee3ee643a459a26dd.webp(
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
18 лайків
Нагородити
18
6
Поділіться
Прокоментувати
0/400
GateUser-bd883c58
· 08-04 04:05
Ця уразливість така жорстка, що трішки лякає.
Переглянути оригіналвідповісти на0
SerumDegen
· 08-02 17:19
gm друг... ще одне витік альфи помічено у v8, ми всі rekt
Переглянути оригіналвідповісти на0
ThatsNotARugPull
· 08-02 17:19
Цю каструлю Chrome носіть, адже люди вже показали вам дірку.
Переглянути оригіналвідповісти на0
RektButStillHere
· 08-02 17:09
Чому захист пісочниці такий поганий?
Переглянути оригіналвідповісти на0
CryptoNomics
· 08-02 17:01
*с sigh* ще одна експлуатація, що доводить, що мій регресійний аналіз моделі безпеки chrome був статистично значущим... і все ж ніхто не слухав
Вразливість безпеки обходу HardenProtect через витік значення Sentinel V8
Безпекові ризики, спричинені витоком значення Sentinel у движку Chrome V8
Sentinel value є спеціальним значенням в алгоритмах, яке часто використовується як умова завершення циклів або рекурсивних алгоритмів. У вихідному коді Chrome існує кілька Sentinel value, деякі з яких не повинні бути витекли в середовище JavaScript. У цій статті буде досліджено, як використовувати витік Uninitialized Oddball об'єкта для обходу механізму HardenProtect двигуна Chrome V8.
Значення Sentinel у V8
Більшість вбудованих об'єктів V8 визначені в файлі v8/src/roots/roots.h, ці об'єкти розташовані в пам'яті поруч один з одним. Як тільки ці вбудовані об'єкти, які не повинні бути доступні JavaScript, будуть скомпрометовані, це може призвести до виконання довільного коду в пісочниці.
Ми можемо вивести Uninitialized Oddball у JavaScript, змінивши рідні функції V8. Наприклад, змінивши зміщення функції %TheHole(), щоб вона повертала об'єкт Uninitialized Oddball.
Обхід захисту HardenType
Використовуючи витоку об'єкта Uninitialized Oddball, можна створити наступний код для реалізації відносно довільного читання:
Javascript функція read(obj, idx) { повернути obj[idx]; }
нехай arr = [1.1, 2.2, 3.3]; нехай uninitialized_oddball = %TheHole();
для (let i = 0; І < 100000; І++) { read(arr, 0);
}
%ОптимізуватиФункціюНаНаступномуВиклику(читати);
Нехай результат = read(uninitialized_oddball, 0x12345); %DebugPrint(result);
Оптимізований асемблерний код функції read показує, що під час обчислення зсуву масиву не перевіряється тип значення obj.prop, а безпосередньо обчислюється за семантикою JavaScript, що призводить до змішування типів і реалізації довільного читання.
! Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel
Рекомендація щодо виправлення полягає в тому, щоб під час повернення елементів масиву з оптимізованої функції додати перевірку масиву map, щоб уникнути прямого обчислення зсуву для повернення значення.
! Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel
PatchGap ризики
Ця вразливість наразі не виправлена в деякому програмному забезпеченні, яке використовує застарілу версію V8, такому як Skype(. На платформі x86, через відсутність стиснення адрес, будь-яке читання і запис можуть бути виконані безпосередньо щодо всього процесу.
Публікація цього нового методу обходу знизила складність використання відповідних уразливостей. Хакери майже не потребують додаткових досліджень, щоб здійснити повне використання витоку вразливості Uninitialized Oddball.
! [Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel])https://img-cdn.gateio.im/webp-social/moments-1e3fda77c04bceafdcc40413824a5d37.webp(
Підсумок
У V8 також є інші значення Sentinel, які можуть призвести до подібних проблем з безпекою. Рекомендується провести подальше дослідження:
У будь-якому випадку, такого роду проблеми значно скоротять термін повного використання хакерами, що заслуговує на високу увагу.
![Ексклюзивне розкриття обходу захисту HardenProtect Chrome через витік Sentinel Value])https://img-cdn.gateio.im/webp-social/moments-ed89289bebf59d4b27f5bffb5511a8c5.webp(
! [Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel])https://img-cdn.gateio.im/webp-social/moments-0e52075003a8ee2ca492a5fc9f35c36b.webp(
! [Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel])https://img-cdn.gateio.im/webp-social/moments-230537e420d579aabd89bdd168b20878.webp(
! [Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel])https://img-cdn.gateio.im/webp-social/moments-506159c94c9e0988552cbcbd13d971e1.webp(
! [Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel])https://img-cdn.gateio.im/webp-social/moments-e9e2000fd501b69ee3ee643a459a26dd.webp(