
radareorg radare2 v.0.9.7 से v.5.8.6 तक के संस्करणों में एक समस्या, जो v.5.8.8 में ठीक की गई है, एक स्थानीय हमलावर को grub_sfs_read_extent फ़ंक्शन के माध्यम से सेवा से वंचित (denial of service) करने की अनुमति देती है।
Sherlock Fang, Vlad Tronciu, Ayam Babu
radareorg radare2 के v.0.9.7 से v.5.8.6 तक के संस्करणों में एक समस्या है, जिसे v.5.8.8 में ठीक किया गया है, जो एक स्थानीय हमलावर को grub_sfs_read_extent फ़ंक्शन के माध्यम से सेवा से वंचित (denial of service) करने की अनुमति देती है।
एक पेलोड तैयार करना जिससे “treeblock = grub_malloc(data->blocksize);” मेमोरी में NULL की ओर इशारा करता है, ताकि जब “treeblock” का मान “tree = (struct grub_sfs_btree *) treeblock;” को सौंपा जाता है, “treeblock” भी NULL की ओर इशारा करता है। शोषण की सीमा विशिष्ट संदर्भों पर निर्भर करती है, लेकिन इस प्रकार की null pointer dereference भेद्यता प्रोग्राम में सेवा से वंचित (denial of service) की स्थिति उत्पन्न करेगी, जो समग्र प्रोग्राम प्रदर्शन को प्रभावित करती है।
grub_sfs_read_extent फ़ंक्शन के अंदर tree_block की स्थिति की जाँच की कमी के कारण एक सुरक्षा भेद्यता मौजूद है। इसके बाद का कोड tree_block का उपयोग यह सत्यापित किए बिना करता है कि यह एक मान्य मेमोरी आवंटन की ओर इशारा करता है। जब tree को treeblock का मान struct grub_sfs_btree* में डालकर सौंपा जाता है और फिर grub_disk_read कॉल में उपयोग किया जाता है, तो यह NULL पॉइंटर के डीरेफरेंस की ओर ले जाएगा। C में NULL पॉइंटर को डीरेफरेंस करना अपरिभाषित व्यवहार है और इसके परिणामस्वरूप आमतौर पर segmentation fault या access violation होता है, जिससे प्रोग्राम क्रैश हो जाता है।
हमने नीचे दिखाए अनुसार grub_malloc के आवंटन की स्थिति की जाँच जोड़कर भेद्यता को ठीक किया।