CVE-2026-80557 в Linux Kernel: OOB read в libceph и патч ядра

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-кластеров. Отсутствие публичных данных о массовой эксплуатации не должно снижать бдительность, так как техническое описание уязвимости позволяет легко создать эксплойт.

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


  1. NVD — CVE-2026-80557
  2. FIRST EPSS — CVE-2026-80557
  3. libceph: fix OOB read in decode_watchers() via missing bounds check - kernel/git/stable/linux.git - Linux kernel stable tree
  4. libceph: fix OOB read in decode_watchers() via missing bounds check - kernel/git/stable/linux.git - Linux kernel stable tree
  5. libceph: fix OOB read in decode_watchers() via missing bounds check - kernel/git/stable/linux.git - Linux kernel stable tree
  6. libceph: fix OOB read in decode_watchers() via missing bounds check - kernel/git/stable/linux.git - Linux kernel stable tree
  7. libceph: fix OOB read in decode_watchers() via missing bounds check - kernel/git/stable/linux.git - Linux kernel stable tree
  8. libceph: fix OOB read in decode_watchers() via missing bounds check - kernel/git/stable/linux.git - Linux kernel stable tree
  9. libceph: fix OOB read in decode_watchers() via missing bounds check - kernel/git/stable/linux.git - Linux kernel stable tree
  10. libceph: fix OOB read in decode_watchers() via missing bounds check - kernel/git/stable/linux.git - Linux kernel stable tree

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


  • 29.08.2026 — Опубликована первая версия материала.
 
Назад
Верх Низ