Чтение за пределами буфера
Чтение за пределами буфера (англ. buffer over-read, чтение за пределами выделенной области памяти, англ. out-of-bounds read) — это аномалия в области компьютерной безопасности и программирования, при которой программа, читая данные из буфера, выходит за границы буфера и обращается к смежным областям памяти. Такая ситуация является частным случаем нарушения безопасности работы с памятью[1][2][3].
Согласно официальным стандартам MITRE и Национального института стандартов и технологий (NIST), данная уязвимость имеет идентификатор CWE-125 (англ. Out-of-bounds Read). Она определяется как программная ошибка, при которой продукт считывает данные за концом или перед началом предполагаемого буфера[4]. В иерархии уязвимостей CWE-125 является дочерним элементом более общего класса CWE-119 («Некорректное ограничение операций в пределах буфера памяти»)[5]. В рейтинге самых опасных программных ошибок MITRE CWE Top 25 за 2025 год эта уязвимость заняла 8-е место[6].
Причины и последствия
Чтение за пределами буфера может быть вызвано, как в случае уязвимости Heartbleed, специально сформированными входными данными, которые эксплуатируют отсутствие проверки границ для получения доступа к частям памяти, не предназначенным для чтения. К подобному поведению могут также привести ошибки программирования. Последствия чтения за пределами буфера — нестабильная работа программы, ошибки при обращении к оперативной памяти, некорректные результаты, сбой программы или компрометация безопасности системы. Таким образом, данная аномалия лежит в основе множества уязвимостей программного обеспечения и может использоваться злоумышленниками для получения доступа к конфиденциальной информации.
Ключевое техническое различие между чтением за пределами буфера (CWE-125) и переполнением буфера (CWE-120 и CWE-787) заключается в типе некорректной операции с памятью. При чтении за пределами буфера происходит несанкционированный доступ к данным за границами выделенной области, что ведёт к утечке конфиденциальной информации. В случае переполнения буфера осуществляется запись за его пределы, что может привести к повреждению данных и удалённому выполнению произвольного кода[4][7][8].
Уязвимости типа чтения за пределами буфера представляют критическую угрозу для изоляции данных в многопользовательских облачных платформах. Эксплуатация подобных ошибок в общих компонентах инфраструктуры (например, в гипервизоре или ядре операционной системы) может позволить злоумышленнику, действующему в рамках одного тенанта, прочитать фрагменты памяти других тенантов. Это ведёт к компрометации и утечке чувствительной информации, включая учётные данные и ключи шифрования[9][10].
Методы предотвращения
Языки программирования, наиболее часто ассоциируемые с чтением за пределами буфера, включают C и C++, которые не обеспечивают встроенной защиты от использования указателей для доступа к данным в любом участке виртуальной памяти и не делают автоматической проверки безопасности чтения данных из блока памяти. Примерами таких ситуаций являются попытка прочитать больше элементов, чем содержится в массиве, либо не добавление завершающего символа в строку с завершающим нулём. Проверка границ может предотвращать чтение за пределами буфера[11], а фазз-тестирование позволяет выявлять такие ошибки[4].
Использование std::span и std::string_view помогает снизить риски возникновения уязвимости за счёт инкапсуляции указателя и размера буфера в одном объекте[12].
Для выявления ошибок на этапе разработки применяется статический анализ кода (SAST)[4]. Во время выполнения программы эффективным средством обнаружения ошибок доступа к памяти является динамический анализ, в частности инструмент AddressSanitizer (ASan)[4].
Системным решением проблемы является использование языков программирования с безопасной работой с памятью, таких как Rust и Go[13]. Тем не менее, уязвимость всё равно может возникать при использовании небезопасного (unsafe) кода, а также интерфейсов внешних функций (FFI)[14].
Известные уязвимости
Также, если чтение за пределами буфера не связано с вредоносным вводом, оно может привести к сбоям при возникновении неправильных ошибок страниц. Например, массовые сбои ИТ-систем в 2024 году были вызваны ошибкой работы с памятью за пределами допустимого диапазона в программном обеспечении кибербезопасности, разработанном компанией CrowdStrike.
В 2025—2026 годах был выявлен ряд других значимых уязвимостей, связанных с чтением за пределами буфера:
- Google Chrome: уязвимости CVE-2026-5282 (в компоненте WebCodecs) и CVE-2026-9122 (в компоненте GPU). Эксплуатация могла привести к утечке конфиденциальной информации из памяти браузера или сбою в его работе[15].[16]
- libusb: уязвимость CVE-2026-47104, возникающая при обработке вредоносного USB-дескриптора. Основным последствием является отказ в обслуживании (сбой приложения)[17].
- Ядро Linux: уязвимости CVE-2025-38221 (в файловой системе ext4, отказ в обслуживании)[18], CVE-2025-40322 (при обработке шрифтов, раскрытие информации и отказ в обслуживании) и CVE-2026-43449 (в драйвере NVMe PCI, утечка памяти ядра или нестабильность системы)[19].
- Ollama: критическая уязвимость CVE-2026-7482 (известная как «Bleeding Llama») во фреймворке для запуска больших языковых моделей. Приводила к утечке содержимого памяти всего процесса[10].
Примечания
Литература
- Переполнение буфера при работе с DateInterval в PHP, ведущее к отказу в обслуживании
- Сообщение об ошибке PHP № 66060: Чтение за пределами буфера при работе с DateInterval
- Отчёт Securelist (Kaspersky) о ландшафте уязвимостей (первый квартал 2025 года)[1].
- Отчёт Cisco Talos об уязвимости CVE-2025-27931 (август 2025 года).
- Бюллетень безопасности curl об уязвимости CVE-2025-9086 (сентябрь 2025 года)[2].
- Проект OWASP Top 10 (2025)[3].
- ↑ Уязвимости и эксплойты в первом квартале 2025 года. Securelist. Kaspersky. Дата обращения: 29 мая 2026.
- ↑ CVE-2025-9086. curl.se (10 сентября 2025). Дата обращения: 29 мая 2026.
- ↑ X01 2025 Next Steps. OWASP Top 10. OWASP Foundation. Дата обращения: 29 мая 2026.