Chrome v8 HardenProtect обхід: використання Sentinel Value для виконання довільного коду

Значення Sentinel та обходження HardenProtect у Chrome v8

Sentinel value – це спеціальне значення в алгоритмах, яке часто використовується як умова завершення для циклів або рекурсивних алгоритмів. У вихідному коді Chrome широко використовуються такі спеціальні значення. Нещодавно проведені дослідження показали, що витік деяких об'єктів Sentinel value може дозволити виконання довільного коду в пісочниці Chrome.

У цій статті буде розглянуто метод обходу механізму HardenProtect Chrome v8 за допомогою неініціалізованого об'єкта Oddball. Цей метод вперше був запропонований учасником Project0 в Issue1352549 і наразі все ще доступний у найновішій версії V8, Google ще не виправив цю вразливість.

Слід зазначити, що цей метод має велику універсальність:

  1. Issue1216437(CVE-2021-30551) вперше наводить poc для витоку internal uninitialized oddball.

  2. Issue1314616(CVE-2022-1486) також безпосередньо розкриває об'єкт UninitializedOddball.

  3. Issue1352549( немає CVE), що демонструє повний ланцюг експлуатації цього методу.

Ці випадки вказують на те, що цей метод обходу може вплинути на кілька версій програмного забезпечення. На сьогоднішній день програми, такі як Skype, все ще не виправили цю вразливість.

Значення Sentinel у V8

У вихідному коді V8 визначено велику кількість рідних об'єктів, включаючи кілька значень Sentinel. Ці об'єкти в пам'яті розташовані поряд один з одним. Як тільки рідні об'єкти, які не повинні бути розкриті, стають доступними для JavaScript, це може призвести до виконання довільного коду в пісочниці.

Щоб перевірити цей метод, ми можемо змінити функцію V8 %TheHole() так, щоб вона повертала об'єкт Uninitialized Oddball.

! Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel

Обхід HardenType

Наступний код демонструє, як використати витік об'єкта Uninitialized Oddball для реалізації довільного читання:

Javascript function read(obj, idx) { повернути obj[idx]; }

нехай uninitialized_oddball = %GetUninitialized(); let ab = новий ArrayBuffer(8); нехай f64 = новий Float64Array(ab); let u32 = новий Uint32Array(ab);

для (дозвольте i = 0; i < 0x10000; i++) { read({prop: 1.1}, 0);
}

%ОптимізуватиФункціюНаступногоВиклику(читати);

let val = read({prop: uninitialized_oddball}, 0x1234); f64[0] = вал; console.log(u32[0].toString(6), u32[1].toString(16);

Оптимізований асемблерний код функції read показує, що функція лише перевіряє атрибут prop об'єкта obj, не перевіряючи значення obj.prop, і безпосередньо обчислює зміщення, що призводить до плутанини типів і дозволяє довільне читання.

! [Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel])https://img-cdn.gateio.im/webp-social/moments-26c26345e3ec4effeea2e3e6b7cd8772.webp(

Рекомендована схема виправлення: при поверненні елементів масиву з оптимізованої функції додайте перевірку масиву map, щоб уникнути прямого обчислення зсуву.

! [Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel])https://img-cdn.gateio.im/webp-social/moments-4c091ca0e153e953eb168e99762ff7cc.webp(

Попередження PatchGap

Цей обхідний метод впливає не лише на історичні вразливості, але й може вплинути на поточне програмне забезпечення. Наприклад, Skype досі не виправив цю проблему. На платформі x86, через відсутність стиснення адрес, можливості для довільного читання та запису є більшими.

Цей PatchGap не лише стосується Issue1352549, але й значно знижує складність використання подібних Issue1314616 та Issue1216437. Рекомендується виробникам провести повну перевірку відповідних вразливостей.

! [Ексклюзивне розкриття обходу Chrome v8 HardenProtect шляхом витоку значення Sentinel])https://img-cdn.gateio.im/webp-social/moments-1e3fda77c04bceafdcc40413824a5d37.webp(

Підсумок

Ця стаття описує метод реалізації довільного читання V8 за допомогою Uninitialized Oddball. У V8 є й інші значення Sentinel, які можуть нести подібні ризики безпеці. Рекомендується подальше дослідження:

  1. Чи можливо реалізувати V8 RCE через витік інших значень Sentinel
  2. Додайте значення Sentinel як змінну до Fuzzer, щоб виявити нові експлойти.
  3. Справедливо оцінити безпекові ризики, які можуть виникнути внаслідок таких проблем.

Незалежно від того, чи було це питання офіційно визнано як вразливість безпеки, воно може значно скоротити повний цикл використання хакерами. Сподіваюсь, що ця стаття приверне увагу відповідних сторін.

! [Ексклюзивне розкриття обходу 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(

! [Ексклюзивне розкриття обходу 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(

SENC-7.49%
Переглянути оригінал
Ця сторінка може містити контент третіх осіб, який надається виключно в інформаційних цілях (не в якості запевнень/гарантій) і не повинен розглядатися як схвалення його поглядів компанією Gate, а також як фінансова або професійна консультація. Див. Застереження для отримання детальної інформації.
  • Нагородити
  • 6
  • Репост
  • Поділіться
Прокоментувати
0/400
WinterWarmthCatvip
· 9год тому
Пост з деталями повинен бути схвалений
Переглянути оригіналвідповісти на0
StakeOrRegretvip
· 08-08 15:35
Знову виявлено небезпеку браузера
Переглянути оригіналвідповісти на0
LayerZeroHerovip
· 08-07 02:24
Трохи крута уразливість
Переглянути оригіналвідповісти на0
Web3ProductManagervip
· 08-07 02:23
Супер ризикований крайній випадок тут
Переглянути оригіналвідповісти на0
GhostWalletSleuthvip
· 08-07 02:11
Вразливості дійсно важко запобігти.
Переглянути оригіналвідповісти на0
UnluckyLemurvip
· 08-07 02:04
Ця уразливість має багато води.
Переглянути оригіналвідповісти на0
  • Закріпити