Як обійти HardenProtect Chrome V8 шляхом витоку Sentinel Value
Вступ
Sentinel value – це особливе значення в алгоритмах, яке часто використовується в циклічних або рекурсивних алгоритмах як умова завершення. У вихідному коді Chrome широко використовуються такі значення. Нещодавно фахівці з безпеки виявили, що шляхом витоку об'єкта TheHole можна реалізувати виконання довільного коду в пісочниці Chrome. Команда Google швидко виправила ці два вразливості, які були в диких умовах.
Однак у V8 також існують інші рідні об'єкти, які не повинні бути розкриті JavaScript. У цій статті буде обговорено новий об'єкт: Uninitialized Oddball. Цей метод обходу вперше з'явився в Issue, надісланому членом Project0, і наразі все ще доступний у останній версії V8.
Слід зазначити, що цей метод має високу універсальність:
У CVE-2021-30551 перший POC - це витік внутрішнього неініціалізованого oddball.
POC для CVE-2022-1486 також безпосередньо розкрив UninitializedOddball.
Проблема, яка не має присвоєного CVE, також використовує цей метод.
Ці випадки достатні, щоб підкреслити важливість цієї проблеми, і варто перевірити можливе вплив на програмне забезпечення.
Більшість вбудованих об'єктів V8 визначено у файлі v8/src/roots/roots.h, вони розташовані в пам'яті в безпосередній сусідстві один з одним. Як тільки ці вбудовані об'єкти, які не повинні бути витічені, будуть витічені в JavaScript, це може призвести до виконання довільного коду в пісочниці.
Ми можемо розкрити Uninitialized Oddball у JavaScript, змінюючи рідні функції V8. Конкретний спосіб полягає в зміні зміщення відносно isolate у функції %TheHole(), щоб вона повертала Uninitialized Oddball.
Використання Uninitialized Oddball дозволяє реалізувати відносно довільне читання і запис. Ключовим моментом є те, що оптимізована функція read перевіряє лише властивість prop об'єкта obj, але не перевіряє значення obj.prop як ключа. Це призводить до змішування типів під час обчислень, що дозволяє реалізувати довільне читання.
На архітектурі x86, через відсутність стиснення адрес, будь-яке читання та запис відбувається відносно всього процесу. Хоча не вистачає зручностей, що надаються стисненням адрес, через те, що деякі великі програмні файли є досить великими, все ж можна з досить високою ймовірністю читати та записувати цільовий вміст.
Цей PatchGap не лише стосується Issue1352549, а й включає в себе кілька вразливостей, подібних до Issue1314616 та Issue1216437. Після публікації нового методу обходу, складність використання цих вразливостей значно знизилась. Хакерам майже не потрібно додаткових досліджень, щоб завершити повний ланцюг експлуатації.
У V8 є багато інших значень Sentinel, які також можуть мати подібні проблеми. Це дає нам певні підказки:
Чи можливо також реалізувати V8 RCE через інші uninitialized_Oddball витоки?
Чи слід вважати такі питання офіційно питаннями безпеки?
Чи слід додавати значення Sentinel як змінну під час тестування Fuzzer?
У будь-якому випадку, ці проблеми значно скоротять час, необхідний хакерам для повного використання вразливостей, що заслуговує на нашу особливу увагу.
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
18 лайків
Нагородити
18
6
Репост
Поділіться
Прокоментувати
0/400
ContractTester
· 08-15 05:19
Стара вразливість, нова проблема знову з'явилася
Переглянути оригіналвідповісти на0
BlockchainWorker
· 08-13 17:55
вразливість v8 дуже серйозна
Переглянути оригіналвідповісти на0
SocialFiQueen
· 08-12 12:23
Серйозні проблеми потребують підписатися вирішення
Нова уразливість двигуна Chrome V8: витік Uninitialized Oddball обходить пісочницю
Як обійти HardenProtect Chrome V8 шляхом витоку Sentinel Value
Вступ
Sentinel value – це особливе значення в алгоритмах, яке часто використовується в циклічних або рекурсивних алгоритмах як умова завершення. У вихідному коді Chrome широко використовуються такі значення. Нещодавно фахівці з безпеки виявили, що шляхом витоку об'єкта TheHole можна реалізувати виконання довільного коду в пісочниці Chrome. Команда Google швидко виправила ці два вразливості, які були в диких умовах.
Однак у V8 також існують інші рідні об'єкти, які не повинні бути розкриті JavaScript. У цій статті буде обговорено новий об'єкт: Uninitialized Oddball. Цей метод обходу вперше з'явився в Issue, надісланому членом Project0, і наразі все ще доступний у останній версії V8.
Слід зазначити, що цей метод має високу універсальність:
У CVE-2021-30551 перший POC - це витік внутрішнього неініціалізованого oddball.
POC для CVE-2022-1486 також безпосередньо розкрив UninitializedOddball.
Проблема, яка не має присвоєного CVE, також використовує цей метод.
Ці випадки достатні, щоб підкреслити важливість цієї проблеми, і варто перевірити можливе вплив на програмне забезпечення.
! Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel
Значення Sentinel у V8
Більшість вбудованих об'єктів V8 визначено у файлі v8/src/roots/roots.h, вони розташовані в пам'яті в безпосередній сусідстві один з одним. Як тільки ці вбудовані об'єкти, які не повинні бути витічені, будуть витічені в JavaScript, це може призвести до виконання довільного коду в пісочниці.
Ми можемо розкрити Uninitialized Oddball у JavaScript, змінюючи рідні функції V8. Конкретний спосіб полягає в зміні зміщення відносно isolate у функції %TheHole(), щоб вона повертала Uninitialized Oddball.
! Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel
! Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel
Обхід HardenType
Використання Uninitialized Oddball дозволяє реалізувати відносно довільне читання і запис. Ключовим моментом є те, що оптимізована функція read перевіряє лише властивість prop об'єкта obj, але не перевіряє значення obj.prop як ключа. Це призводить до змішування типів під час обчислень, що дозволяє реалізувати довільне читання.
! Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel
! Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel
! Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel
На архітектурі x86, через відсутність стиснення адрес, будь-яке читання та запис відбувається відносно всього процесу. Хоча не вистачає зручностей, що надаються стисненням адрес, через те, що деякі великі програмні файли є досить великими, все ж можна з досить високою ймовірністю читати та записувати цільовий вміст.
! Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel
Попередження PatchGap
Цей PatchGap не лише стосується Issue1352549, а й включає в себе кілька вразливостей, подібних до Issue1314616 та Issue1216437. Після публікації нового методу обходу, складність використання цих вразливостей значно знизилась. Хакерам майже не потрібно додаткових досліджень, щоб завершити повний ланцюг експлуатації.
! Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel
Резюме
У V8 є багато інших значень Sentinel, які також можуть мати подібні проблеми. Це дає нам певні підказки:
Чи можливо також реалізувати V8 RCE через інші uninitialized_Oddball витоки?
Чи слід вважати такі питання офіційно питаннями безпеки?
Чи слід додавати значення Sentinel як змінну під час тестування Fuzzer?
У будь-якому випадку, ці проблеми значно скоротять час, необхідний хакерам для повного використання вразливостей, що заслуговує на нашу особливу увагу.
! Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel