HeadlinesBriefing favicon HeadlinesBriefing.com

CVE-2025-13032: هروب رمل Avast للفيروسات

Hacker News •
×

Introduction هذه المقالة الثانية والأخيرة من بحوثنا حول Avast، وستركز على استغلال CVE-2025-13032، وهي ثغرة_fetch مزدوج اكتشفناها في Drvier kernel الخاص بـ Avast. ستستعرض هذه المشاركة الخطأ وتوضح كيف استغللناها على نظام Windows 11 محدث في وقت الاكتشاف. إذا فاتتك الجزء الأول، يمكنك قراءته → https://www.safateam.com/intelligence-hub/research/technical-articles/cve-2025-13032-entering-and-breaking-the-avast-antivirus-sandbox-part-1

Bug Explanation الثغرة التي نريد استغلالها هي ثغرة_fetch مزدوج تؤدي إلى overflow pool kernel. snippet الكود المعروض أدناه supposed أن يلتقط هيكل `_UNICODE_STRING` المقدم من المستخدم، ولكن حقل `Length` من المدخلات المستخدم يتم جلبه multiple times، مما يؤدي إلى مشكلة_fetch مزدوج. الأولى fetch تتم من أجل تخصيص بافر حيث سيتم نسخ السلسلة، والثانية fetch تتم لتنفيذ memcpy بناءً على القيمة المسترجعة، مما يؤدي إلى overflow pool إذا قام المستخدم بتغييرها بين هذه الإجراءات. لاستغلال_fetch المزدوج، يعمل thread ثاني في loop ضيق، ومستمرة في تبديل حقل `Length` من `_UNICODE_STRING` المشتركة بين قيمة صغيرة آمنة وقيمة كبيرة خبيثة (مثلاً `0x1000`، أكبر من البافر المخصص). يقوم thread الرئيسي باستدعاء IOCTL vulnerable في loop. عندما تتم الملاءمة في الوقت — يقرأ kernel `Length` كـ small لـ call `ExAllocatePoolWithTag`، ثم يقرأ كـ large لـ `memmove` — يتم نسخ Bytes أكثر من التي تم تخصيصها، مما ينتج عنه overflow pool. نافذة السباق ضيقة ولكن يمكن الفوز بها بشكل موثوق خلال عدد معتدل من التكرارات. هدفنا هو استغلال هذا overflow pool من أجل الحصول على primitive قراءة/كتابة kernel arbitrary وتحقيق escalation امتيازات محلية. الثغرة تعطينا ظروف استغلال جيدة: الهدف overflow هو `PAGED_POOL`، وكل من حجم التخصيص وحجم overflow خاضعان للسيطرة، وكذلك المحتوى. Paged Pool هي منطقة من ذاكرة kernel Windows المستخدمة للأشياء والبيانات التي يحتاجها kernel أو drivers، ولكن يمكن paginating إلى القرص. تستخدم لذاكرة لا تحتاج إلى الوصول إليها من قبل الكود الحاسم العامل بأعلى أولوية. المصنف groupings allocations by size class، مما يعني أن الكائنات ذات الحجم نفسه تميل إلى الهبوط قريبة من بعضها البعض في الذاكرة — الخاصية التي تجعل heap spraying ممكنة. منذ Windows 10 19H1 هذا هوManaged من قبل Segment Heap، الذي يستخدم خلفيتين: LFH small allocations، which picks free slots randomly within a size bucket، و VS allocator للأكبر، which serves the first available chunk of the right size — each requiring a different spraying strategy. يمكننا أيضاً ملاحظة أن معظم Objects Windows يتم تخزينها في paged ...