
Reproducer PoC FreeBSD dhclient द्वारा DHCP विकल्प 119 को पार्स करते समय heap-based buffer overflow भेद्यता (CVE-2020-7461) के लिए
लेखक: Moshe Kol, Shlomi Oberman
FreeBSD dhclient में हीप-आधारित बफर ओवरफ्लो भेद्यता का पुनरुत्पादक PoC जब DHCP विकल्प 119 (CVE-2020-7461) का पार्स किया जाता है।
समस्या फ़ंक्शन find_search_domain_name_len में है जो फ़ाइल sbin/dhclient/options.c में स्थित है।
यह फ़ंक्शन expand_domain_search द्वारा कॉल किया जाता है जब सर्वर से DHCP विकल्प 119 (डोमेन खोज, RFC 3397) प्रदान किया जाता है।
जब एक संपीड़न योजना का उपयोग किया जाता है, तो फ़ंक्शन find_search_domain_name_len को संकेतित स्थान से शुरू करके पुनरावर्ती रूप से कॉल किया जाता है, लेकिन पुनरावर्ती कॉल के रिटर्न मान की जाँच करने में विफल रहता है। यदि पुनरावर्ती कॉल विफल हो जाती है, तो -1 का रिटर्न मान उपयोग किया जाता है, जिसे केवल संचयी लंबाई चर में जोड़ दिया जाता है।
यहाँ बगी कोड है (पंक्तियाँ 299-301, options.c, अंतिम कमिट 70066b9):
299: pointed_len = find_search_domain_name_len(option,
300: &pointer);
301: domain_name_len += pointed_len;
बाद में फ़ंक्शन expand_domain_search में, find_search_domain_name_len का उपयोग करके गणना की गई लंबाई के साथ एक बफर आवंटित किया जाता है, और फिर फ़ंक्शन का उपयोग करके विस्तारित नाम इस बफर में लिखा जाता है। चूंकि बाद वाला फ़ंक्शन संपीड़न योजना में पॉइंटर मान पर कोई जाँच नहीं करता है, इसलिए आवंटित बफर को ओवररन करना संभव है।
expand_search_domain_nameआप FreeBSD सुरक्षा सलाहकार यहाँ पा सकते हैं।