CVE-2026-80558 в Linux Kernel: OOB-чтение в libceph, уязвимые версии и защита

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

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


Уязвимость в модуле libceph ядра Linux позволяет злоумышленнику, контролирующему Ceph-монитор или OSD, вызвать чтение вне границ памяти. Это происходит из-за отсутствия проверки индексов OSD в поле primary_temp повреждённой карты osdmap. Проблема затрагивает узлы, работающие с Ceph, и устранена патчем, добавляющим валидацию индексов перед их использованием в расчёте целевого OSD.

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


Риск связан с нарушением целостности данных, получаемых из внешней Ceph-инфраструктуры, что приводит к невалидному обращению к памяти ядра. Успешная эксплуатация требует контроля над источником данных osdmap.

  • Тип ошибки: Out-of-bounds Read. Индекс, полученный из внешнего источника, не проверяется на валидность перед использованием как указателя в массиве.
  • CVSS: 9.8 (CRITICAL). Вектор: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H. Высокая оценка отражает сетевой вектор атаки и отсутствие необходимости в привилегиях, хотя практическая реализация требует специфической инфраструктуры.
  • Условия атаки: Атакующий должен иметь возможность отправлять сформированные osdmap-сообщения узлу Linux, использующему libceph.
  • Эксплуатация: Публичные данные о подтверждённой эксплуатации в реальных атаках отсутствуют. EPSS составляет 0,52% (процентиль 42,04%), что указывает на низкую вероятность эксплуатации в ближайшем будущем.

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


Уязвимость затрагивает ядра Linux, содержащие модуль libceph и поддержку маппингов primary_temp.

  • Компонент: net/ceph/osdmap.c (функция get_temp_osds).
  • Уязвимые версии: Все версии ядра, в которых присутствует код, добавленный коммитом 5e8d4d36bf23 ("libceph: add support for primary_temp mappings"), и не содержащие исправления.
  • Исправленные версии: Патч распространён в ветках stable. Точные номера версий зависят от дистрибутива. Рекомендуется проверить наличие коммита 3660b98d1204b419f6a77e9a295f148dcf38d042 в истории ядра.

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


Причина уязвимости кроется в недостаточной валидации данных, полученных из Ceph-инфраструктуры. Функция get_temp_osds() в файле net/ceph/osdmap.c извлекает индекс OSD из структуры primary_temp карты osdmap.

В отличие от других полей (pg_temp, pg_upmap), индекс из primary_temp не проверялся на валидность. Если в osdmap содержался индекс, превышающий max_osd или меньший CEPH_HOMELESS_OSD (-1), он использовался без контроля. Это приводило к обращению к массивам osd_state, osd_weight и osd_addr вне их границ, так как эти массивы имеют размер max_osd.

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


Атакующий, контролирующий Ceph-монитор или OSD, отправляет узлу Linux сформированный osdmap. В поле primary_temp этого osdmap содержится невалидный индекс OSD (например, значение, превышающее количество реальных OSD в кластере).

При обработке этого osdmap функция calc_target() вызывает ceph_pg_to_up_acting_osds(), которая, в свою очередь, вызывает get_temp_osds(). Из-за отсутствия проверки, невалидный индекс сохраняется в temp->primary.

Последующее чтение значений из массивов состояния OSD по этому индексу приводит к out-of-bounds read. Это может вызвать сбой ядра (panic) или утечку данных из памяти ядра.

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


Для успешной эксплуатации уязвимости необходимо выполнение следующих условий:

  • Узел Linux подключён к Ceph-кластеру и использует модуль libceph.
  • Атакующий имеет возможность отправлять osdmap-сообщения на узел (контроль над монитором или подмена трафика).
  • В ядре отсутствует патч, добавляющий проверку валидности индексов в get_temp_osds().
  • В osdmap специально сформировано поле primary_temp с невалидным значением.

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


Сценарий атаки начинается с компрометации или подмены Ceph-монитора. Атакующий формирует osdmap, в котором поле primary_temp содержит индекс, не существующий в кластере (например, 999, если в кластере 10 OSD).

Этот osdmap отправляется на целевой узел. Ядро Linux обрабатывает сообщение и вызывает функцию get_temp_osds(). Невалидный индекс проходит без проверки и используется для доступа к массивам osd_state и osd_weight.

Происходит чтение памяти за пределами выделенного массива. В худшем случае это приводит к падению ядра (Denial of Service), в лучшем — к утечке данных из памяти ядра, которые могут быть использованы для дальнейшей эксплуатации.

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


