CVE-2026-64598 в Linux Kernel: сбой SMB-клиента из-за некорректной обработки ошибок

CVE: CVE-2026-64598
Продукт: Linux Kernel
Дата публикации: 06.08.2026
Критичность: HIGH
CVSS: 8.8 (3.1)
EPSS: 0,28%; процентиль 19,76%
CISA KEV: нет подтверждения в каталоге CISA KEV

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


В клиенте SMB ядра Linux обнаружена ошибка в функции smb2_aead_req_alloc(). Некорректная обработка кода ошибки приводит к формированию невалидного указателя, что вызывает сбой ядра при последующем обращении к памяти. Материал описывает техническую природу дефекта, условия его проявления и способы проверки актуальности системы.

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


Риск связан с нарушением целостности памяти при обработке ошибок в криптографическом стеке SMB-клиента. Дефект приводит к падению ядра (Denial of Service) при попытке доступа к невалидному указателю.

  • Тип ошибки: Некорректная обработка кода ошибки. Переменная u32 используется для хранения отрицательного кода, что нарушает семантику ERR_PTR.
  • CVSS: 8.8 (HIGH). Вектор: CVSS:3.1/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H. Высокая оценка обусловлена сетевой векторией и полным воздействием на конфиденциальность, целостность и доступность.
  • Эксплуатация: В каталоге CISA KEV подтверждений активной эксплуатации не найдено. EPSS составляет 0,28% (процентиль 19,76%), что указывает на низкую вероятность эксплуатации в ближайшем будущем.
  • Статус: Уязвимость исправлена в стабильных ветках ядра. Патч доступен в официальных репозиториях Linux Kernel.

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


Уязвимость затрагивает Linux Kernel в версиях, содержащих исходный дефект, который был введён в коммите d08089f649a0 ("cifs: Change the I/O paths to use an iterator rather than a page list").

  • Компонент: fs/smb/client/smb2ops.c (SMB client).
  • Функция: smb2_aead_req_alloc().
  • Версии: Точный список уязвимых версий ядра не указан в предоставленных источниках. Патч был применён в стабильных ветках (stable tree) в июле 2026 года. Администраторам рекомендуется сверить версию ядра с релизными заметками дистрибутива.

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

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

Если версия ядра старше даты коммита исправления (июль 2026) и не содержит патча, система потенциально уязвима.

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


Причина уязвимости кроется в некорректной обработке возвращаемого значения функции cifs_get_num_sgs() в коде smb2_aead_req_alloc().

В исходном коде переменная *num_sgs имеет тип u32 (беззнаковое 32-битное целое). Функция cifs_get_num_sgs() может возвращать отрицательные коды ошибок (например, -ENOMEM или -EINVAL), которые в представлении u32 интерпретируются как очень большие положительные числа.

Код проверял ошибку через IS_ERR_VALUE((long)(int)*num_sgs). Однако при передаче *num_sgs в ERR_PTR(*num_sgs) происходит приведение u32 к указателю. Поскольку u32 не может корректно представить отрицательный код ошибки в формате ERR_PTR (который ожидает long или int), формируется невалидный указатель.

Вместо возврата корректного указателя на ошибку, функция возвращала мусор, который затем использовался как валидный указатель на структуру запроса. При последующем обращении к этому указателю ядро падает (crash) из-за нарушения целостности памяти.

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


Атака эксплуатирует логическую ошибку в обработке ошибок при подготовке криптографического запроса в SMB-клиенте.

  • Инициализация: Пользователь или процесс инициирует операцию чтения/записи на SMB-шаре, требующую шифрования (AEAD).
  • Вызов функции: Ядро вызывает smb2_aead_req_alloc() для выделения структуры запроса.
  • Ошибка в cifs_get_num_sgs: Функция cifs_get_num_sgs() возвращает отрицательный код ошибки (например, при нехватке памяти или некорректных параметрах).
  • Некорректное приведение: Значение сохраняется в u32 переменную *num_sgs. Отрицательное число становится большим положительным.
  • Формирование ERR_PTR: Код пытается вернуть ERR_PTR(*num_sgs). Из-за несовпадения типов формируется невалидный указатель.
  • Сбой: Вызывающая функция получает этот указатель, считает его валидным и пытается по нему обратиться. Ядро фиксирует сбой (kernel panic или oops) из-за доступа к недопустимой области памяти.

