Wprowadzenie
Integer Overflow (Przepełnienie liczby całkowitej) występuje, gdy wynik operacji arytmetycznej na typie całkowitoliczbowym przekracza jego maksymalną lub minimalną wartość, co powoduje zawinięcie wyniku (wrap-around). Jest to jedna z najstarszych i najbardziej niebezpiecznych klas podatności w programowaniu.
Jak działa Integer Overflow
Dla 32-bitowego typu int (zakres -2 147 483 648 do 2 147 483 647):
- 2 147 483 647 + 1 = -2 147 483 648 (signed overflow)
- 4 294 967 295 + 1 = 0 (unsigned overflow)
Główne rodzaje przepełnienia
- Signed Integer Overflow – zachowanie undefined w C/C++
- Unsigned Integer Overflow – wrap-around (zdefiniowane w standardzie)
- Integer Underflow – przekroczenie wartości minimalnej w dół
- Truncation Overflow – utrata precyzji przy konwersji typów
Zagrożenia Integer Overflow
- Ataki typu buffer overflow i heap corruption
- Omijanie mechanizmów bezpieczeństwa (np. size checks)
- Błędy logiczne w algorytmach (liczniki, indeksy tablic)
- Podatności w smart contractach (np. overflow w tokenach ERC-20)
- Błędy w bibliotekach AI i obliczeniach numerycznych
Integer Overflow w kontekście AI
W systemach AI przepełnienie może wystąpić przy:
- Obliczeniach indeksów w tensorach i macierzach
- Implementacji algorytmów uczenia (np. liczniki batchy)
- Przetwarzaniu dużych zbiorów danych
- Operacjach na embeddingach i tokenach
- Bibliotekach niskopoziomowych (CUDA, cuBLAS, PyTorch C++ extensions)
Zapobieganie Integer Overflow (2026)
- Używanie bezpiecznych typów:
uint64_t,size_t, BigInteger - Sprawdzanie przed operacją (checked arithmetic)
- Języki z wbudowaną ochroną: Rust (panic na overflow w trybie debug)
- Kompilatory: GCC/Clang z flagami
-ftrapv,-fsanitize=integer - Biblioteki: SafeInt (C++), BigInt w JavaScript/Python
- Static Analysis i fuzzing (AFL++, libFuzzer)
Powiązane pojęcia
Buffer Overflow • Undefined Behavior • Integer Underflow • Safe Arithmetic • Fuzzing • Smart Contract Security • CWE-190 • Rust Safety • Sanitizers