CVE-2026-89990 в Linux Kernel: use-after-free в Ceph MDS client

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

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


В ядре Linux обнаружен use-after-free в модуле Ceph MDS client. Функция ceph_mds_check_access() читает массив авторизаций без мьютекса, а одновременная обработка сессии OPEN освобождает этот массив. Результатом становится обращение к освобождённой памяти и падение ядра с Oops.

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


Риск связан с гонкой потоков в Ceph MDS client: один поток читает массив авторизаций, другой освобождает его во время обработки сессии OPEN.

  • Тип ошибки: use-after-free в ceph_mds_check_access()
  • CVSS v3.1: CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H (9.8)
  • Вектор атаки: удалённый, без привилегий и взаимодействия с пользователем
  • Подтверждённый эффект: падение ядра с Oops при воспроизведении гонки
  • EPSS: 0,61% (процентиль 47,75%)

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


Затронуты системы Linux Kernel с включённым Ceph MDS client.

  • Ядра Linux версии 6.18.x до применения исправления a61c6ae1dae2611082b831b4aaa780878099c012
  • Дистрибутивы, использующие ядро 6.18.x и не обновлённые до стабильных релизов с патчем
  • Системы с подключёнными Ceph-хранилищами через MDS-клиент

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


Функция ceph_mds_check_access() обходит массив mdsc->s_cap_auths без захвата мьютекса mdsc->mutex. При обработке сессии OPEN другой поток заменяет этот массив и освобождает предыдущий.

Если второй поток завершает освобождение памяти до завершения обхода, первый продолжает читать уже невалидные указатели. Это классический use-after-free: данные в памяти могут быть перезаписаны или освобождены, но переменная s_cap_auths всё ещё указывает на неё.

Исправление добавляет вызовы mutex_lock(&mdsc->mutex) и mutex_unlock(&mdsc->mutex) вокруг цикла обхода массива авторизаций в ceph_mds_check_access().

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


Атака строится на гонке между двумя потоками ядра.

Первый поток выполняет файловую операцию, которая вызывает do_sys_openat2do_filp_openpath_openatceph_atomic_openceph_mds_check_access. Внутри этой функции код читает массив авторизаций Ceph MDS.

Второй поток обрабатывает сессию OPEN и под мьютексом заменяет mdsc->s_cap_auths, освобождая старый массив. Если первый поток успел начать обход, но не захватил мьютекс, он читает уже освобождённую память.

Результат: обращение к недопустимому виртуальному адресу, Oops в ядре и потеря работоспособности процесса или системы.

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


Для воспроизведения нужен доступ к файловой системе Ceph MDS client на хосте с уязвимым ядром.

  • Включённый модуль Ceph MDS client (ceph)
  • Ядро версии 6.18.x без патча a61c6ae1dae2611082b831b4aaa780878099c012
  • Возможность инициировать файловые операции, проходящие через ceph_mds_check_access()
  • Одновременная обработка сессии OPEN, вызывающая замену массива авторизаций

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


Сценарий начинается с обычного открытия файла в Ceph-томе.

Процесс выполняет системный вызов openat, который проходит через ядро и попадает в код Ceph MDS client. Функция ceph_mds_check_access() проверяет права доступа, обходя массив авторизаций.

В этот момент другой поток обрабатывает сессию OPEN и освобождает старый массив. Ядро не блокирует доступ к памяти во время чтения, поэтому процесс продолжает работу с освобождённым объектом.

Память может содержать случайные данные или быть уже переиспользованной. Чтение приводит к падению ядра с сообщением Oops: 0000000096000004 [#1] SMP.

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


В предоставленных источниках есть подтверждённый технический пример падения ядра и полный стек вызовов.

  • PoC: в описании CVE приведён сценарий воспроизведения с Oops, но отдельного готового эксплойта или скрипта не указано
  • Техническое описание: доступно: функция ceph_mds_check_access(), массив s_cap_auths, мьютекс mdsc->mutex, вызовы path_openat и do_sys_openat2
  • Подтверждённая эксплуатация: в источниках нет данных о реальных атаках или массовом использовании; есть только воспроизведение падения ядра

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


Специфичных IOC для этой уязвимости не подтверждено.

Неспецифичные признаки, которые можно проверить:

  • Падения ядра с сообщением Oops в логах
  • Стек вызовов, содержащий ceph_mds_check_access, ceph_atomic_open, path_openat, do_filp_open, do_sys_openat2
  • Внезапное завершение процессов, работающих с Ceph-томами
  • Рост количества ошибок в /var/log/kern.log или dmesg после операций с файлами

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


Для обнаружения нужно анализировать логи ядра и системные журналы.

  • Проверить наличие строк Oops: 0000000096000004 [#1] SMP в dmesg или /var/log/kern.log
  • Найти стек вызовов с функциями ceph_mds_check_access+0xd4/0x550 и ceph_atomic_open+0x138/0xbe8
  • Отслеживать ошибки при открытии файлов в Ceph-томах
  • Проверить наличие процессов, завершившихся с кодом 137 или SIGKILL после операций с файлами

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


Проверка версии ядра:

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

Если вывод показывает версию 6.18.x, нужно проверить наличие патча a61c6ae1dae2611082b831b4aaa780878099c012 в ядре.

Bash:
git log --oneline | grep a61c6ae1dae2611082b831b4aaa780878099c012

Если команда не найдена, система уязвима.

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


Обновление ядра до версии с патчем a61c6ae1dae2611082b831b4aaa780878099c012.

  • Для дистрибутивов: установить пакет ядра от поставщика, содержащий исправление
  • Для кастомных сборок: применить патч a61c6ae1dae2611082b831b4aaa780878099c012 и пересобрать ядро
  • После обновления перезагрузить систему
  • Проверить версию ядра командой uname -r

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


Временные меры до обновления:

  • Ограничить количество одновременных операций с Ceph-томами
  • Отключить автоматическое обновление сессий MDS, если это возможно в конфигурации Ceph
  • Мониторинг логов ядра на наличие Oops со стеком ceph_mds_check_access
  • Перенос критичных рабочих процессов на системы с обновлённым ядром

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


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

Bash:
git log --oneline | grep a61c6ae1dae2611082b831b4aaa780878099c012
uname -r
dmesg | grep -i ceph_mds_check_access

Отсутствие новых Oops в логах после обновления подтверждает устранение уязвимости.

Если патч не найден, нужно повторить обновление или проверить источник пакетов ядра.

Вывод​


Уязвимость CVE-2026-89990 требует срочного обновления систем с Ceph MDS client. Падение ядра может привести к потере данных и нарушению работоспособности сервисов.

Обновление до версии ядра с патчем a61c6ae1dae2611082b831b4aaa780878099c012 устраняет проблему. До обновления рекомендуется ограничить нагрузку на Ceph-томы и мониторить логи ядра.

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


  1. NVD — CVE-2026-89990
  2. FIRST EPSS — CVE-2026-89990
  3. ceph: lock mutex in ceph_mds_check_access() - kernel/git/stable/linux.git - Linux kernel stable tree
  4. ceph: lock mutex in ceph_mds_check_access() - kernel/git/stable/linux.git - Linux kernel stable tree
  5. ceph: lock mutex in ceph_mds_check_access() - kernel/git/stable/linux.git - Linux kernel stable tree
  6. ceph: lock mutex in ceph_mds_check_access() - kernel/git/stable/linux.git - Linux kernel stable tree
  7. CVEs — The Linux Kernel documentation

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


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