Skip to content
Vol. 1 · Ed. 2026
CyberGlossary
Entry № 608

Целочисленное переполнение

ПроверилCybersecurity entrepreneur & security researcher

Что такое Целочисленное переполнение?

Целочисленное переполнениеОшибка, при которой арифметическая операция даёт значение вне диапазона целочисленного типа, что приводит к опасным эффектам обёртки или усечения.


Целочисленные переполнения возникают, когда вычисления выходят за максимум (или минимум) целочисленного типа, вызывая обёртку, смену знака или усечение. Это становится проблемой безопасности, когда некорректное значение далее используется как размер буфера, счётчик цикла, индекс массива или проверка авторизации, что часто приводит к переполнениям буфера, бесконечным циклам или обходу ограничений.

Классический шаблон. Типичное уязвимое место — malloc(count * size): если count * size заворачивается за пределы SIZE_MAX, аллокатор возвращает буфер намного меньше, чем предполагает код, и последующее копирование пишет за концом буфера — переполнение, вызванное умножением, а не неверной длиной в memcpy. Семейство Stagefright для Android 2015 года (CVE-2015-1538) использовало именно это: целочисленное переполнение в атоме метаданных stsc файла MP4 приводило к слишком маленькому выделению в куче, позволяя одному MMS-сообщению добиться удалённого выполнения кода примерно на 950 миллионах устройств по оценкам. Уязвимость challenge-response в OpenSSH 2002 года (CVE-2002-0639) и множество ошибок в кодеках изображений и парсерах шрифтов имеют ту же форму. Преобразования из знакового в беззнаковый тип — родственная ловушка: отрицательная длина, истолкованная как огромное беззнаковое значение, обходит наивную проверку вида if (len > max).

К мерам защиты относятся проверяемая арифметика (checked_add/checked_mul в Rust, ckd_* в C23, флаг компилятора -ftrapv и UBSan), вычисление в более широком типе с проверкой диапазона перед сужением, выбор типов, соответствующих области значений, проверка контролируемых злоумышленником размеров перед выделением памяти и агрессивный фаззинг парсеров.

flowchart TD
  A[Контролируемые атакующим<br/>count и size] --> B[size = count * elem]
  B --> C{Произведение превышает<br/>максимум типа?}
  C -->|Нет| D[Корректное выделение]
  C -->|Да| E[Значение заворачивается<br/>в малое число]
  E --> F[Выделен слишком малый буфер]
  F --> G[Копирование пишет за концом<br/>повреждение кучи / RCE]

Примеры

  1. 01

    CVE-2002-0639 (OpenSSH challenge-response): целочисленное переполнение, ведущее к повреждению кучи.

  2. 02

    CVE-2015-1538 (Android Stagefright): целочисленное переполнение в атоме 'stsc' файла MP4, позволяющее удалённое выполнение кода.

Частые вопросы

Что такое Целочисленное переполнение?

Ошибка, при которой арифметическая операция даёт значение вне диапазона целочисленного типа, что приводит к опасным эффектам обёртки или усечения. Относится к категории Уязвимости в кибербезопасности.

Что означает Целочисленное переполнение?

Ошибка, при которой арифметическая операция даёт значение вне диапазона целочисленного типа, что приводит к опасным эффектам обёртки или усечения.

Как защититься от Целочисленное переполнение?

Защита от Целочисленное переполнение обычно сочетает технические меры и операционные практики, как описано в определении выше.

Какие есть другие названия Целочисленное переполнение?

Распространённые альтернативные названия: Обёртка целого.

Связанные термины

См. также