mirror of
https://github.com/HackTricks-wiki/hacktricks.git
synced 2025-10-10 18:36:50 +00:00
Translated ['src/pentesting-web/xss-cross-site-scripting/integer-overflo
This commit is contained in:
parent
b85cc22a1f
commit
4c7065d853
@ -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}}
|
||||
|
Loading…
x
Reference in New Issue
Block a user