Heelgetal Oorloop (Web Toepassings)
Reading time: 5 minutes
tip
Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die đŹ Discord groep of die telegram groep of volg ons op Twitter đŠ @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.
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}}
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, offsets 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 logiese omseiling of 'n DoS verander.
Tipiese aanval oppervlak:
- Numeriese aanvraagparameters â klassieke id, offset, of telling velde.
- Lengte / grootte koptekste â Content-Length, WebSocket raam lengte, HTTP/2 voortsetting_len, ens.
- LĂȘer-formaat metadata wat server-kant of kliĂ«nt-kant geparseer word â beeld dimensies, stuk groottes, lettertipe tabelle.
- Taalvlak omskakelings â geskreweâongeskrewe omskakelings in PHP/Go/Rust FFI, JS Nommer â int32 afsnitte binne V8.
- 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 pixel grootte 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 stoor | AfgeleĂ« kode uitvoering na 'n enkele besoek. |
2025 | Apollo GraphQL Server (nie vrygestel nie) | 32-bis geskrewe heelgetal gebruik vir eerste/laaste paginering args; negatiewe waardes draai na enorme positiewe | Logiese 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)
$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 oorgeloop via beeld dekodeerder (libwebp 0-dag)
Die WebP verlieslose dekodeerder het beeld breedte Ă hoogte Ă 4 (RGBA) binne 'n 32-bis int vermenigvuldig. 'n Gemaakte lĂȘer met afmetings 16384 Ă 16384 oorgeloop 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 Blaaier-gebaseerde XSS/RCE ketting
- Integer oorgeloop in V8 gee arbitrĂȘre lees/skryf.
- Ontsnap die sandbox met 'n tweede fout of bel native APIs om 'n payload te laat val.
- Die payload spuit dan 'n kwaadwillige skrip in die oorsprong konteks â gestoor XSS.
5. Verdedigende riglyne
- Gebruik wye tipes of nagekeken wiskunde â bv., size_t, Rust checked_add, Go math/bits.Add64.
- Valideer reekse vroeg: verwerp enige waarde buite die besigheidsdomein voor aritmetika.
- Aktiveer kompilator sanitizers: -fsanitize=integer, UBSan, Go race detector.
- Neem fuzzing in CI/CD aan â kombineer dekking terugvoer met grens korpora.
- Bly gepatch â blaaiers integer oorgeloop foute word dikwels binne weke gewapen.
Verwysings
- NVD CVE-2023-4863 â libwebp Heap Buffer Overflow
- Google Project Zero â "Understanding V8 CVE-2024-0519"
tip
Leer en oefen AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Leer en oefen GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Leer en oefen Azure Hacking:
HackTricks Training Azure Red Team Expert (AzRTE)
Ondersteun HackTricks
- Kyk na die subskripsie planne!
- Sluit aan by die đŹ Discord groep of die telegram groep of volg ons op Twitter đŠ @hacktricks_live.
- Deel hacking truuks deur PRs in te dien na die HackTricks en HackTricks Cloud github repos.