CVE: CVE-2026-80557
Продукт: Linux Kernel
Дата публикации: 26.08.2026
Критичность: CRITICAL
CVSS: 9.8 (3.1)
EPSS: 0,52%; процентиль 41,96%
CISA KEV: нет подтверждения в каталоге CISA KEV
Краткое описание
В модуле
libceph ядра Linux обнаружена уязвимость, позволяющая нарушителю, контролирующему OSD-узел в Ceph, вызвать чтение за границей буфера. Ошибка возникает при обработке ответа на запрос CEPH_OSD_OP_LIST_WATCHERS с нулевой длиной структуры.Это нарушает границу доверия между клиентом и сервером хранения, приводя к потенциальному компрометированию целостности данных и отказу в обслуживании. Статья разбирает механику атаки, условия эксплуатации и способы проверки исправления.
Основные характеристики
Уязвимость позволяет злонамеренному OSD-узелу в многонаёмной среде Ceph нарушить целостность данных ядра клиента, вызывая чтение за границей буфера. Это критический риск, так как нарушитель не требует дополнительных привилегий, кроме установления сессии с OSD.
- Тип ошибки: Out-of-Bounds Read (OOB Read) в функции
decode_watchers().
- CVSS: 9.8 (CRITICAL), вектор
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H.
- Условия атаки: Атакующий должен контролировать OSD-узел в Ceph-кластере и иметь возможность отправлять сформированные ответы клиенту.
- Эксплуатация: Публичные данные о массовой эксплуатации в реальных атаках отсутствуют, но техническое описание и патч доступны.
- EPSS: 0,52% (процентиль 41,96%), что указывает на низкую вероятность эксплуатации в ближайшие 30 дней.
Какие продукты и версии затронуты
Уязвимость затрагивает ядра Linux, содержащие модуль
libceph с поддержкой операции CEPH_OSD_OP_LIST_WATCHERS. Ошибка была введена в коммите a4ed38d7a180 и присутствует в версиях, не содержащих исправление.- Версии ядра: Все версии Linux, в которых функция
decode_watchers()использует небезопасный вызовceph_decode_32(p)без проверки границ.
- Компоненты:
net/ceph/osd_client.c(функцияdecode_watchers).
- Среда: Клиенты Ceph, работающие в ядре Linux, взаимодействующие с OSD-узлами.
Точный список конкретных версий дистрибутивов, содержащих уязвимость, не раскрыт в предоставленных источниках. Рекомендуется проверять наличие патча в вашем дистрибутиве.
Причина уязвимости
Причина уязвимости кроется в недостаточной валидации данных при декодировании ответа от OSD. Функция
ceph_start_decoding() проверяет наличие struct_len байтов в буфере, но допускает значение struct_len=0 как валидное.Когда
struct_len=0, функция ceph_decode_need(p, end, 0, bad) всегда проходит проверку, и указатель p оказывается равным end. Последующий вызов ceph_decode_32(p) в функции decode_watchers() не имеет предварительной проверки границ. Это приводит к чтению 4 байтов за пределами валидированного буфера.Полученное «мусорное» значение передается в
kzalloc_objs() как количество наблюдателей, что может привести к выделению памяти некорректного размера или к чтению произвольных данных из памяти ядра.Как работает атака
Атакующий, контролирующий OSD-узел в Ceph-кластере, отправляет клиенту ответ на запрос
CEPH_OSD_OP_LIST_WATCHERS со структурой obj_list_watch_response_t, в которой поле struct_len установлено в 0.Ядро клиента вызывает
ceph_start_decoding(), который успешно завершается, так как struct_len=0 проходит проверку. Указатель p совпадает с end. Далее вызывается ceph_decode_32(p), который читает 4 байта из памяти за границей буфера.Это чтение за границей буфера (OOB Read) позволяет нарушителю получить доступ к данным, которые не должны быть доступны, или вызвать сбой ядра. В зависимости от содержимого памяти, это может привести к утечке информации или отказу в обслуживании.
Условия успешной эксплуатации
Для успешной эксплуатации уязвимости атакующему необходимо выполнить следующие условия:
- Контроль OSD-узла: Атакующий должен иметь доступ к OSD-узелу в Ceph-кластере или возможность скомпрометировать его.
- Сессия с клиентом: Клиент должен быть подключен к OSD-узелу и иметь возможность отправлять запросы
CEPH_OSD_OP_LIST_WATCHERS.
- Многонаёмная среда: Уязвимость наиболее актуальна в облачных или многонаёмных средах, где один пользователь может контролировать OSD-узел, а другой использует клиентские сервисы Ceph.
Дополнительные привилегии, такие как root-доступ на клиенте, не требуются.
Возможный сценарий атаки
В многонаёмном облаке злоумышленник получает доступ к одному из OSD-узлов в Ceph-кластере. Он модифицирует ответ на запрос
CEPH_OSD_OP_LIST_WATCHERS, отправляемый клиенту другого пользователя, устанавливая struct_len=0.Когда клиент обрабатывает этот ответ, функция
decode_watchers() вызывает ceph_decode_32(p) без проверки границ. Это приводит к чтению 4 байтов из памяти ядра за пределами буфера. В результате нарушитель может получить доступ к конфиденциальным данным или вызвать сбой ядра, что приведет к отказу в обслуживании для всех пользователей, использующих этот клиент.Есть ли публичный эксплойт
Публичные данные о подтвержденной эксплуатации CVE-2026-80557 в реальных атаках отсутствуют. Однако техническое описание уязвимости и патч доступны в репозитории ядра Linux. Это означает, что уязвимость может быть легко эксплуатирована, если атакующий имеет доступ к OSD-узелу.
PoC (Proof of Concept) может быть создан на основе описания, но публично доступных рабочих эксплойтов в предоставленных источниках не обнаружено.
Признаки эксплуатации
Специфичные индикаторы компрометации (IOC) для CVE-2026-80557 не раскрыты в официальных источниках. Однако можно использовать общие точки контроля, которые не являются специфичными для этой уязвимости:
- Аномальные запросы Ceph: Мониторинг запросов
CEPH_OSD_OP_LIST_WATCHERSна предмет аномальных ответов сstruct_len=0.
- Сбои ядра: Проверка журналов ядра на предмет сообщений об ошибках, связанных с
libcephилиdecode_watchers.
- Аномальное выделение памяти: Мониторинг выделений памяти в ядре, которые могут указывать на OOB Read.
Эти индикаторы требуют дополнительной верификации и не гарантируют обнаружение именно этой атаки.
Как обнаружить атаку
Для обнаружения атаки можно использовать следующие методы:
- Мониторинг Ceph: Анализ логов Ceph на предмет аномальных ответов от OSD-узлов, особенно с
struct_len=0.
- Системные логи: Проверка
/var/log/kern.logилиdmesgна сообщения об ошибках, связанных сlibceph.
- Инструменты аудита: Использование eBPF или других инструментов для мониторинга вызовов
ceph_decode_32и проверки границ буфера.
Эти методы требуют настройки и могут генерировать ложные срабатывания, поэтому их следует использовать в сочетании с другими мерами безопасности.
Как проверить свою версию
Для проверки версии ядра и наличия уязвимости можно использовать следующие команды:
Bash:
uname -r
uname -a
cat /proc/version
Эти команды покажут текущую версию ядра. Чтобы проверить наличие патча, необходимо свериться с базой данных вашего дистрибутива или использовать инструменты аудита ядра. Точный список версий, содержащих уязвимость, не раскрыт в предоставленных источниках.
Исправление
Исправление CVE-2026-80557 заключается в замене небезопасного вызова
ceph_decode_32(p) на безопасный ceph_decode_32_safe(p, end, *num_watchers, bad) в функции decode_watchers().- Обновление ядра: Установите последнюю версию ядра Linux, содержащую патч.
- Обновление дистрибутива: Используйте инструменты обновления вашего дистрибутива для получения исправлений.
- Проверка патча: Убедитесь, что в вашем ядре присутствует коммит
00ead17c7de137a692edee59f2772e6af687e8ebили его backport.
После обновления рекомендуется перезагрузить систему, чтобы применить изменения к ядру.
Временные меры защиты
Пока не установлено исправление, можно использовать следующие временные меры:
- Ограничение доступа к OSD: Ограничьте доступ к OSD-узелам только доверенным клиентам.
- Мониторинг Ceph: Усиленный мониторинг Ceph-кластера на предмет аномальной активности.
- Изоляция клиентов: Изолируйте критические клиенты Ceph от потенциально скомпрометированных OSD-узлов.
Эти меры не устраняют уязвимость, но снижают риск эксплуатации.
Как проверить устранение уязвимости
Для верификации исправления можно использовать следующие шаги:
- Проверка версии ядра: Убедитесь, что версия ядра содержит патч.
- Проверка логов: Проверьте логи ядра на отсутствие ошибок, связанных с
libceph.
- Функциональное тестирование: Проведите тестирование Ceph-клиента, чтобы убедиться, что запросы
CEPH_OSD_OP_LIST_WATCHERSобрабатываются корректно.
Эти шаги помогут убедиться, что уязвимость устранена и система работает стабильно.
Вывод
CVE-2026-80557 представляет серьезную угрозу для систем, использующих Ceph в ядре Linux. Уязвимость позволяет нарушителю, контролирующему OSD-узел, вызвать чтение за границей буфера и потенциально компрометировать целостность данных.
Рекомендуется срочно обновить ядро до версии, содержащей патч, и усилить мониторинг Ceph-кластеров. Отсутствие публичных данных о массовой эксплуатации не должно снижать бдительность, так как техническое описание уязвимости позволяет легко создать эксплойт.
Официальные источники
- NVD — CVE-2026-80557
- FIRST EPSS — CVE-2026-80557
- libceph: fix OOB read in decode_watchers() via missing bounds check - kernel/git/stable/linux.git - Linux kernel stable tree
- libceph: fix OOB read in decode_watchers() via missing bounds check - kernel/git/stable/linux.git - Linux kernel stable tree
- libceph: fix OOB read in decode_watchers() via missing bounds check - kernel/git/stable/linux.git - Linux kernel stable tree
- libceph: fix OOB read in decode_watchers() via missing bounds check - kernel/git/stable/linux.git - Linux kernel stable tree
- libceph: fix OOB read in decode_watchers() via missing bounds check - kernel/git/stable/linux.git - Linux kernel stable tree
- libceph: fix OOB read in decode_watchers() via missing bounds check - kernel/git/stable/linux.git - Linux kernel stable tree
- libceph: fix OOB read in decode_watchers() via missing bounds check - kernel/git/stable/linux.git - Linux kernel stable tree
- libceph: fix OOB read in decode_watchers() via missing bounds check - kernel/git/stable/linux.git - Linux kernel stable tree
История обновлений статьи
- 29.08.2026 — Опубликована первая версия материала.
