CVE: CVE-2026-80561
Продукт: Linux Kernel
Дата публикации: 26.08.2026
Критичность: CRITICAL
CVSS: 9.8 (3.1)
EPSS: 0,52%; процентиль 42,04%
CISA KEV: нет подтверждения в каталоге CISA KEV
Краткое описание
В подсистеме libceph ядра Linux обнаружена уязвимость, позволяющая злоумышленнику вызвать чтение вне границ буфера (slab-out-of-bounds read) при обработке ответов от Ceph OSD.
Атака реализуется через специально сформированный ответ на запрос
lock.get_info. Это может привести к утечке данных из памяти ядра или к падению системы. В статье описаны механика ошибки, условия эксплуатации и методы проверки исправления.Основные характеристики
Риск связан с чтением данных вне выделенной области памяти в ядре Linux при обработке ответов от Ceph OSD. Это может привести к утечке конфиденциальных данных или к отказу в обслуживании.
- Тип ошибки: Чтение вне границ буфера (Out-of-bounds Read) в функции
decode_locker().
- CVSS: 9.8 (CRITICAL). Вектор:
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H. Высокая оценка отражает возможность удаленной атаки без аутентификации.
- Условия атаки: Атакующий должен иметь доступ к сети Ceph и возможность отправлять сформированные ответы от имени OSD.
- Эксплуатация: Публичные данные о подтвержденной эксплуатации в реальных атаках отсутствуют.
- EPSS: 0,52% (процентиль 42,04%). Вероятность эксплуатации в ближайшие 30 дней оценивается как низкая.
Какие продукты и версии затронуты
Уязвимость затрагивает ядра Linux, содержащие подсистему libceph с функцией
decode_locker() в файле net/ceph/cls_lock_client.c. Ошибка была введена в коммите d4ed4a530562 (libceph: support for lock.lock_info) и исправлена в коммите 437b6551cfcc235eea1d735a874f9d421f555e17.Исправление включено в следующие ветки стабильных версий ядра (stable backports):
- 6.16.x (коммит
1ed45c8d96498725eb54f740172f9068d8673906)
- 6.15.x (коммит
3c3716dc06a34e4ca7f743f5fcfa07fbc5a11070)
- 6.12.x (коммит
51c8d238fe7236de627ab1a1433694552a904136)
- 6.11.x (коммит
6265103e78f0ee7e2518de9cf938b94bee9700a0)
- 6.6.x (коммит
d1bba38574d095f191557d397d9633f08cd966b1)
- 6.1.x (коммит
dbfd83f722a78446ec18a476ef7a38e52240b50a)
- 5.15.x (коммит
fa4aa86fff0c56799c2e3f51a88879053285f4a9)
Дистрибутивы, использующие ядра из указанных веток, должны выпустить соответствующие обновления. Точные номера пакетов зависят от конкретного дистрибутива.
Причина уязвимости
Причина уязвимости заключается в отсутствии проверки границ буфера при декодировании структур данных, полученных от Ceph OSD. Функция
decode_locker() в cls_lock_client.c обрабатывает ответ на запрос lock.get_info.В коде присутствовали три небезопасные операции:
- Вызов
ceph_decode_copy()для поляnameбез предварительной проверки, что позволяло прочитать 9 байт за границей буфера.
- Сдвиг указателя
*p += sizeof(struct ceph_timespec)без проверки, что позволяло атакующему вывести указатель за пределы валидной области.
- Чтение длины
len = ceph_decode_32(p)и сдвиг*p += lenбез ограничений. Значениеlen=0xffffffffпозволяло сместить указатель на гигабайты за пределы буфера.
Эти ошибки позволяли нарушить целостность памяти ядра при обработке специально сформированного ответа.
Как работает атака
Атака реализуется через подсистему libceph при взаимодействии с Ceph OSD. Клиент ядра отправляет запрос
lock.get_info (например, при получении эксклюзивной блокировки RBD). OSD возвращает ответ, который декодируется функцией decode_locker().Злоумышленник, контролирующий OSD, может сформировать ответ с некорректными полями:
- Установить
struct_len=0в заголовке, чтобы вызвать чтение за границей буфера при обработке имени локера.
- Сформировать данные так, чтобы сдвиг указателя на
ceph_timespecвышел за пределы валидной области.
- Передать значение
len=0xffffffffдля поля описания, что приведет к смещению указателя на огромную величину.
В результате ядро выполняет чтение памяти вне выделенного буфера (slab-out-of-bounds read). Это может привести к утечке данных из памяти ядра или к падению системы (kernel panic).
Условия успешной эксплуатации
Для успешной эксплуатации уязвимости атакующему необходимо выполнить следующие условия:
- Наличие доступа к сети Ceph и возможность устанавливать сессию с OSD.
- Контроль над одним или несколькими OSD в кластере Ceph (например, через компрометацию узла OSD или перехват трафика).
- Клиент ядра должен использовать подсистему libceph и инициировать запрос
lock.get_info(например, при работе с RBD).
- Отсутствие исправления CVE-2026-80561 в ядре клиента.
Атакующему не требуются дополнительные привилегии на стороне клиента, кроме возможности обмениваться данными с OSD.
Возможный сценарий атаки
Сценарий атаки начинается с компрометации или контроля над OSD в кластере Ceph. Атакующий ожидает, когда клиент ядра отправит запрос
lock.get_info (например, при попытке получить эксклюзивную блокировку RBD-образа).При получении запроса атакующий формирует ответ с некорректными полями:
- В поле
nameлокера указывается длина 0, что вызывает чтение за границей буфера.
- В поле
expirationформируется данные, выводящие указатель за пределы валидной области.
- В поле
descriptionуказывается длина0xffffffff, что приводит к смещению указателя на гигабайты.
Клиент ядра декодирует ответ и выполняет чтение памяти вне границ буфера. Это может привести к утечке данных из памяти ядра или к падению системы. Атакующий может использовать утеченные данные для дальнейшей эксплуатации или вызвать отказ в обслуживании.
Есть ли публичный эксплойт
Публичные данные о подтвержденной эксплуатации CVE-2026-80561 в реальных атаках отсутствуют. В каталоге CISA KEV уязвимость не числится. EPSS составляет 0,52%, что указывает на низкую вероятность эксплуатации в ближайшие 30 дней.
Техническое описание атаки и патч доступны в официальных источниках. Отсутствие публичного PoC не означает, что уязвимость не может быть эксплуатирована. Администраторам рекомендуется считать уязвимость критической и установить исправление.
Признаки эксплуатации
Специфичные индикаторы компрометации (IOC) для CVE-2026-80561 не опубликованы. Однако можно использовать следующие неспецифичные признаки для контроля:
- Аномальные запросы
lock.get_infoот OSD, которые приводят к ошибкам в ядре.
- Записи в журналах ядра (dmesg, syslog) о падении ядра или ошибках в подсистеме libceph.
- Необычная активность в сети Ceph, связанная с запросами блокировок RBD.
- Утечки памяти ядра, зафиксированные инструментами мониторинга (например, KASAN).
Эти признаки не являются уникальными для данной уязвимости и требуют дополнительной верификации.
Как обнаружить атаку
Для обнаружения атаки можно использовать следующие методы:
- Мониторинг журналов ядра на ошибки в подсистеме libceph (например, сообщения о падении ядра или ошибках декодирования).
- Анализ трафика Ceph на аномальные запросы
lock.get_infoи ответы с некорректными полями.
- Использование инструментов мониторинга памяти ядра (например, KASAN) для фиксации чтений вне границ буфера.
- Проверка логов OSD на аномальную активность, связанную с формированием ответов для клиентов.
Рекомендуется настроить алерты на ошибки в подсистеме libceph и аномальную активность в сети Ceph.
Как проверить свою версию
Для проверки версии ядра и наличия исправления используйте следующие команды:
Bash:
uname -r
uname -a
cat /proc/version
Проверьте, что версия ядра содержит коммит
437b6551cfcc235eea1d735a874f9d421f555e17 или более поздний. Для стабильных версий ядра убедитесь, что установлены обновления из соответствующих веток (6.16.x, 6.15.x, 6.12.x, 6.11.x, 6.6.x, 6.1.x, 5.15.x).Также можно проверить наличие патча в исходниках ядра:
Bash:
git log --oneline --all | grep 437b6551cfcc235eea1d735a874f9d421f555e17
Исправление
Единственным надежным способом устранения уязвимости является обновление ядра Linux до версии, содержащей исправление CVE-2026-80561.
- Обновите ядро до последней стабильной версии, содержащей коммит
437b6551cfcc235eea1d735a874f9d421f555e17.
- Для дистрибутивов используйте официальные обновления пакетов ядра.
- После обновления перезагрузите систему для применения нового ядра.
Не используйте временные обходные пути, так как они не устраняют риск чтения вне границ буфера.
Временные меры защиты
Временные меры для снижения риска до установки исправления:
- Ограничьте доступ к сети Ceph, разрешив соединение только с доверенными OSD.
- Отключите использование RBD с эксклюзивными блокировками, если это возможно.
- Усиление мониторинга трафика Ceph на аномальные запросы
lock.get_info.
- Изоляция узлов, использующих libceph, от недоверенных OSD.
Эти меры не устраняют уязвимость, но снижают вероятность успешной атаки.
Как проверить устранение уязвимости
Для проверки успешного применения исправления:
- Убедитесь, что версия ядра содержит коммит
437b6551cfcc235eea1d735a874f9d421f555e17.
- Проверьте логи ядра на отсутствие ошибок в подсистеме libceph после обновления.
- Проведите функциональное тестирование RBD с эксклюзивными блокировками, чтобы убедиться в корректной работе.
- Используйте инструменты мониторинга памяти (например, KASAN) для проверки отсутствия чтений вне границ буфера.
Если ошибки не фиксируются и версия ядра соответствует требованиям, исправление применено успешно.
Вывод
CVE-2026-80561 представляет критический риск для систем, использующих libceph для взаимодействия с Ceph. Уязвимость позволяет атакующему, контролирующему OSD, вызвать чтение вне границ буфера в ядре, что может привести к утечке данных или падению системы.
Администраторам необходимо срочно обновить ядро до версии, содержащей исправление. До обновления рекомендуется ограничить доступ к сети Ceph и усилить мониторинг. Публичные данные о подтвержденной эксплуатации отсутствуют, но высокая оценка CVSS требует немедленных действий.
Официальные источники
- NVD — CVE-2026-80561
- FIRST EPSS — CVE-2026-80561
- libceph: fix multiple unsafe decodes in decode_locker() - kernel/git/stable/linux.git - Linux kernel stable tree
- libceph: fix multiple unsafe decodes in decode_locker() - kernel/git/stable/linux.git - Linux kernel stable tree
- libceph: fix multiple unsafe decodes in decode_locker() - kernel/git/stable/linux.git - Linux kernel stable tree
- libceph: fix multiple unsafe decodes in decode_locker() - kernel/git/stable/linux.git - Linux kernel stable tree
- libceph: fix multiple unsafe decodes in decode_locker() - kernel/git/stable/linux.git - Linux kernel stable tree
- libceph: fix multiple unsafe decodes in decode_locker() - kernel/git/stable/linux.git - Linux kernel stable tree
- libceph: fix multiple unsafe decodes in decode_locker() - kernel/git/stable/linux.git - Linux kernel stable tree
- libceph: fix multiple unsafe decodes in decode_locker() - kernel/git/stable/linux.git - Linux kernel stable tree
История обновлений статьи
- 28.08.2026 — Опубликована первая версия материала.
