CVE-2026-72033 в Linux Kernel: целочисленное переполнение в Orangefs

CVE: CVE-2026-72033
Продукт: Linux Kernel
Дата публикации: 15.08.2026
Критичность: CRITICAL
CVSS: 9.8 (3.1)
EPSS: 0,74%; процентиль 51,55%
CISA KEV: нет подтверждения в каталоге CISA KEV

Краткое описание​


В файловой системе Orangefs ядра Linux обнаружена уязвимость CVE-2026-72033 (CVSS 9.8). Ошибка возникает в функции fill_from_part() из-за усечения 64-битного размера записи каталога до 32 бит. Это позволяет обойти проверки границ и инициировать чтение за пределами буфера, что приводит к падению ядра (kernel oops) и отказу в обслуживании.

Основные характеристики​


Уязвимость затрагивает подсистему файловой системы Orangefs. Ключевая проблема локализована в функции fill_from_part() файла fs/orangefs/dir.c. При обработке данных каталога размер записи вычисляется в типе size_t, но сохраняется в переменную типа __u32. Если длина записи близка к U32_MAX, происходит переполнение (wrap-around), и значение становится малым. Это обходит последующую проверку границ (bounds check). Ядро использует усеченное значение для индексации, читая память далеко за пределами выделенного буфера части каталога. Результатом является kernel oops. Данные, содержащие вредоносный трейлер, поступают от клиента в пространстве пользователя.

Какие продукты и версии затронуты​


Linux Kernel с поддержкой файловой системы Orangefs. Уязвимость присутствует в версиях ядра, содержащих коммит 480e3e532e31 («orangefs: support very large directories») и не содержащих исправление 18227a6bc98bd0ba96ed3ce9d5b28776a5a28dfc. Исправление портировано в ветки стабильных релизов. Системы, не использующие модуль orangefs, не подвержены риску. Точные версии дистрибутивов зависят от применяемых сборок ядра.

Причина уязвимости​


Причиной является целочисленное переполнение при приведении типов. В функции fill_from_part() вычисляется padlen (общий размер закодированной строки). Результат сохраняется в переменную __u32 padlen. При большой исходной длине сложение и усечение до 32 бит приводят к тому, что padlen становится небольшим положительным числом. Проверка if (part->len < i + padlen + sizeof *khandle) использует это усеченное значение. Если реальная длина записи огромна, но padlen после переполнения мал, условие проверки границ может быть ложно истинным, позволяя вычислить смещение s, указывающее за пределы буфера part.

Как работает атака​


Атакующий должен взаимодействовать с сервером Orangefs или контролировать клиента, отправляющего запросы на чтение каталога. Механика основана на подаче специально сформированного трейлера, где поле длины (len) установлено в значение, близкое к U32_MAX. При обработке в ядре: 1. Вычисляется padlen как size_t. 2. Результат присваивается __u32 padlen, вызывая усечение. 3. Малое padlen проходит проверку границ. 4. Вычисляется указатель s. 5. Происходит чтение по адресу s за пределами буфера. 6. Ядро генерирует oops, завершая работу системы или модуля.

Условия успешной эксплуатации​


  1. Наличие установленной и смонтированной файловой системы Orangefs. 2. Возможность отправки данных от клиента в пространстве пользователя, взаимодействующего с ядром. 3. Отсутствие исправления в текущей версии ядра. 4. Доступ к системе, позволяющий инициировать чтение каталога с контролируемым содержимым.

Возможный сценарий атаки​


Злоумышленник контролирует или внедряет вредоносные данные в поток ответов от сервера Orangefs или манипулирует клиентом. При перечислении каталога (readdir) ядро получает запись с аномально большим размером. Из-за ошибки в fill_from_part() проверка целостности пропускается. Ядро пытается прочитать данные, используя смещение на основе усеченного размера. Обращение к невалидной памяти вызывает крах ядра (kernel oops), что приводит к перезагрузке системы или остановке сервиса, реализовывая отказ в обслуживании.

Есть ли публичный эксплойт​


В открытых источниках нет подтвержденных данных о наличии публичного эксплойта (PoC) или фактах эксплуатации в реальных атаках. Уязвимость исправлена в ядре. Отсутствие публичного эксплойта не означает отсутствие риска, особенно в средах с возможным контролем над клиентом или сервером Orangefs.