На момент публикации данных публичный эксплойт (PoC) для CVE-2026-80558 не подтверждён. В источниках представлены только патчи ядра и описание уязвимости.

Отсутствие публичного эксплойта не означает, что атака невозможна, но снижает вероятность массового использования в краткосрочной перспективе. EPSS 0,52% подтверждает низкую оценку вероятности эксплуатации.

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


Специфичные индикаторы компрометации (IOC) для этой уязвимости не опубликованы. Общие точки контроля, которые могут указывать на попытку атаки, включают:

  • Записи в журналах ядра (dmesg) о сбое или предупреждениях, связанных с libceph или osdmap.
  • Необычная активность в Ceph-мониторах: отправка osdmap с аномальными значениями индексов OSD.
  • Падения ядра (kernel panic) на узлах, использующих Ceph, без очевидной причины.

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


Обнаружение атаки затруднено из-за отсутствия специфичных сигнатур. Рекомендуется:

  • Мониторинг журналов ядра на предмет ошибок, связанных с libceph.
  • Анализ логов Ceph-мониторов на предмет аномальных osdmap-обновлений.
  • Использование систем обнаружения аномалий (IDS) для контроля трафика между узлами Linux и Ceph-инфраструктурой.
  • Проверка целостности ядра и наличие патчей.

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


Для проверки версии ядра и наличия уязвимости используйте следующие команды:

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

Затем сверьте версию ядра с списком исправленных версий в вашей дистрибуции. Если вы используете исходники, проверьте наличие коммита 3660b98d1204b419f6a77e9a295f148dcf38d042 в истории: git log --all --grep="libceph: Avoid using invalid osd indices".

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


Единственный надёжный способ устранения уязвимости — обновление ядра до версии, содержащей патч.

  • Обновите ядро до последней стабильной версии, поддерживаемой вашим дистрибутивом.
  • Убедитесь, что в ядре присутствует коммит 3660b98d1204b419f6a77e9a295f148dcf38d042 или его эквивалент в вашей ветке.
  • Перезагрузите систему после обновления ядра, чтобы загрузить новый модуль.

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


Пока обновление не установлено, можно снизить риск:

  • Ограничьте доступ к Ceph-мониторам и OSD только доверенным узлам.
  • Используйте сетевые правила (firewall) для контроля трафика между узлами Linux и Ceph-инфраструктурой.
  • Рассмотрите возможность отключения использования libceph на критических узлах, если это допустимо в вашей архитектуре.
  • Усиленный мониторинг журналов ядра и Ceph-инфраструктуры.

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


После обновления ядра проверьте, что патч применён:

Bash:
grep -r "ceph_osd_is_down" /lib/modules/$(uname -r)/

Также убедитесь, что версия ядра соответствует исправленной: uname -r. Проверьте логи загрузки ядра на предмет ошибок при инициализации libceph.

Вывод​


CVE-2026-80558 представляет собой серьёзную уязвимость в модуле libceph, позволяющую вызвать out-of-bounds read через подделку osdmap. Хотя практическая эксплуатация требует контроля над Ceph-инфраструктурой, критический уровень CVSS и потенциальный риск для систем, использующих Ceph, делают обновление ядра приоритетной задачей. Администраторам следует проверить наличие патча и обновить уязвимые узлы.

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


  1. NVD — CVE-2026-80558
  2. FIRST EPSS — CVE-2026-80558
  3. libceph: Avoid using invalid osd indices from primary_temp - kernel/git/stable/linux.git - Linux kernel stable tree
  4. libceph: Avoid using invalid osd indices from primary_temp - kernel/git/stable/linux.git - Linux kernel stable tree
  5. libceph: Avoid using invalid osd indices from primary_temp - kernel/git/stable/linux.git - Linux kernel stable tree
  6. libceph: Avoid using invalid osd indices from primary_temp - kernel/git/stable/linux.git - Linux kernel stable tree
  7. libceph: Avoid using invalid osd indices from primary_temp - kernel/git/stable/linux.git - Linux kernel stable tree
  8. libceph: Avoid using invalid osd indices from primary_temp - kernel/git/stable/linux.git - Linux kernel stable tree
  9. libceph: Avoid using invalid osd indices from primary_temp - kernel/git/stable/linux.git - Linux kernel stable tree
  10. libceph: Avoid using invalid osd indices from primary_temp - kernel/git/stable/linux.git - Linux kernel stable tree

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


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