Атакующий может спровоцировать эту ситуацию, отправив специально сформированные SMB-запросы, которые приводят к ошибке в cifs_get_num_sgs(), например, через исчерпание ресурсов или некорректные параметры шифрования.

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


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

  • Сетевой доступ: Атакующий должен иметь сетевой доступ к системе, работающей с SMB-клиентом (AV:N).
  • Взаимодействие пользователя: Требуется, чтобы пользователь или процесс на целевой системе инициировал подключение к SMB-шару или операцию, требующую шифрования (UI:R). Это может быть автоматическое монтирование или ручное действие.
  • Наличие SMB-клиента: В ядре должна быть загружена и активна подсистема fs/smb/client.
  • Уязвимая версия ядра: Система должна работать на версии ядра, не содержащей патч 61f28012e5650c619223decdb7970e0d3162e949.
  • Способность вызвать ошибку: Атакующий должен иметь возможность повлиять на параметры SMB-запроса так, чтобы cifs_get_num_sgs() вернула ошибку. Это может быть связано с ограничением ресурсов или некорректной конфигурацией шифрования.

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


Сценарий атаки предполагает, что атакующий находится в той же сети, что и жертва, и имеет доступ к SMB-серверу.

  • Разведка: Атакующий определяет, что целевая система подключается к SMB-шарам с включенным шифрованием (SMB3).
  • Провокация: Атакующий отправляет на SMB-сервер запросы, которые приводят к ошибке в обработке на стороне клиента. Например, запрос с некорректным размером или параметрами, вызывающими ошибку в cifs_get_num_sgs().
  • Сбой: Клиентская система пытается обработать ответ, вызывает smb2_aead_req_alloc(), которая возвращает невалидный указатель. Ядро падает.
  • Результат: Система перезагружается или становится недоступной (Denial of Service). В некоторых случаях, если сбой происходит в критическом контексте, это может привести к утечке данных или повышению привилегий, но основной подтвержденный эффект — сбой.

Атакующий может повторять атаку, чтобы поддерживать систему в нерабочем состоянии.

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


В предоставленных источниках нет информации о публичных эксплойтах или PoC для CVE-2026-64598.

  • PoC: Не обнаружено.
  • Техническое описание: Доступно в коммитах исправления в репозитории Linux Kernel.
  • Подтвержденная эксплуатация: В каталоге CISA KEV уязвимость не числится, что означает отсутствие подтверждений массовой эксплуатации в дикой природе.
  • EPSS: 0,28% (процентиль 19,76%). Низкая вероятность эксплуатации в ближайшие 30 дней.

Отсутствие публичного эксплойта не гарантирует, что уязвимость не может быть эксплуатирована. Атакующие с глубокими знаниями архитектуры SMB-клиента могут разработать собственный эксплойт.

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


Специфичных IOC (Indicators of Compromise) для CVE-2026-64598 в источниках не указано. Однако можно использовать общие признаки аномального поведения SMB-клиента:

  • Сбои ядра: Записи в dmesg или системных журналах о kernel panic, oops или segfault в модуле smb или cifs.
  • Аномальные SMB-запросы: Мониторинг сетевого трафика на предмет некорректных SMB-запросов, вызывающих ошибки в клиенте.
  • Повторяющиеся перезагрузки: Если система регулярно перезагружается при попытке подключения к SMB-шарам.

Эти признаки неспецифичны и могут быть вызваны другими проблемами. Рекомендуется корреляция с другими событиями безопасности.

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


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

  • Мониторинг логов ядра: Отслеживайте записи в dmesg, /var/log/kern.log или journalctl на наличие ошибок, связанных с smb2_aead_req_alloc или cifs.
  • Сетевой мониторинг: Используйте IDS/IPS для детектирования аномальных SMB-запросов, которые могут приводить к ошибкам в клиенте.
  • Аудит конфигурации: Проверьте, какие SMB-шары подключены к системе и используется ли шифрование. Ограничьте доступ к SMB-шарам, если они не критичны.
  • Регулярное обновление: Убедитесь, что система получает обновления ядра от дистрибутива.

Команды для проверки логов:

Bash:
dmesg | grep -i "smb\|cifs\|aead"
journalctl -k | grep -i "smb\|cifs"

Если обнаружены повторяющиеся сбои, связанные с SMB, рекомендуется изолировать систему и провести расследование.

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


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

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

