Целочисленный underflow
Что такое Целочисленный underflow?
Целочисленный underflowАрифметический дефект (CWE-191): вычитание ниже нуля у беззнакового значения «перекручивается» в огромное число, что ведёт к избыточным аллокациям или выходу за буфер.
Целочисленный underflow возникает, когда беззнаковое целое уменьшается ниже нуля или знаковая арифметика пересекает INT_MIN, и результат «оборачивается» в очень большое положительное число. Классический шаблон — len = header_len - prefix_len с подконтрольным атакующему prefix_len: получившееся огромное len обходит проверки границ и приводит к переполнению кучи или стека и OOB-чтениям. Реальные примеры — CVE-2018-1000005 (libcurl) и многочисленные сетевые ошибки ядра, где size_t-арифметика по длинам пакетов уходит в underflow. Меры: знаковая арифметика с явными сравнениями, проверяемое вычитание (__builtin_sub_overflow, std::safe_int), языковые ловушки переполнения (Rust debug, Swift), фаззинг с UBSan и строгая валидация ввода.
● Примеры
- 01
len = total - header_len превращается в 0xFFFFFFFF при total < header_len и используется как размер memcpy.
- 02
Linux CVE-2019-11815: вычитание оставшейся длины уходит в underflow и приводит к UAF.
● Частые вопросы
Что такое Целочисленный underflow?
Арифметический дефект (CWE-191): вычитание ниже нуля у беззнакового значения «перекручивается» в огромное число, что ведёт к избыточным аллокациям или выходу за буфер. Относится к категории Атаки и угрозы в кибербезопасности.
Что означает Целочисленный underflow?
Арифметический дефект (CWE-191): вычитание ниже нуля у беззнакового значения «перекручивается» в огромное число, что ведёт к избыточным аллокациям или выходу за буфер.
Как работает Целочисленный underflow?
Целочисленный underflow возникает, когда беззнаковое целое уменьшается ниже нуля или знаковая арифметика пересекает INT_MIN, и результат «оборачивается» в очень большое положительное число. Классический шаблон — len = header_len - prefix_len с подконтрольным атакующему prefix_len: получившееся огромное len обходит проверки границ и приводит к переполнению кучи или стека и OOB-чтениям. Реальные примеры — CVE-2018-1000005 (libcurl) и многочисленные сетевые ошибки ядра, где size_t-арифметика по длинам пакетов уходит в underflow. Меры: знаковая арифметика с явными сравнениями, проверяемое вычитание (__builtin_sub_overflow, std::safe_int), языковые ловушки переполнения (Rust debug, Swift), фаззинг с UBSan и строгая валидация ввода.
Как защититься от Целочисленный underflow?
Защита от Целочисленный underflow обычно сочетает технические меры и операционные практики, как описано в определении выше.
Какие есть другие названия Целочисленный underflow?
Распространённые альтернативные названия: Беззнаковый underflow, CWE-191.
● Связанные термины
- vulnerabilities№ 543
Целочисленное переполнение
Ошибка, при которой арифметическая операция даёт значение вне диапазона целочисленного типа, что приводит к опасным эффектам обёртки или усечения.
- vulnerabilities№ 131
Переполнение буфера
Ошибка безопасности памяти, при которой программа пишет за концом выделенного буфера, повреждая соседнюю память и часто открывая возможность выполнения кода.
- attacks№ 772
Чтение за границами буфера
Ошибка безопасности памяти (CWE-125): программа читает данные до, после или иначе вне предполагаемого буфера, раскрывая содержимое соседней памяти.
- vulnerabilities№ 667
Повреждение памяти
Обобщающий термин для уязвимостей, при которых программа пишет за пределы предполагаемой памяти, нарушая типовую безопасность, поток управления или целостность данных.
- appsec№ 538
Валидация ввода
Серверная проверка того, что каждый недоверенный ввод соответствует ожидаемому типу, длине, диапазону, формату и набору значений до его обработки приложением.