CVE: CVE-2026-72033
Продукт: Linux Kernel
Дата публикации: 15.08.2026
Критичность: не определена
CVSS: нет данных
EPSS: 0,22%; процентиль 12,94%
CISA KEV: нет подтверждения в каталоге CISA KEV
Краткое описание
В файловой системе Orangefs ядра Linux обнаружена уязвимость, позволяющая вызвать чтение за пределами буфера (out-of-bounds read) при обработке записей каталога. Проблема возникает из-за некорректного приведения типа данных при вычислении размера записи, что приводит к переполнению 32-битного целого и обходу проверки границ. Результатом эксплуатации является отказ в обслуживании (DoS) через падение ядра (kernel oops).
Основные характеристики
Уязвимость затрагивает подсистему файловой системы Orangefs, которая используется для доступа к распределенным файловым системам. Ключевая проблема заключается в функции
fill_from_part(), отвечающей за заполнение данных из частей каталога. Функция вычисляет размер записи каталога, используя тип size_t, но сохраняет результат в переменную типа __u32. Если длина записи, предоставленная клиентом пользовательского пространства, близка к максимальному значению 32-битного беззнакового целого (U32_MAX), происходит переполнение (wrap-around). Значение уменьшается до малого числа, что позволяет обойти последующую проверку границ буфера. В результате ядро пытается прочитать данные за пределами выделенной области памяти, что вызывает ошибку ядра (oops) и потенциально приводит к зависанию или перезагрузке системы.Какие продукты и версии затронуты
Linux Kernel с поддержкой файловой системы Orangefs. Уязвимость присутствует в версиях ядра, содержащих коммит
480e3e532e31 («orangefs: support very large directories»), но не имеющих исправления 18227a6bc98bd0ba96ed3ce9d5b28776a5a28dfc. Исправление было применено в ветках стабильных версий ядра (stable tree) в июле 2026 года. Системы, не использующие файловую систему Orangefs, не подвержены риску.Причина уязвимости
Причиной уязвимости является ошибка в логике обработки типов данных в функции
fill_from_part() файла fs/orangefs/dir.c. Разработчики вычисляли размер записи каталога (padlen) с использованием арифметики, совместимой с size_t, но присваивали результат переменной типа __u32. При этом длина строки имени файла (*len) поступает от клиента пользовательского пространства. Если клиент передает значение длины, близкое к U32_MAX, сумма (sizeof *len + *len + 1) переполняет 32-битный диапазон. В результате padlen принимает малое значение, которое проходит проверку if (part->len < i + padlen + sizeof *khandle). Это приводит к тому, что указатель смещается за пределы допустимой области памяти, и ядро пытается прочитать данные из недопустимого адреса.Как работает атака
Атакующий должен иметь возможность взаимодействовать с клиентом пользовательского пространства файловой системы Orangefs, который обслуживает запросы к ядру. Для эксплуатации уязвимости злоумышленник посылает специально сформированный запрос на чтение каталога (readdir), в котором поле длины записи (trailer) содержит значение, близкое к
U32_MAX. Ядро принимает это значение, вычисляет размер записи, приводит его к __u32, что вызывает переполнение и получение малого значения. Проверка границ, основанная на этом искаженном размере, успешно проходит. Далее ядро использует смещение для доступа к памяти, выходя за пределы буфера part. Попытка чтения по этому адресу вызывает исключение ядра (kernel oops), что приводит к аварийному завершению работы процесса или, в худшем случае, к зависанию системы.Условия успешной эксплуатации
Для успешной эксплуатации необходимы следующие условия:
- Система использует файловую систему Orangefs.
- Атакующий имеет доступ к клиенту пользовательского пространства Orangefs или может контролировать данные, передаваемые от сервера к клиенту.
- Клиент передает в ядро данные с контролируемым полем длины записи.
- Ядро не содержит исправления, меняющего тип переменной
padlenнаu64.
Возможный сценарий атаки
Сценарий атаки начинается с того, что атакующий, имеющий доступ к сети или локальной системе, взаимодействующей с распределенной файловой системой Orangefs, инициирует операцию чтения каталога. В запросе или ответе, обрабатываемом клиентом, атакующий подменяет или формирует поле длины записи так, чтобы оно было равно значению, близкому к
4294967295 (U32_MAX). Когда ядро обрабатывает этот запрос в функции fill_from_part(), оно вычисляет размер записи. Из-за приведения типа к __u32 происходит переполнение, и размер становится, например, 1 или 0. Проверка границ part->len < i + padlen + sizeof *khandle возвращает истину, так как вычисленный размер кажется допустимым. Ядро затем пытается прочитать данные по смещению, выходящему за пределы буфера part. Это вызывает ошибку сегментации в режиме ядра (oops), что фиксируется в системном журнале и может привести к падению системы.Есть ли публичный эксплойт
На момент публикации информации публичные эксплойты или PoC-коды для CVE-2026-72033 не зафиксированы. Уязвимость была обнаружена и исправлена в рамках внутренней разработки ядра. Доступны только ссылки на коммиты исправления в репозитории стабильных версий ядра Linux. Отсутствие публичного эксплойта не означает невозможности эксплуатации, но снижает вероятность массовых атак в краткосрочной перспективе.
Признаки эксплуатации
Специфичные индикаторы компрометации (IOC) для этой уязвимости отсутствуют, так как эксплуатация приводит к отказу в обслуживании, а не к установке вредоносного ПО. Однако администраторы могут наблюдать следующие неспецифичные признаки:
- Внезапные падения ядра (kernel oops) с упоминанием модуля
orangefsили функцииfill_from_partв системных журналах (dmesg, syslog).
- Непредсказуемые зависания или перезагрузки системы при операциях чтения каталогов в распределенной файловой системе.
- Сообщения об ошибках доступа к памяти (out-of-bounds read) в логах ядра.
Как обнаружить атаку
Для обнаружения признаков эксплуатации или наличия уязвимости рекомендуется:
- Мониторинг системных журналов (
dmesg,/var/log/syslog) на наличие сообщений об ошибках ядра, связанных с модулемorangefs.
- Проверка версии ядра и наличия примененных патчей.
- Анализ логов файловой системы на наличие аномальных запросов с экстремально большими значениями длины записи.
- Использование инструментов аудита ядра для проверки целостности модулей файловой системы.
Как проверить свою версию
Для проверки версии ядра и определения подверженности системы уязвимости используйте следующие команды:
Bash:
uname -r
uname -a
cat /proc/version
Сравните полученную версию ядра с версиями, содержащими исправление. Исправление было применено в коммите
18227a6bc98bd0ba96ed3ce9d5b28776a5a28dfc и портировано в различные ветки стабильных версий. Если ваша версия ядра старше даты применения исправления (июль 2026 года) и содержит поддержку Orangefs, система уязвима.Исправление
Основным методом устранения уязвимости является обновление ядра Linux до версии, содержащей исправление. Исправление изменяет тип переменной
padlen с __u32 на u64, что предотвращает переполнение при вычислении размера записи. Это гарантирует, что проверка границ будет корректно отклонять записи с недопустимо большим размером.Обновите систему с помощью пакетного менеджера вашей дистрибуции:
Bash:
# Для Debian/Ubuntu
sudo apt update
sudo apt upgrade linux-image-generic
# Для RHEL/CentOS/Fedora
sudo dnf update kernel
После обновления перезагрузите систему, чтобы загрузить новое ядро.
Временные меры защиты
Если немедленное обновление ядра невозможно, рекомендуется:
- Отключить использование файловой системы Orangefs, если она не критична для работы системы.
- Ограничить доступ к клиенту пользовательского пространства Orangefs, чтобы предотвратить обработку запросов от недоверенных источников.
- Настроить мониторинг системных журналов на предмет сообщений об ошибках ядра, связанных с
orangefs, для раннего обнаружения попыток эксплуатации.
- Изолировать системы, использующие Orangefs, в отдельном сегменте сети, чтобы минимизировать поверхность атаки.
Как проверить устранение уязвимости
Для проверки успешного применения исправления:
- Убедитесь, что система загружена с новым ядром:
Bash:uname -r - Проверьте наличие коммита исправления в истории ядра (если доступна информация о сборке):
Bash:git log --oneline | grep 18227a6b
(Эта команда применима только если ядро собрано из исходников с доступом к git).
- Убедитесь, что модуль
orangefsзагружен и работает корректно, выполнив тестовые операции чтения каталогов и проверив логи на отсутствие ошибокoops.
- Проверьте, что переменная
padlenв исходном коде функцииfill_from_part()имеет типu64(если есть доступ к исходникам ядра).
Вывод
CVE-2026-72033 представляет собой уязвимость в файловой системе Orangefs ядра Linux, позволяющую вызвать отказ в обслуживании через переполнение 32-битного целого при вычислении размера записи каталога. Уязвимость эксплуатирована через предоставление клиентом пользовательского пространства недопустимо большого значения длины записи. Исправление заключается в изменении типа переменной на 64-битный, что предотвращает переполнение и обеспечивает корректную проверку границ. Администраторам рекомендуется обновить ядро до версии, содержащей исправление, или отключить использование Orangefs, если обновление невозможно.
Официальные источники
- NVD — CVE-2026-72033
- FIRST EPSS — CVE-2026-72033
- orangefs: keep the readdir entry size 64-bit in fill_from_part() - kernel/git/stable/linux.git - Linux kernel stable tree
- orangefs: keep the readdir entry size 64-bit in fill_from_part() - kernel/git/stable/linux.git - Linux kernel stable tree
- orangefs: keep the readdir entry size 64-bit in fill_from_part() - kernel/git/stable/linux.git - Linux kernel stable tree
- orangefs: keep the readdir entry size 64-bit in fill_from_part() - kernel/git/stable/linux.git - Linux kernel stable tree
- orangefs: keep the readdir entry size 64-bit in fill_from_part() - kernel/git/stable/linux.git - Linux kernel stable tree
- orangefs: keep the readdir entry size 64-bit in fill_from_part() - kernel/git/stable/linux.git - Linux kernel stable tree
- orangefs: keep the readdir entry size 64-bit in fill_from_part() - kernel/git/stable/linux.git - Linux kernel stable tree
- orangefs: keep the readdir entry size 64-bit in fill_from_part() - kernel/git/stable/linux.git - Linux kernel stable tree
История обновлений статьи
- 17.08.2026 — Опубликована первая версия материала.