Затем сверьте версию с официальными релизными заметками вашего дистрибутива Linux. Патч 61f28012e5650c619223decdb7970e0d3162e949 был применён в стабильных ветках в июле 2026 года. Если ваша версия ядра старше этой даты и не содержит патча, система уязвима.

Для проверки наличия конкретного коммита в ядре (если вы используете исходники):

Bash:
git log --oneline | grep 61f28012e5650c619223decdb7970e0d3162e949

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

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


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

  • Обновление ядра: Используйте пакетный менеджер вашего дистрибутива для обновления ядра.
    • Debian/Ubuntu: sudo apt update && sudo apt upgrade linux-image-$(uname -r)
    • RHEL/CentOS: sudo dnf update kernel
    • Arch: sudo pacman -Syu linux
  • Перезагрузка: После обновления ядра требуется перезагрузка системы для применения изменений.
  • Проверка: После перезагрузки убедитесь, что новая версия ядра активна и содержит патч.

Не используйте cherry-pick отдельных коммитов, если только вы не являетесь разработчиком ядра. Дистрибутивы предоставляют интегрированные обновления, которые протестированы в связке с другими изменениями.

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


Пока обновление ядра не применено, можно использовать следующие временные меры:

  • Отключение SMB-клиента: Если SMB-шары не критичны, отключите подключение к ним. Это можно сделать через umount или отключение соответствующих сервисов.
  • Ограничение доступа: Настройте firewall, чтобы блокировать исходящие SMB-запросы (порт 445) к недоверенным серверам.
  • Изоляция: Изолируйте системы, которые активно используют SMB, от остальной сети, если они не могут быть обновлены немедленно.
  • Мониторинг: Усиленный мониторинг логов ядра на предмет сбоев, связанных с SMB.

Эти меры не устраняют уязвимость, но снижают вероятность ее эксплуатации.

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


Для проверки успешного применения исправления:

  • Проверка версии: Убедитесь, что активная версия ядра содержит патч.

    Bash:
    uname -r

    Сверьте версию с релизными заметками дистрибутива.
  • Проверка коммита (для исходников):

    Bash:
    git log --oneline | grep 61f28012e5650c619223decdb7970e0d3162e949
  • Функциональное тестирование: Проведите тестовые операции с SMB-шарами, чтобы убедиться, что они работают корректно и не вызывают сбоев.
  • Мониторинг: Наблюдайте за логами ядра в течение нескольких дней после обновления, чтобы убедиться в отсутствии новых сбоев.

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

Вывод​


CVE-2026-64598 представляет собой серьезную уязвимость в SMB-клиенте Linux Kernel, способную привести к падению ядра. Хотя вероятность активной эксплуатации в настоящее время низкая (EPSS 0,28%), риск Denial of Service остается значительным для систем, использующих SMB с шифрованием.

Администраторам рекомендуется:

  • Немедленно обновить ядро до последней стабильной версии.
  • Проверить, какие системы используют SMB-клиент и ограничить их доступ, если обновление невозможно.
  • Усилить мониторинг логов ядра на предмет сбоев, связанных с SMB.

Своевременное обновление и соблюдение принципа минимальных привилегий помогут снизить риск эксплуатации этой и подобных уязвимостей.

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


  1. NVD — CVE-2026-64598
  2. FIRST EPSS — CVE-2026-64598
  3. smb/client: Fix error code in smb2_aead_req_alloc() - kernel/git/stable/linux.git - Linux kernel stable tree
  4. smb/client: Fix error code in smb2_aead_req_alloc() - kernel/git/stable/linux.git - Linux kernel stable tree
  5. smb/client: Fix error code in smb2_aead_req_alloc() - kernel/git/stable/linux.git - Linux kernel stable tree
  6. smb/client: Fix error code in smb2_aead_req_alloc() - kernel/git/stable/linux.git - Linux kernel stable tree
  7. smb/client: Fix error code in smb2_aead_req_alloc() - kernel/git/stable/linux.git - Linux kernel stable tree
  8. CVEs — The Linux Kernel documentation

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


  • 11.08.2026 — Опубликована первая версия материала.
  • 27.08.2026 — Уточнены сведения об уязвимых версиях, оценке риска или исправлении.
 
Последнее редактирование:
Назад
Верх Низ