
CVE-2025-37899 का तकनीकी विश्लेषण: Linux kernel के ksmbd SMB मॉड्यूल में use-after-free दोष जो remote code execution को सक्षम करता है। इसमें हमले के वेक्टर, प्रभाव आकलन, और पैचिंग मार्गदर्शन शामिल है।
लिनक्स कर्नेल के ksmbd मॉड्यूल में एक use-after-free प्रकार की भेद्यता खोजी गई है, जो नेटवर्क पर फ़ाइल साझाकरण के लिए SMB (सर्वर मैसेज ब्लॉक) प्रोटोकॉल के कार्यान्वयन के लिए जिम्मेदार है। यह भेद्यता, जिसे CVE-2025-37899 के रूप में पहचाना गया है, उच्च विशेषाधिकारों के साथ दूरस्थ कोड निष्पादन की अनुमति दे सकती है।
यह खोज शोधकर्ता सीन हीलन (Sean Heelan) द्वारा OpenAI के o3 मॉडल का उपयोग करके की गई, जो जटिल भेद्यताओं की पहचान में कृत्रिम बुद्धिमत्ता की क्षमता को दर्शाता है। यह भेद्यता SMB2/3 के logoff कमांड के प्रबंधन में निहित है और कुछ समवर्ती स्थितियों में इसका शोषण किया जा सकता है।
use-after-free भेद्यता तब होती है जब एक थ्रेड logoff कमांड के प्रसंस्करण के दौरान sess->user ऑब्जेक्ट से संबद्ध मेमोरी को मुक्त करता है। यदि कोई अन्य थ्रेड इस मुक्त किए गए ऑब्जेक्ट तक पहुँचने का प्रयास करता है, तो एक रेस कंडीशन उत्पन्न होती है जो मेमोरी भ्रष्टाचार और संभावित रूप से मनमाना कोड निष्पादन का कारण बन सकती है।
कमजोर कोड ksmbd मॉड्यूल के अंदर smb2_session_logoff फ़ंक्शन में स्थित है। 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
एक दूरस्थ हमलावर sess->user ऑब्जेक्ट तक पहुँच में एक रेस कंडीशन बनाने के लिए डिज़ाइन किए गए SMB2/3 कमांड की एक श्रृंखला भेजकर इस भेद्यता का शोषण कर सकता है। यह कई SMB कनेक्शन स्थापित करके और सत्र के समापन में हेरफेर करके प्राप्त किया जा सकता है ताकि यह ऑब्जेक्ट के समवर्ती उपयोग के साथ मेल खाए।
इस भेद्यता का सफल शोषण एक हमलावर को निम्नलिखित की अनुमति दे सकता है:
पैच
अनुशंसा की जाती है कि आप अपने लिनक्स वितरण द्वारा प्रदान किए गए सुरक्षा पैच को जल्द से जल्द लागू करें। प्रमुख वितरण पहले से ही अपडेट जारी करने पर काम कर रहे हैं।
// 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);
}
यदि तुरंत पैच लागू नहीं किए जा सकते हैं, तो अनुशंसा की जाती है:
खोज के लिए सीन हीलन (Sean Heelan) और इस भेद्यता के शमन में सहयोग के लिए साइबर सुरक्षा समुदाय को धन्यवाद।