Признаки эксплуатации​


Специфичные индикаторы компрометации не определены, так как уязвимость приводит к отказу в обслуживании. Общие признаки попытки эксплуатации: 1. Частые падения ядра (kernel oops/panic) с упоминанием orangefs или fill_from_part в журналах. 2. Аномальная активность в логах файловой системы, связанная с запросами к каталогам с необычно большими размерами записей. 3. Нестабильность работы системы при операциях чтения каталогов в Orangefs.

Как обнаружить атаку​


Для обнаружения: 1. Мониторинг журналов ядра (dmesg, /var/log/kern.log) на ошибки в модуле orangefs. 2. Проверка версии ядра и наличия патча. 3. Анализ трафика между клиентом и сервером Orangefs на аномально большие значения в полях длины записей. 4. Аудит кода на наличие функции fill_from_part с уязвимой логикой.

Как проверить свою версию​


Проверьте версию ядра Linux:

Bash:
uname -r
uname -a
cat /proc/version

Сравните версию с версиями, содержащими исправление. Если версия старше, чем та, что содержит коммит 18227a6bc98bd0ba96ed3ce9d5b28776a5a28dfc, система уязвима. Проверьте загрузку модуля:

Bash:
lsmod | grep orangefs

Если модуль не загружен, риск отсутствует.

Исправление​


Обновите ядро Linux до версии, содержащей исправление CVE-2026-72033. Исправление меняет тип переменной padlen с __u32 на u64 в fill_from_part(), предотвращая усечение. Обновите систему:

Bash:
# Debian/Ubuntu
sudo apt update && sudo apt upgrade linux-image-<имя-пакета>

# RHEL/CentOS/Fedora
sudo dnf update kernel

Перезагрузите систему для загрузки нового ядра.

Временные меры защиты​


Если обновление невозможно: 1. Отключите файловую систему Orangefs. 2. Отмонтируйте файловые системы: sudo umount /mount/point. 3. Запретите загрузку модуля orangefs, добавив blacklist orangefs в /etc/modprobe.d/blacklist.conf. 4. Ограничьте доступ к серверам Orangefs доверенным клиентам.

Как проверить устранение уязвимости​


После обновления проверьте версию ядра:

Bash:
uname -r

Убедитесь, что версия исправлена. Проверьте стабильность модуля orangefs в dmesg. При самостоятельной компиляции проверьте наличие патча в исходном коде.

Вывод​


CVE-2026-72033 — критическая уязвимость в Orangefs, ведущая к DoS через OOB Read. Риск актуален для систем с распределенными файловыми системами на базе Orangefs. Обновление ядра обязательно. Временные меры включают отключение модуля. Мониторинг журналов поможет выявить попытки эксплуатации.

Официальные источники​


  1. NVD — CVE-2026-72033
  2. FIRST EPSS — CVE-2026-72033
  3. orangefs: keep the readdir entry size 64-bit in fill_from_part() - kernel/git/stable/linux.git - Linux kernel stable tree
  4. orangefs: keep the readdir entry size 64-bit in fill_from_part() - kernel/git/stable/linux.git - Linux kernel stable tree
  5. orangefs: keep the readdir entry size 64-bit in fill_from_part() - kernel/git/stable/linux.git - Linux kernel stable tree
  6. orangefs: keep the readdir entry size 64-bit in fill_from_part() - kernel/git/stable/linux.git - Linux kernel stable tree
  7. orangefs: keep the readdir entry size 64-bit in fill_from_part() - kernel/git/stable/linux.git - Linux kernel stable tree
  8. orangefs: keep the readdir entry size 64-bit in fill_from_part() - kernel/git/stable/linux.git - Linux kernel stable tree
  9. orangefs: keep the readdir entry size 64-bit in fill_from_part() - kernel/git/stable/linux.git - Linux kernel stable tree
  10. orangefs: keep the readdir entry size 64-bit in fill_from_part() - kernel/git/stable/linux.git - Linux kernel stable tree

История обновлений статьи​


  • 17.08.2026 — Опубликована первая версия материала.
  • 18.08.2026 — Уточнены сведения об уязвимых версиях, оценке риска или исправлении.
 
Последнее редактирование:
Назад
Верх Низ