Translated ['src/pentesting-web/xss-cross-site-scripting/integer-overflo

This commit is contained in:
Translator 2025-07-24 16:25:40 +00:00
parent 19d293f866
commit d615fc449b

View File

@ -1,11 +1,104 @@
# Heelgetal Oorloop
# Heelgetal Oorloop (Web Toepassings)
{{#include ../../banners/hacktricks-training.md}}
Kontroleer:
> Hierdie bladsy fokus op hoe **heelgetal oorloope/afsnitte in webtoepassings en blaaiers misbruik kan word**. Vir eksploitasiemiddels binne inheemse binaire lêers kan jy voortgaan om die toegewyde bladsy te lees:
>
> {{#ref}}
> ../../binary-exploitation/integer-overflow.md
> {{#endref}}
{{#ref}}
../../binary-exploitation/integer-overflow.md
{{#endref}}
---
## 1. Hoekom heelgetal wiskunde steeds belangrik is op die web
Alhoewel die meeste besigheidslogika in moderne stakke geskryf is in *geheue-veilige* tale, is die onderliggende runtime (of derdeparty biblioteke) uiteindelik in C/C++ geïmplementeer. Wanneer gebruikersbeheerde getalle gebruik word om buffers toe te ken, afstanden te bereken, of lengte kontroles uit te voer, **kan 'n 32-bis of 64-bis oorgang 'n blykbaar onskadelike parameter in 'n buite-grense lees/skryf, 'n logika omseiling of 'n DoS verander**.
Tipiese aanval oppervlak:
1. **Numeriese aanvraagparameters** klassieke `id`, `offset`, of `count` velde.
2. **Lengte / grootte koptekste** `Content-Length`, WebSocket raam lengte, HTTP/2 `continuation_len`, ens.
3. **Lêer-formaat metadata wat bediener-kant of kliënt-kant geparseer word** beeld dimensies, stuk groottes, lettertipe tabelle.
4. **Taalvlak omskakelings** geskrewe↔ongeskrewe omskakelings in PHP/Go/Rust FFI, JS `Number``int32` afsnitte binne V8.
5. **Outentisering & besigheidslogika** koepon waarde, prys, of balans berekeninge wat stilweg oorloop.
---
## 2. Onlangs werklike kwesbaarhede (2023-2025)
| Jaar | Komponent | Wortel oorsaak | Impak |
|------|-----------|----------------|-------|
| 2023 | **libwebp CVE-2023-4863** | 32-bis vermenigvuldiging oorloop wanneer die ontlede pixelgrootte bereken word | Het 'n Chrome 0-dag (`BLASTPASS` op iOS) geaktiveer, het *afgeleë kode-uitvoering* binne die renderer sandbox toegelaat. |
| 2024 | **V8 CVE-2024-0519** | Afsny na 32-bis wanneer 'n `JSArray` vergroot, lei tot OOB skryf op die agtergrond winkel | Afgeleë kode-uitvoering na 'n enkele besoek. |
| 2025 | **Apollo GraphQL Server** (nie vrygestel nie) | 32-bis geskrewe heelgetal gebruik vir `first/last` paginering args; negatiewe waardes draai na enorme positiewe | Logika omseiling & geheue uitputting (DoS). |
---
## 3. Toetsstrategie
### 3.1 Grenswaarde spiekbrief
Stuur **ekstreme geskrewe/ongeskrewe waardes** waar 'n heelgetal verwag word:
```
-1, 0, 1,
127, 128, 255, 256,
32767, 32768, 65535, 65536,
2147483647, 2147483648, 4294967295,
9223372036854775807, 9223372036854775808,
0x7fffffff, 0x80000000, 0xffffffff
```
Ander nuttige formate:
* Hex (`0x100`), oktale (`0377`), wetenskaplike (`1e10`), JSON big-int (`9999999999999999999`).
* Baie lang syfer stringe (>1kB) om pasgemaakte parsers te tref.
### 3.2 Burp Intruder sjabloon
```
§INTEGER§
Payload type: Numbers
From: -10 To: 4294967300 Step: 1
Pad to length: 10, Enable hex prefix 0x
```
### 3.3 Fuzzing biblioteke & runtimes
* **AFL++/Honggfuzz** met `libFuzzer` harnas rondom die parser (bv., WebP, PNG, protobuf).
* **Fuzzilli** grammatika-bewuste fuzzing van JavaScript enjin om V8/JSC heelgetal truncasies te tref.
* **boofuzz** netwerk-protokol fuzzing (WebSocket, HTTP/2) wat op lengte velde fokus.
---
## 4. Exploitasiemetodes
### 4.1 Logika omseiling in bediener-kant kode (PHP voorbeeld)
```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 via image decoder (libwebp 0-day)
Die WebP verlieslose dekodeerder het beeldwydte × hoogte × 4 (RGBA) binne 'n 32-bis `int` vermenigvuldig. 'n Gemaakte lêer met afmetings `16384 × 16384` oorloop die vermenigvuldiging, allokeer 'n kort buffer en skryf vervolgens **~1GB** van gedecomprimeerde data verby die heap wat lei tot RCE in elke Chromium-gebaseerde blaaiert voor 116.0.5845.187.
### 4.3 Browser-based XSS/RCE chain
1. **Integer overflow** in V8 gee arbitrêre lees/skryf.
2. Ontsnap die sandbox met 'n tweede fout of bel native APIs om 'n payload te laat val.
3. Die payload spuit dan 'n kwaadwillige skrip in die oorsprong konteks → gestoor XSS.
---
## 5. Defensive guidelines
1. **Gebruik wye tipes of nagekeken wiskunde** byvoorbeeld, `size_t`, Rust `checked_add`, Go `math/bits.Add64`.
2. **Valideer reekse vroeg**: verwerp enige waarde buite die besigheidsdomein voor aritmetika.
3. **Aktiveer kompilator sanitizers**: `-fsanitize=integer`, UBSan, Go race detector.
4. **Neem fuzzing in CI/CD aan** kombineer dekking terugvoer met grens korpora.
5. **Bly gepatch** blaaiert integer overflow foute word dikwels binne weke gewapen.
---
## References
* [NVD CVE-2023-4863 libwebp Heap Buffer Overflow](https://nvd.nist.gov/vuln/detail/CVE-2023-4863)
* [Google Project Zero "Understanding V8 CVE-2024-0519"](https://googleprojectzero.github.io/)
{{#include ../../banners/hacktricks-training.md}}