
CVE-2024-9680 का शैक्षणिक विश्लेषण, जो Firefox के CSS Animation Timeline में एक use-after-free भेद्यता है, जिसमें विस्तृत शोषण तंत्र और अवधारणात्मक कोड उदाहरण शामिल हैं।
एक हमलावर एनिमेशन टाइमलाइन में उपयोग-पश्चात-मुक्त (use-after-free) का शोषण करके सामग्री प्रक्रिया में कोड निष्पादन प्राप्त करने में सक्षम था। हमें इस कमजोरी के जंगल में शोषण किए जाने की रिपोर्ट मिली है। यह कमजोरी Firefox < 131.0.2, Firefox ESR < 128.3.1, Firefox ESR < 115.16.1, Thunderbird < 131.0.1, Thunderbird < 128.3.1, और Thunderbird < 115.16.0 को प्रभावित करती है।
श्रेय: Fireship
एक "उपयोग-पश्चात-मुक्त" कमजोरी एक प्रकार की मेमोरी भ्रष्टाचार समस्या है जो तब होती है जब कोई प्रोग्राम मेमोरी को मुक्त (डीलोकेट) करने के बाद भी उस मेमोरी के लिए पॉइंटर (या संदर्भ) का उपयोग जारी रखता है। यह एक खतरनाक स्थिति है क्योंकि प्रश्नगत मेमोरी अब प्रोग्राम के स्वामित्व में नहीं है, जिसका अर्थ है कि इसे किसी अन्य उद्देश्य के लिए पुन: असाइन किया जा सकता है या प्रोग्राम के अन्य भागों द्वारा बदला जा सकता है। यदि प्रोग्राम इस मुक्त मेमोरी का उपयोग जारी रखता है, तो यह अप्रत्याशित व्यवहार, जिसमें क्रैश, डेटा भ्रष्टाचार, या हमलावरों द्वारा शोषण शामिल है, का कारण बन सकता है।
मेमोरी आवंटन और डीलोकेशन:
malloc() या new जैसे फ़ंक्शन के साथ) और जब वे इसका उपयोग पूरा कर लेते हैं तो इसे मुक्त कर देते हैं (जैसे, free() या delete के साथ)।समस्या:
परिणाम:
एक सरलीकृत उदाहरण पर विचार करें:
#include <stdlib.h>
#include <stdio.h>
int main() {
int *ptr = (int *)malloc(sizeof(int)); // Allocate memory
*ptr = 42; // Use the allocated memory
free(ptr); // Free the memory
// Use the pointer after freeing the memory (use-after-free)
printf("%d\n", *ptr); // Undefined behavior, potential crash or exploit
return 0;
}
उदाहरण में:
free(ptr) के साथ मेमोरी मुक्त की जाती है।ptr का अभी भी उपयोग किया जा रहा है (printf() स्टेटमेंट में डीरेफरेंस किया गया), जो अपरिभाषित व्यवहार की ओर ले जाता है। मेमोरी पुन: असाइन की जा सकती है, और इसे एक्सेस करने से क्रैश हो सकता है या, अधिक खतरनाक परिदृश्य में, प्रोग्राम का शोषण हो सकता है।हमलावर मेमोरी प्रबंधन में सावधानीपूर्वक हेरफेर करके उपयोग-पश्चात-मुक्त कमजोरियों का शोषण कर सकते हैं। यहाँ बताया गया है कि एक हमलावर इस कमजोरी का संभावित रूप से कैसे उपयोग कर सकता है:
उपयोग-पश्चात-मुक्त कमजोरियों को रोकने के लिए, डेवलपर्स यह कर सकते हैं:
NULL पर सेट करें: इससे यह सुनिश्चित होता है कि यदि गलती से मुक्त करने के बाद किसी पॉइंटर का उपयोग किया जाता है, तो प्रोग्राम अधिक पूर्वानुमानित रूप से क्रैश होगा या नियंत्रित तरीके से व्यवहार करेगा, बजाय अमान्य मेमोरी तक पहुँचने के।std::shared_ptr, std::unique_ptr) का उपयोग करने से स्वचालित रूप से मेमोरी प्रबंधन में मदद मिल सकती है, जिससे मैन्युअल मेमोरी कुप्रबंधन की संभावना कम हो जाती है।इस विशिष्ट मामले में, CSS एनिमेशन टाइमलाइन—जो वेब पेज में एनिमेशन के समय को नियंत्रित करने के लिए जिम्मेदार है—अन्य ब्राउज़र घटकों के साथ इस तरह से बातचीत कर रही थी कि एनिमेशन की टाइमलाइन से बंधी एक वस्तु मुक्त हो गई, लेकिन ब्राउज़र ने इसका उपयोग जारी रखा।