
Технический анализ CVE-2025-37899: уязвимость use-after-free в модуле ksmbd SMB ядра Linux, позволяющая удалённое выполнение кода. Включает векторы атак, оценку воздействия и рекомендации по исправлению.
Обнаружена уязвимость типа use-after-free в модуле ksmbd ядра Linux, отвечающем за реализацию протокола SMB (Server Message Block) для обмена файлами по сети. Данная уязвимость, идентифицированная как CVE-2025-37899, потенциально позволяет удалённо выполнять код с повышенными привилегиями.
Находка была сделана исследователем Шоном Хиланом (Sean Heelan) с использованием модели o3 от OpenAI, что демонстрирует потенциал искусственного интеллекта в выявлении сложных уязвимостей. Уязвимость заключается в обработке команды logoff протокола SMB2/3 и может быть эксплуатирована при определённых условиях конкурентного доступа.
Уязвимость типа use-after-free возникает, когда один поток (thread) освобождает память, связанную с объектом sess->user, во время обработки команды . Если другой поток попытается обратиться к этому освобождённому объекту, возникает состояние гонки, которое может привести к повреждению памяти и, потенциально, к выполнению произвольного кода.
logoffУязвимый код находится в функции smb2_session_logoff модуля ksmbd. Отсутствие надлежащей синхронизации при доступе к объекту sess->user позволяет освободить память, когда она всё ещё используется другим потоком.
// Ejemplo simplificado del código vulnerable
void smb2_session_logoff(struct ksmbd_work *work) {
struct smb_session *sess = work->session;
if (sess->user) {
ksmbd_free_user(sess->user); // Liberación de la memoria
sess->user = NULL;
}
}
// Otro hilo podría acceder a sess->user aquí, después de la liberación
Удалённый злоумышленник может эксплуатировать эту уязвимость, отправляя серию команд SMB2/3, предназначенных для создания состояния гонки при доступе к объекту sess->user. Этого можно достичь, установив несколько SMB-соединений и управляя завершением сеанса таким образом, чтобы оно совпало с конкурентным доступом к объекту.
Успешная эксплуатация этой уязвимости может позволить атакующему:
Выполнить произвольный код в затронутой системе с привилегиями ядра. Получить несанкционированный доступ к конфиденциальной информации. Нарушить целостность и доступность системы.
Патчи
Рекомендуется как можно скорее применить исправления безопасности, предоставленные вашим дистрибутивом Linux. Крупнейшие дистрибутивы уже работают над выпуском обновлений.
// Después (arreglado)
void smb2_session_logoff(struct ksmbd_work *work) {
struct smb_session *sess = work->session;
spin_lock(&sess->user_lock); // Lock para proteger el acceso concurrente
if (sess->user) {
ksmbd_free_user(sess->user);
sess->user = NULL;
}
spin_unlock(&sess->user_lock); // Unlock después de la operación
}
А в функциях, которые обращаются к sess->user, также следует добавить защиту:
// Ejemplo de acceso seguro en otra función
void smb2_check_user_session(struct smb_session *sess) {
spin_lock(&sess->user_lock);
if (sess->user) {
// Acceso seguro a sess->user
// ...
}
spin_unlock(&sess->user_lock);
}
Если нет возможности немедленно применить исправления, рекомендуется:
Отключить модуль ksmbd, если он не требуется. Ограничить доступ к SMB-порту (445) с помощью межсетевых экранов. Внедрить дополнительные меры безопасности, такие как мониторинг SMB-трафика и обнаружение аномалий.
Ссылки
CVE-2025-37899: ссылка на CVE (когда станет доступна) Анонс об обнаружении: ссылка на оригинальную статью или публикацию Репозиторий ядра Linux: ссылка на затронутый исходный код
Благодарим Шона Хилана (Sean Heelan) за обнаружение уязвимости и сообщество специалистов по кибербезопасности за сотрудничество в её устранении.