From d615fc449bf0df22c6eb6dc2702242c446c1a414 Mon Sep 17 00:00:00 2001 From: Translator Date: Thu, 24 Jul 2025 16:25:40 +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 a7919e095..3a6149630 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 @@ -# 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}}