Удалённая уязвимость в модуле Ksmbd ядра Linux, выявленная при помощи AI

В модуле ksmbd, предлагающем встроенную в ядро Linux реализацию файлового сервера на базе протокола SMB, выявлена уязвимость (CVE-2025-37899), потенциально позволяющая добиться выполнения своего кода на уровне ядра через отправку специально оформленных пакетов. Примечательно, что проблема была выявлена в ходе анализа кода AI-моделью OpenAI o3. Так как полный код модуля ksmbd превышает допустимый для модели размер контекста, проверка выполнялась поэтапно для кода с реализацией отдельных команд SMB, используя типовые запросы.

Уязвимость вызвана обращением к уже освобождённой памяти (use-after-free) в коде обработки SMB-команды “logoff”: структура sess->user использовалась в другом потоке, если в рамках другого соединения приходил запрос установки сеанса, привязываемый к освобождаемому сеансу. При обработке подобных запросов запускалась функция smb2_sess_setup, обращавшаяся к уже освобождённой структуре sess->user.

Уязвимость устранена в обновлениях 6.15-rc5, 6.14.6, 6.12.28, 6.6.90, 6.1.138. В ветке 5.15, в состав которой был принят модуль ksmbd, проблема не проявляется. Проследить за устранением уязвимости в дистрибутивах можно на следующих страницах: Debian, Ubuntu, Fedora, SUSE/openSUSE, RHEL, Arch.

Проблему выявил Шон Хилан (Sean Heelan), создатель платформы профилирования кода Prodfiler, специализирующийся на оптимизации и проведении аудита безопасности кода. Шон решил оценить насколько современные AI-модели готовы для проведения аудита безопасности и сделал вывод, что модель o3 значительно продвинулась в плане анализа и понимания структуры, логики и функциональности кода. Отмечается, что для определения уязвимости модель смогла построить цепочку рассуждений, учитывающую возможность параллельных подключений к серверу и использование структур данных в различных ситуациях.

В итоге, модель определила проблемное место в коде, в котором освобождаемый объект, оставался доступен в другом потоке. При этом модель нашла проблему сама лишь на основе общего запроса, просившего проверить наличие уязвимостей в коде, сделав акцент на проверке висящих указателей и обращений к памяти после её освобождения, исключив при этом ложные срабатывания и гипотетические проблемы.

Перед поиском новых уявзимостей, Шон протестировал разные модели на предмет определения уязвимости CVE-2025-37778 в ksmbd, ранее выявленной им в ходе ручного аудита и устранённой в обновлении ядра 6.15-rc3. Модель o3 успешно справилась с заданием и показала наиболее близкий к ручному аудиту результат, после чего Шон переключился на эксперименты по поиску ранее неизвестных уявимостей.

Release. Ссылка here.