
È stata scoperta una vulnerabilità di tipo use-after-free nel modulo ksmbd del kernel di Linux, responsabile dell'implementazione del protocollo SMB (Server Message Block) per lo scambio di file in rete. Questa vulnerabilità, identificata come CVE-2025-37899, potrebbe consentire l'esecuzione remota di codice con privilegi elevati.
La scoperta è stata effettuata dal ricercatore Sean Heelan utilizzando il modello o3 di OpenAI, dimostrando il potenziale dell'intelligenza artificiale nell'identificazione di vulnerabilità complesse. La vulnerabilità risiede nella gestione del comando logoff di SMB2/3 e può essere sfruttata in determinate condizioni di concorrenza.
La vulnerabilità use-after-free si verifica quando un thread libera la memoria associata all'oggetto sess->user durante l'elaborazione del comando logoff. Se un altro thread tenta di accedere a questo oggetto liberato, si verifica una condizione di corsa che può portare alla corruzione della memoria e, potenzialmente, all'esecuzione di codice arbitrario.
Il codice vulnerabile si trova nella funzione smb2_session_logoff all'interno del modulo ksmbd. La mancanza di una sincronizzazione adeguata nell'accesso all'oggetto sess->user consente che la memoria venga liberata mentre è ancora in uso da un altro thread.
// 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
Un attaccante remoto potrebbe sfruttare questa vulnerabilità inviando una serie di comandi SMB2/3 progettati per creare una condizione di corsa nell'accesso all'oggetto sess->user. Ciò potrebbe essere ottenuto stabilendo più connessioni SMB e manipolando la chiusura della sessione in modo che coincida con l'accesso concorrente all'oggetto.
Lo sfruttamento riuscito di questa vulnerabilità potrebbe consentire a un attaccante di:
Eseguire codice arbitrario sul sistema interessato con privilegi del kernel. Ottenere accesso non autorizzato a informazioni sensibili. Compromettere l'integrità e la disponibilità del sistema.
Patch Si consiglia di applicare al più presto le patch di sicurezza fornite dalla propria distribuzione Linux. Le principali distribuzioni stanno già lavorando alla pubblicazione degli aggiornamenti.
// 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
}
E nelle funzioni che accedono a sess->user, anche l'accesso deve essere protetto:
// 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);
}
Nel caso non sia possibile applicare immediatamente le patch, si raccomanda di:
Disabilitare il modulo ksmbd se non necessario. Limitare l'accesso alla porta SMB (445) tramite firewall. Implementare misure di sicurezza aggiuntive, come il monitoraggio del traffico SMB e il rilevamento di anomalie. Riferimenti CVE-2025-37899: Link al CVE (quando disponibile) Annuncio della Scoperta: Link all'articolo o alla pubblicazione originale Repository del Kernel Linux: Link al codice sorgente interessato
Ringraziamento a Sean Heelan per la scoperta e alla community di cybersecurity per la collaborazione nella mitigazione di questa vulnerabilità.