Чтение за пределами буфера

Чтение за пределами буфера (англ. 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].

Примечания

  1. CWE – CWE-126: Buffer Over-read. Common Weakness Enumeration (версия списка 4.15) (18 февраля 2014). Дата обращения: 29 мая 2026. Архивировано 8 февраля 2018 года.
  2. Strackx, Raoul. Breaking the memory secrecy assumption // Proceedings of the Second European Workshop on System Security / Raoul Strackx, Yves Younan, Pieter Philippaerts … [и др.]. — New York, NY, USA : ACM, 2009-01-01. — P. 1–8. — ISBN 9781605584720. — doi:10.1145/1519144.1519145.
  3. CWE - CWE-126: Buffer Over-read. Common Weakness Enumeration (версия списка 4.15). Дата обращения: 29 мая 2026. Архивировано 17 августа 2023 года.
  4. 1 2 3 4 5 CWE-125: Out-of-bounds Read. Common Weakness Enumeration. MITRE. Дата обращения: 29 мая 2026.
  5. CWE-119: Improper Restriction of Operations within the Bounds of a Memory Buffer. Common Weakness Enumeration. MITRE. Дата обращения: 29 мая 2026.
  6. MITRE Shares 2025's Top 25 Most Dangerous Software Weaknesses. Bleeping Computer. Дата обращения: 29 мая 2026.
  7. Ключевое различие между Buffer Overflow и Buffer Over-read. Tproger. Дата обращения: 29 мая 2026.
  8. CWE-120: Buffer Copy without Checking Size of Input ('Classic Buffer Overflow'). Common Weakness Enumeration. MITRE. Дата обращения: 29 мая 2026.
  9. Multi-Tenant Data Isolation: Cloud Security Best Practices. Ones.com. Дата обращения: 29 мая 2026.
  10. 1 2 Уязвимость чтения за пределами допустимого диапазона в Ollama позволяет вызвать утечку памяти. ITB.SPB.RU. Дата обращения: 29 мая 2026.
  11. Efficient protection against heap-based buffer overflows without resorting to magic. Dept. of Computer Science, Katholieke Universiteit Leuven (25 февраля 2013). Дата обращения: 29 мая 2026. Архивировано 5 сентября 2013 года.
  12. std::span (C++20): когда использовать и не использовать для безопасной передачи буфера. Хабр. Дата обращения: 29 мая 2026.
  13. Memory Safety. memorysafety.org. Дата обращения: 29 мая 2026.
  14. Небезопасный Rust. doc.rust-lang.ru. Дата обращения: 29 мая 2026.
  15. CVE-2026-5282 Detail. NVD. NIST (1 апреля 2026). Дата обращения: 29 мая 2026.
  16. CVE-2026-9122 Detail. NVD. NIST (20 мая 2026). Дата обращения: 29 мая 2026.
  17. CVE-2026-47104 Detail. NVD. NIST (27 мая 2026). Дата обращения: 29 мая 2026.
  18. Out-of-bounds read in Linux kernel - CVE-2025-38221. Cybersecurity Help. Дата обращения: 29 мая 2026.
  19. CVE-2026-43449: Out-of-Bounds Read in Linux Kernel NVMe PCI Driver. SentinelOne. Дата обращения: 29 мая 2026.

Литература

  • Отчёт Securelist (Kaspersky) о ландшафте уязвимостей (первый квартал 2025 года)[1].
  • Отчёт Cisco Talos об уязвимости CVE-2025-27931 (август 2025 года).
  • Бюллетень безопасности curl об уязвимости CVE-2025-9086 (сентябрь 2025 года)[2].
  • Проект OWASP Top 10 (2025)[3].
  1. Уязвимости и эксплойты в первом квартале 2025 года. Securelist. Kaspersky. Дата обращения: 29 мая 2026.
  2. CVE-2025-9086. curl.se (10 сентября 2025). Дата обращения: 29 мая 2026.
  3. X01 2025 Next Steps. OWASP Top 10. OWASP Foundation. Дата обращения: 29 мая 2026.

Категории