From 4c7065d853e19cf70da51b0788507a20f381c738 Mon Sep 17 00:00:00 2001 From: Translator Date: Thu, 24 Jul 2025 16:25:32 +0000 Subject: [PATCH] Translated ['src/pentesting-web/xss-cross-site-scripting/integer-overflo --- .../integer-overflow.md | 103 +++++++++++++++++- 1 file changed, 98 insertions(+), 5 deletions(-) diff --git a/src/pentesting-web/xss-cross-site-scripting/integer-overflow.md b/src/pentesting-web/xss-cross-site-scripting/integer-overflow.md index 45aa98324..f7005bc82 100644 --- a/src/pentesting-web/xss-cross-site-scripting/integer-overflow.md +++ b/src/pentesting-web/xss-cross-site-scripting/integer-overflow.md @@ -1,11 +1,104 @@ -# Integer Overflow +# Integer Overflow (Web Applications) {{#include ../../banners/hacktricks-training.md}} -Proveri: +> Ova stranica se fokusira na to kako **integer overflow/kratki rezovi mogu biti zloupotrebljeni u web aplikacijama i pretraživačima**. Za tehnike eksploatacije unutar nativnih binarnih datoteka možete nastaviti sa čitanjem posvećene stranice: +> +> {{#ref}} +> ../../binary-exploitation/integer-overflow.md +> {{#endref}} -{{#ref}} -../../binary-exploitation/integer-overflow.md -{{#endref}} +--- +## 1. Zašto integer matematika i dalje ima značaj na webu + +Iako je većina poslovne logike u modernim stakovima napisana u *sigurnim* jezicima, osnovni runtime (ili biblioteke trećih strana) je na kraju implementiran u C/C++. Kada se brojevi koje kontroliše korisnik koriste za alokaciju bafera, izračunavanje ofseta ili izvođenje provere dužine, **32-bitno ili 64-bitno preklapanje može pretvoriti naizgled bezopasan parametar u čitanje/pisanje van granica, zaobilaženje logike ili DoS**. + +Tipična površina napada: + +1. **Numerički parametri zahteva** – klasična `id`, `offset` ili `count` polja. +2. **Dužina / veličina zaglavlja** – `Content-Length`, dužina WebSocket okvira, HTTP/2 `continuation_len`, itd. +3. **Metadata formata datoteka obrađena na serverskoj ili klijentskoj strani** – dimenzije slika, veličine delova, tabele fontova. +4. **Konverzije na nivou jezika** – signed↔unsigned konverzije u PHP/Go/Rust FFI, JS `Number` → `int32` kratki rezovi unutar V8. +5. **Autentifikacija i poslovna logika** – vrednost kupona, cena ili proračuni stanja koji tiho prelivaju. + +--- + +## 2. Nedavne ranjivosti iz stvarnog sveta (2023-2025) + +| Godina | Komponenta | Osnovni uzrok | Uticaj | +|--------|------------|---------------|--------| +| 2023 | **libwebp – CVE-2023-4863** | 32-bitno preklapanje množenja prilikom izračunavanja veličine dekodiranog piksela | Pokrenuo Chrome 0-day (`BLASTPASS` na iOS-u), omogućio *daljinsko izvršavanje koda* unutar sandbox-a renderer-a. | +| 2024 | **V8 – CVE-2024-0519** | Kratki rez na 32-bit kada se povećava `JSArray` dovodi do OOB pisanja na podržavajućem skladištu | Daljinsko izvršavanje koda nakon jedne posete. | +| 2025 | **Apollo GraphQL Server** (neobjavljeni zakrpa) | 32-bitni potpisani ceo broj korišćen za `first/last` argumente paginacije; negativne vrednosti se preklapaju u ogromne pozitivne | Zaobilaženje logike i iscrpljivanje memorije (DoS). | + +--- + +## 3. Strategija testiranja + +### 3.1 Cheat-sheet za granice vrednosti + +Pošaljite **ekstreme potpisane/bez potpisane vrednosti** gde god se očekuje ceo broj: +``` +-1, 0, 1, +127, 128, 255, 256, +32767, 32768, 65535, 65536, +2147483647, 2147483648, 4294967295, +9223372036854775807, 9223372036854775808, +0x7fffffff, 0x80000000, 0xffffffff +``` +Drugi korisni formati: +* Hex (`0x100`), oktalni (`0377`), naučni (`1e10`), JSON big-int (`9999999999999999999`). +* Veoma dugi nizovi cifara (>1kB) za testiranje prilagođenih parsera. + +### 3.2 Burp Intruder šablon +``` +§INTEGER§ +Payload type: Numbers +From: -10 To: 4294967300 Step: 1 +Pad to length: 10, Enable hex prefix 0x +``` +### 3.3 Fuzzing biblioteke i runtime-ovi + +* **AFL++/Honggfuzz** sa `libFuzzer` okvirom oko parsera (npr., WebP, PNG, protobuf). +* **Fuzzilli** – fuzzing svestan o gramatici JavaScript engine-a kako bi se pogodile V8/JSC integer truncations. +* **boofuzz** – fuzzing mrežnih protokola (WebSocket, HTTP/2) fokusiran na dužinske polja. + +--- + +## 4. Obrasci eksploatacije + +### 4.1 Zaobilaženje logike u kodu sa servera (PHP primer) +```php +$price = (int)$_POST['price']; // expecting cents (0-10000) +$total = $price * 100; // ← 32-bit overflow possible +if($total > 1000000){ +die('Too expensive'); +} +/* Sending price=21474850 → $total wraps to ‑2147483648 and check is bypassed */ +``` +### 4.2 Heap overflow putem dekodera slika (libwebp 0-day) +WebP bezgubitni dekoder pomnoži širinu slike × visinu × 4 (RGBA) unutar 32-bitnog `int`. Prilagođena datoteka sa dimenzijama `16384 × 16384` prelazi granicu množenja, alocira kratki bafer i potom piše **~1GB** dekompresovanih podataka izvan heap-a – što dovodi do RCE u svakom Chromium-baziranom pretraživaču pre 116.0.5845.187. + +### 4.3 XSS/RCE lanac zasnovan na pretraživaču +1. **Integer overflow** u V8 omogućava proizvoljno čitanje/pisanje. +2. Izbegnite sandbox sa drugom greškom ili pozovite nativne API-je da ispustite payload. +3. Payload zatim injektuje zlonamerni skript u kontekst porekla → pohranjeni XSS. + +--- + +## 5. Odbrambene smernice + +1. **Koristite široke tipove ili proverenu matematiku** – npr., `size_t`, Rust `checked_add`, Go `math/bits.Add64`. +2. **Validirajte opsege rano**: odbacite svaku vrednost van poslovnog domena pre aritmetike. +3. **Omogućite sanitizatore kompajlera**: `-fsanitize=integer`, UBSan, Go detektor trke. +4. **Usvojite fuzzing u CI/CD** – kombinujte povratne informacije o pokrivenosti sa granicama korpusa. +5. **Ostanite ažurirani** – greške u integer overflow-u pretraživača često se koriste u napadima unutar nedelja. + +--- + +## Reference + +* [NVD CVE-2023-4863 – libwebp Heap Buffer Overflow](https://nvd.nist.gov/vuln/detail/CVE-2023-4863) +* [Google Project Zero – "Razumevanje V8 CVE-2024-0519"](https://googleprojectzero.github.io/) {{#include ../../banners/hacktricks-training.md}}