Integer Overflow (Web Applications)

Reading time: 5 minutes

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримайте HackTricks

Ця сторінка зосереджена на тому, як integer overflows/truncations can be abused in web applications and browsers. Для exploitation primitives всередині native binaries ви можете продовжити читати присвячену сторінку:

{{#ref}}

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


1. Чому операції з цілими числами все ще важливі в вебі

Навіть якщо більшість business-logic у сучасних стеках написана мовами memory-safe, підлягаючий runtime (або сторонні бібліотеки) в кінцевому підсумку реалізований на C/C++. Коли числа, контрольовані користувачем, використовуються для виділення буферів, обчислення зсувів або перевірок довжини, a 32-bit or 64-bit wrap-around may transform an apparently harmless parameter into an out-of-bounds read/write, a logic bypass or a DoS.

Типова поверхня атаки:

  1. Numeric request parameters – класичні поля id, offset або count.
  2. Length / size headers – Content-Length, WebSocket frame length, HTTP/2 continuation_len тощо.
  3. File-format metadata parsed server-side or client-side – розміри зображень, розміри chunk’ів, таблиці шрифтів.
  4. Language-level conversions – signed↔unsigned casts in PHP/Go/Rust FFI, JS Number → int32 truncations inside V8.
  5. Authentication & business logic – значення купонів, ціни або обчислення балансу, які мовчки переповнюються.

2. Останні реальні вразливості (2023-2025)

YearComponentRoot causeImpact
2023libwebp – CVE-2023-486332-bit multiplication overflow when computing decoded pixel sizeСпричинила Chrome 0-day (BLASTPASS on iOS), дозволила remote code execution всередині renderer sandbox.
2024V8 – CVE-2024-0519Truncation to 32-bit when growing a JSArray leads to OOB write on the backing storeRemote code execution після одного відвідування.
2025Apollo GraphQL Server (unreleased patch)32-bit signed integer used for first/last pagination args; negative values wrap to huge positivesОбхід логіки & виснаження пам'яті (DoS).

3. Стратегія тестування

3.1 Шпаргалка граничних значень

Відправляйте extreme signed/unsigned values у будь-якому місці, де очікується ціле число:

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

Інші корисні формати:

  • Hex (0x100), octal (0377), scientific (1e10), JSON big-int (9999999999999999999).
  • Дуже довгі рядки цифр (>1kB), щоб перевантажити кастомні парсери.

3.2 Шаблон для Burp Intruder

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

3.3 Fuzzing бібліотеки та середовища виконання

  • AFL++/Honggfuzz з обгорткою libFuzzer навколо парсера (наприклад, WebP, PNG, protobuf).
  • Fuzzilli – grammar-aware fuzzing рушіїв JavaScript для виявлення усічень цілих чисел у V8/JSC.
  • boofuzz – network-protocol fuzzing (WebSocket, HTTP/2), зосереджений на полях довжини.

4. Exploitation patterns

4.1 Logic bypass у коді на стороні сервера (приклад PHP)

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)

Декодер WebP для lossless-зображень множив ширину × висоту × 4 (RGBA) всередині 32-bit int. Сфабрикований файл з розмірами 16384 × 16384 викликає переповнення множення, виділяє занадто малий буфер і потім записує ~1GB розпакованих даних поза межами heap — що призводить до RCE в усіх Chromium-based браузерах до версії 116.0.5845.187.

4.3 Browser-based XSS/RCE chain

  1. Integer overflow у V8 надає arbitrary read/write.
  2. Утікають із sandbox за допомогою другої уразливості або викликають native APIs для розгортання payload.
  3. Потім payload впроваджує шкідливий скрипт в origin context → stored XSS.

5. Defensive guidelines

  1. Use wide types or checked math – e.g., size_t, Rust checked_add, Go math/bits.Add64.
  2. Validate ranges early: reject any value outside business domain before arithmetic.
  3. Enable compiler sanitizers: -fsanitize=integer, UBSan, Go race detector.
  4. Adopt fuzzing in CI/CD – combine coverage feedback with boundary corpora.
  5. Stay patched – browser integer overflow bugs are frequently weaponised within weeks.

References

tip

Вивчайте та практикуйте AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE)
Вивчайте та практикуйте GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE) Вивчайте та практикуйте Azure Hacking: HackTricks Training Azure Red Team Expert (AzRTE)

Підтримайте HackTricks