В модуле ksmbd, включающем встроенную в ядро Linux реализацию файлового сервера на базе протокола SMB, выявлена критическая уязвимость, позволяющая удалённо добиться выполнения своего кода с правами ядра. Атака может быть проведена без аутентификации, достаточно чтобы на системе был активирован модуль ksmbd. Проблема проявляется начиная с ядра 5.15, выпущенного в ноябре 2021 года, и без лишней огласки устранена в обновлениях 5.15.61, 5.18.18 и 5.19.2, сформированных в августе 2022 года. Так как CVE-идентификатор проблеме ещё не присвоен, точной информации об устранении проблемы в дистрибутивах ещё нет.
Детали об эксплуатации уязвимости пока не раскрываются, известно только то, что уязвимость вызвана обращением к уже освобождённой области памяти (Use-After-Free) из-за отсутствия проверки существования объекта перед выполнением с ним операций. Проблема связана с тем, что в функции smb2_tree_disconnect() освобождалась память, выделанная под структуру ksmbd_tree_connect, но после этого ещё оставался указатель, используемый при обработке определённых внешних запросов, содержащих команды SMB2_TREE_DISCONNECT.
Кроме упомянутой уязвимости в ksmbd также исправлены 4 менее опасные проблемы:
- ZDI-22-1688 – удалённое выполнение кода с правами ядра из-за отсутствия в коде обработки атрибутов файлов проверки фактического размера внешних данных перед копированием в выделенный буфер. Опасность уязвимости сглаживает то, что атака может быть осуществлена только аутентифицированным пользователем.
- ZDI-22-1691 – удалённая утечка информации из памяти ядра из-за некорректной проверки входных параметров в обработчике команды SMB2_WRITE (атака может быть осуществлена только аутентифицированным пользователем).
- ZDI-22-1687 – удалённый вызов отказа в обслуживании через исчерпание доступной в системе памяти из-за некорректного высвобождения ресурсов в обработчике команды SMB2_NEGOTIATE (атака может быть проведена без аутентификации).
- ZDI-22-1689 – удалённый вызов краха ядра из-за отсутствия должной проверки параметров команды SMB2_TREE_CONNECT, приводящей к чтению из области вне буфера (атака может быть осуществлена только аутентифицированным пользователем).
Поддержка обеспечения работы SMB-сервера при помощи модуля ksmbd присутствует в пакете Samba, начиная с выпуска 4.16.0. В отличие от SMB-сервера, работающего в пространстве пользователя, ksmbd более эффективен с точки зрения производительности, потребления памяти и интеграции с расширенными возможностями ядра. Ksmbd преподносится как высокопроизводительное и готовое для применения на встраиваемых устройствах расширение к Samba, при необходимости интегрируемое с инструментами и библиотеками Samba. Авторами кода ksmbd являются Namjae Jeon из компании Samsung и Hyunchul Lee из LG, а сопровождением в составе ядра занимается Стив Френч (Steve French) из компании Microsoft, мэйнтейнер подсистем CIFS/SMB2/SMB3 в ядре Linux и давний участник команды разработчиков Samba, внёсший значительный вклад в реализацию поддержки протоколов SMB/CIFS в Samba и Linux.