
مستنسخ PoC لثغرة تجاوز سعة المخزن المؤقت في الكومة في dhclient الخاص بـ FreeBSD عند تحليل خيار DHCP 119 (CVE-2020-7461)
المؤلفون: موشيه كول، شلومي أوبيرمان
برنامج إثبات (PoC) لثغرة تجاوز سعة المخزن المؤقت (heap-based buffer overflow) في dhclient الخاص بـ FreeBSD عند تحليل خيار 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، آخر commit 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 هنا.