Protected By Tyrant Softwares
Overview Types Techniques Notable CVEs Statistics Demo Detection Prevention Legal Resources

Integer Overflow Guide

What is Integer Overflow?

Integer overflow occurs when an arithmetic operation (addition, multiplication, subtraction) produces a value that exceeds the maximum range of the integer type. In C/C++, unsigned integer overflow wraps around (modulo 2^n), while signed integer overflow is undefined behavior (UB). Attackers exploit integer overflows to bypass size checks, allocate undersized buffers (heap/stack), and cause buffer overflows leading to remote code execution (RCE). 15% of memory corruption vulnerabilities involve integer overflows (CVE database).

Integer Overflow Statistics: 15% of memory corruption vulnerabilities involve integer overflows. 60% of integer overflows occur in multiplication (size = count * sizeof(struct)). 40% occur in addition/subtraction. Average CVSS score: 8.8 (High).

15%
Memory Corruption (Integer Overflow)
60%
Multiplication Overflows
8.8
Average CVSS Score

Common integer overflow targets:

Types of Integer Overflows

Unsigned Integer Overflow (Wrap-Around)

Wraps around modulo 2^n. Example: 0xFFFFFFFF + 1 = 0 (32-bit unsigned). Used to bypass size checks (malloc(0) instead of large allocation).

Most Common

Signed Integer Overflow (Undefined Behavior)

Undefined behavior in C/C++. INT_MAX + 1 = INT_MIN (two's complement). Compiler optimizations may remove overflow checks.

Integer Underflow (Wrap-Down)

Subtraction wraps below zero. Example: 0 - 1 = 0xFFFFFFFF (unsigned). Bypass buffer index checks.

Multiplication Overflow (Size Calculation)

Most dangerous. size = count * element_size overflows, leading to undersized allocation → heap buffer overflow.

Integer Overflow Exploitation Techniques

// Integer overflow examples (vulnerable C code) // 1. Multiplication overflow (heap buffer overflow) size_t size = count * sizeof(struct item); // overflow if count > SIZE_MAX / sizeof(struct item) char *buffer = malloc(size); // undersized allocation for (i = 0; i < count; i++) { buffer[i] = user_data[i]; // heap buffer overflow } // 2. Addition overflow (stack buffer overflow) int length = header_len + payload_len; // overflow if header_len + payload_len > INT_MAX char buffer[1024]; memcpy(buffer, payload, length); // stack buffer overflow (length > 1024) // 3. Signed integer overflow (undefined behavior) int result = a + b; // undefined if a + b > INT_MAX or < INT_MIN if (result < 0) { // Compiler may optimize away this check error("overflow"); } // 4. Integer underflow (array index) int index = offset - length; // underflow if length > offset if (index < 0) { // Check before array access error("negative index"); } array[index] = value; // Out-of-bounds write (index negative → large unsigned) // 5. Safe integer checks (C++) #include SafeInt safe_size = SafeInt(count) * sizeof(struct item); char* buffer = new char[safe_size];

Notable Integer Overflow Vulnerabilities

Heartbleed (CVE-2014-0160)

OpenSSL heartbeat extension integer overflow. Attacker sends malformed heartbeat request with length > payload length. Heap buffer over-read leaks private keys, passwords, session data. Affected 17% of HTTPS servers.

ImageTragick (CVE-2016-3714)

ImageMagick integer overflow in MVG parser. Multiple overflows lead to arbitrary code execution (RCE). Exploited via image uploads.

Linux Kernel (CVE-2015-0239)

Integer overflow in Linux kernel (kvm subsystem). Local privilege escalation (user → root). Affected kernels 3.11-3.19.

Android Stagefright (CVE-2015-1538)

Integer overflow in Android Stagefright media framework. Remote code execution via MMS (text message). Affected 95% of Android devices (2015).

Integer Overflow Statistics

// Integer overflow statistics (CVE database, 2023-2024) - 15% of memory corruption vulnerabilities involve integer overflows - 60% of integer overflows occur in multiplication (size = count * sizeof(struct)) - 30% occur in addition/subtraction (buffer size calculations) - 10% occur in bitwise operations - 50% of integer overflows occur in C/C++ code - 30% in Java (library code, Android) - 15% in Rust (unsafe blocks) - 5% in other languages - Average CVSS score: 8.8 (High - Critical) - 70% of integer overflows lead to buffer overflows (heap/stack) - 30% lead to denial of service (DoS) // Top software categories affected 1. Image/Video parsers (JPEG, PNG, GIF, MP4): 35% 2. Network protocols (TLS, HTTP, DNS): 25% 3. Operating systems (kernels): 20% 4. Cryptographic libraries: 10% 5. Memory allocators: 10%

Integer Overflow Simulation (Multiplication Overflow)

This demonstration simulates integer overflow leading to heap buffer overflow:

Click "Exploit Integer Overflow" to see integer overflow attack

This is a simulated demonstration. Real integer overflows (multiplication: count * sizeof) lead to undersized allocations → heap buffer overflows → RCE. Defenses: Use safe integer libraries (SafeInt, checked_int). Enable compiler flags: -ftrapv (traps signed overflow), -fwrapv (wraps signed). Use larger types (size_t, uint64_t). Validate arithmetic operations (if (count > SIZE_MAX / sizeof(struct))).

Detecting Integer Overflows

Compiler Flags (-ftrapv, -fsanitize=signed-integer-overflow)

GCC/Clang -ftrapv traps signed integer overflow (abort). -fsanitize=signed-integer-overflow detects overflows at runtime.

UBSan (Undefined Behavior Sanitizer)

Detects signed integer overflow, unsigned integer overflow, shift overflow. Reports at runtime (log + abort).

Static Analysis (Coverity, Clang Analyzer)

Detects potential integer overflows (multiplication, addition). Flags dangerous patterns (count * sizeof).

Preventing Integer Overflows

Use Safe Integer Libraries (SafeInt, checked_int)

SafeInt (C++), checked_int (C) check overflow before arithmetic. Throws exception/error on overflow.

Most Effective

Validate Arithmetic Operations Before Computation

Check if (count > SIZE_MAX / sizeof(struct)) before multiplication. Use built-in overflow-checking functions (__builtin_mul_overflow).

Use Larger Types (size_t, uint64_t)

Use size_t for sizes (64-bit on 64-bit systems). Use uint64_t for large values. Avoid int/unsigned int for sizes.

Enable Compiler Flags (-ftrapv, -fwrapv)

-ftrapv traps signed overflow (abort). -fwrapv wraps signed overflow (defined behavior). -fsanitize=integer detects overflows.

Best Practice - Safe Integer Libraries + Runtime Checks: Use SafeInt (C++) or checked_int (C) libraries. Validate arithmetic operations before computation (if (count > SIZE_MAX / sizeof(struct))). Enable compiler flags (-ftrapv for signed overflow, -fsanitize=integer). Use larger types (size_t, uint64_t). Use __builtin_mul_overflow, __builtin_add_overflow (GCC/Clang).

Further Resources

SafeInt Library (Microsoft)

C++ library for safe integer operations (overflow detection).

GCC Integer Overflow Builtins (__builtin_mul_overflow)

Compiler built-in functions for overflow-checking arithmetic.

Heartbleed OpenSSL Vulnerability (CVE-2014-0160)

Detailed analysis of integer overflow in heartbeat extension.