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
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.
Ця сторінка зосереджена на тому, як 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.
Типова поверхня атаки:
- Numeric request parameters – класичні поля id, offset або count.
- Length / size headers – Content-Length, WebSocket frame length, HTTP/2 continuation_len тощо.
- File-format metadata parsed server-side or client-side – розміри зображень, розміри chunk’ів, таблиці шрифтів.
- Language-level conversions – signed↔unsigned casts in PHP/Go/Rust FFI, JS Number → int32 truncations inside V8.
- Authentication & business logic – значення купонів, ціни або обчислення балансу, які мовчки переповнюються.
2. Останні реальні вразливості (2023-2025)
Year | Component | Root cause | Impact |
---|---|---|---|
2023 | libwebp – CVE-2023-4863 | 32-bit multiplication overflow when computing decoded pixel size | Спричинила Chrome 0-day (BLASTPASS on iOS), дозволила remote code execution всередині renderer sandbox. |
2024 | V8 – CVE-2024-0519 | Truncation to 32-bit when growing a JSArray leads to OOB write on the backing store | Remote code execution після одного відвідування. |
2025 | Apollo 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)
$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
- Integer overflow у V8 надає arbitrary read/write.
- Утікають із sandbox за допомогою другої уразливості або викликають native APIs для розгортання payload.
- Потім payload впроваджує шкідливий скрипт в origin context → stored XSS.
5. Defensive guidelines
- Use wide types or checked math – e.g., size_t, Rust checked_add, Go math/bits.Add64.
- Validate ranges early: reject any value outside business domain before arithmetic.
- Enable compiler sanitizers: -fsanitize=integer, UBSan, Go race detector.
- Adopt fuzzing in CI/CD – combine coverage feedback with boundary corpora.
- Stay patched – browser integer overflow bugs are frequently weaponised within weeks.
References
- NVD CVE-2023-4863 – libwebp Heap Buffer Overflow
- Google Project Zero – "Understanding V8 CVE-2024-0519"
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
- Перевірте плани підписки!
- Приєднуйтесь до 💬 групи Discord або групи telegram або слідкуйте за нами в Twitter 🐦 @hacktricks_live.
- Діліться хакерськими трюками, надсилаючи PR до HackTricks та HackTricks Cloud репозиторіїв на github.