Integer Overflow (Web Applications)

Reading time: 5 minutes

tip

Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Jifunze na fanya mazoezi ya Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks

Ukurasa huu unazingatia jinsi overflow/truncation za integer zinavyoweza kutumika vibaya katika programu za wavuti na vivinjari. Kwa mbinu za unyakuzi ndani ya binaries asilia unaweza kuendelea kusoma ukurasa uliojitolea:

{{#ref}}

../../binary-exploitation/integer-overflow.md {{#endref}}


1. Kwa nini hesabu za integer bado ni muhimu kwenye wavuti

Ingawa mantiki nyingi za biashara katika stack za kisasa zimeandikwa katika lugha za memory-safe, runtime ya chini (au maktaba za wahusika wengine) hatimaye inatekelezwa kwa C/C++. Kila wakati nambari zinazodhibitiwa na mtumiaji zinapotumika kugawa buffers, kuhesabu offsets, au kufanya ukaguzi wa urefu, kuzunguka kwa 32-bit au 64-bit kunaweza kubadilisha parameter inayonekana kuwa isiyo na madhara kuwa kusoma/kandika nje ya mipaka, kupita kwa mantiki au DoS.

Uso wa shambulio wa kawaida:

  1. Parameta za ombi za nambari – viwanja vya kawaida vya id, offset, au count.
  2. Vichwa vya urefu / saizi – Content-Length, urefu wa fremu ya WebSocket, HTTP/2 continuation_len, n.k.
  3. Metadata ya muundo wa faili inayosindika upande wa seva au upande wa mteja – vipimo vya picha, saizi za chunk, meza za font.
  4. Mabadiliko ya kiwango cha lugha – signed↔unsigned casts katika PHP/Go/Rust FFI, JS Number β†’ int32 truncations ndani ya V8.
  5. Uthibitishaji & mantiki ya biashara – thamani ya kuponi, bei, au hesabu za salio ambazo zinapita kimya.

2. Uthibitisho wa hivi karibuni wa udhaifu wa kweli (2023-2025)

MwakaKipengeleSababu kuuAthari
2023libwebp – CVE-2023-4863Kuongezeka kwa 32-bit wakati wa kuhesabu saizi ya pikseli iliyotafsiriwaIlisababisha Chrome 0-day (BLASTPASS kwenye iOS), iliruhusu utendaji wa msimbo wa mbali ndani ya sandbox ya renderer.
2024V8 – CVE-2024-0519Truncation hadi 32-bit wakati wa kukua JSArray inasababisha OOB kuandika kwenye duka la nyumaUtendaji wa msimbo wa mbali baada ya kutembelea mara moja.
2025Apollo GraphQL Server (patch isiyotolewa)Integer ya 32-bit iliyosainiwa inatumika kwa argumeti za pagination za kwanza/mwisho; thamani hasi zinazunguka kuwa kubwa chanyaKupita kwa mantiki & uchovu wa kumbukumbu (DoS).

3. Mkakati wa kupima

3.1 Cheat-sheet ya thamani za mpaka

Tuma thamani za juu za signed/unsigned popote ambapo integer inatarajiwa:

-1, 0, 1,
127, 128, 255, 256,
32767, 32768, 65535, 65536,
2147483647, 2147483648, 4294967295,
9223372036854775807, 9223372036854775808,
0x7fffffff, 0x80000000, 0xffffffff

Mifumo mingine ya manufaa:

  • Hex (0x100), octal (0377), kisayansi (1e10), JSON big-int (9999999999999999999).
  • Mifumo ya nambari ndefu sana (>1kB) ili kufikia parser maalum.

3.2 Kiolezo cha Burp Intruder

Β§INTEGERΒ§
Payload type: Numbers
From: -10 To: 4294967300 Step: 1
Pad to length: 10, Enable hex prefix 0x

3.3 Fuzzing libraries & runtimes

  • AFL++/Honggfuzz na libFuzzer harness kuzunguka parser (mfano, WebP, PNG, protobuf).
  • Fuzzilli – fuzzing inayojua sarufi ya injini za JavaScript ili kugonga V8/JSC integer truncations.
  • boofuzz – fuzzing ya itifaki ya mtandao (WebSocket, HTTP/2) ikilenga uwanja wa urefu.

4. Exploitation patterns

4.1 Logic bypass in server-side code (PHP example)

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 kupitia decoder ya picha (libwebp 0-day)

Decoder ya WebP isiyo na hasara iliongeza upana wa picha Γ— urefu Γ— 4 (RGBA) ndani ya int ya 32-bit. Faili iliyoundwa kwa vipimo 16384 Γ— 16384 inazidi kuzidisha, inatenga buffer fupi na kisha inaandika ~1GB ya data iliyoshughulikiwa kupita heap – ikisababisha RCE katika kila kivinjari kinachotegemea Chromium kabla ya 116.0.5845.187.

4.3 Mnyororo wa XSS/RCE unaotegemea kivinjari

  1. Integer overflow katika V8 inatoa kusoma/kandika bila mipaka.
  2. Kimbia kwenye sandbox kwa hitilafu ya pili au piga API za asili ili kuangusha payload.
  3. Payload kisha inaingiza script mbaya katika muktadha wa asili β†’ XSS iliyohifadhiwa.

5. Miongozo ya kujihami

  1. Tumia aina pana au hesabu zilizokaguliwa – e.g., size_t, Rust checked_add, Go math/bits.Add64.
  2. Thibitisha mipaka mapema: kataa thamani yoyote nje ya eneo la biashara kabla ya hesabu.
  3. Washa sanitizers za kompyuta: -fsanitize=integer, UBSan, Go race detector.
  4. Pokea fuzzing katika CI/CD – changanya mrejesho wa kufunika na mipaka ya data.
  5. Baki na sasisho – hitilafu za integer overflow za kivinjari mara nyingi zinatumika kama silaha ndani ya wiki chache.

Marejeo

tip

Jifunze na fanya mazoezi ya AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Jifunze na fanya mazoezi ya GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Jifunze na fanya mazoezi ya Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Support HackTricks