Skip to content
KitploitKITPLOIT
أدواتالمدونة
إرسال
أدواتالمدونة
إرسال

أدوات الاختراق واختبار الاختراق والأمن السيبراني لترسانتك الأمنية!

Kitploit هو دليل لأدوات الاختراق والأمن السيبراني واختبار الاختراق. اكتشف آخر تحديثات المشاريع للعثور على الثغرات وتحليل الأنظمة وأتمتة الاختبارات وتعزيز أمنك.

··الخلاصات·اتصال·الخصوصية·© 2026 Kitploit

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
CVE-2023-28218 — تحليل تقني مفصّل وإثبات مفهوم لاستغلال CVE-2023-28218، وهي ثغرة تصعيد صلاحيات في نواة ويندوز داخل برنامج التشغيل AFD.sys، مع شرح خطوات الاستغلال وتحليل التصحيح. | Kitploit
أدوات/GitHubGitHub/h1bana/cve-2023-28218
تصعيد الامتيازاتتحليل الثغرات الأمنيةالاستغلالالتعلم والتعليماستغلال الملفات الثنائية
GitHubh1bana/cve-2023-28218

CVE-2023-28218

تحليل تقني مفصّل وإثبات مفهوم لاستغلال CVE-2023-28218، وهي ثغرة تصعيد صلاحيات في نواة ويندوز داخل برنامج التشغيل AFD.sys، مع شرح خطوات الاستغلال وتحليل التصحيح.

عرض المستودع
111منذ 3 سنواتلم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

اكتشف الأدوات الأكثر استخدامًا من قبل مجتمعنا.

استكشف جميع الأدوات

تصفح مجموعتنا من الأدوات

عرض جميع الأدوات →
مشاركة

تقرير CVE-2023-28218

نظرة عامة على الخطأ

خطأ يؤدي إلى تصعيد الامتيازات في نواة Windows. يظهر الخطأ في برنامج التشغيل Windows Ancrillary Function Driver for WinSock (AFD.sys). تم إصدار الإصلاح في تحديث 11/04/2023. تبلغ نقاطه CVSS:3.1 7.0 / 6.1 ويُقيَّم بأنه Important.

وصف الخطأ

  • نوع الخطأ: Double fetch وInteger overflow يؤديان إلى pool overflow.
  • يحدث الخطأ في الدالتين Afd!AfdComputeCMSGLength وAfd!AfdCopyCMSGBuffer. img1

تستقبل هاتان الدالتان v82 كوسيط إدخال. v82 هو عنوان يتحكم فيه usermode. في الدالة Afd!AfdComputeCMSGLength، تتم الإشارة إلى هذا العنوان مباشرة للحصول على القيمة. ثم تُحسب قيمة length لمخزن CMSG وتُعاد. بعد ذلك يتم تخصيص pool بهذا الحجم. ومن خلال التحكم في وسيطي الإدخال a1 وa2، يمكننا التحكم في الحجم الذي سيُعاد في الوسيط a3. img2

في الدالة Afd!AfdCopyCMSGBuffer، تتم الإشارة إلى العنوان v82 مباشرة للحصول على القيمة. وبعد عدة خطوات فحص، تُستخدم هذه القيمة كحجم لعملية memmove. img3

تحتوي هذه الدالة على خطأ Integer overflow، وبالاقتران مع قيام الدالتين بالجلب المباشر من العنوان في جهة usermode، يمكننا تغيير قيمته أثناء التشغيل. مما يؤدي إلى إنشاء قيمة size كبيرة جدًا عند memmove. وعند النسخ إلى منطقة ذاكرة يتعذر الوصول إليها، يحدث try catch. لكن النسخ إلى مناطق الذاكرة السابقة قد حدث بالفعل. وبهذا يمكننا النسخ بالحجم الذي نريده. img4

  • لتشغيل الـ POC، يجب أولاً إنشاء socket بمعامل type بقيمة SOCK_DGRAM. ثم استخدام handle الخاص بهذا socket كمعامل لاستدعاء الدالة bind. وأخيراً إنشاء خيطين (thread)، حيث يقوم أحدهما باستمرار باستدعاء DeviceControl مع IOCTL بقيمة 0x120D3. يجب إعداد userbuffer مناسب لتجاوز بعض الفحوصات. بينما يقوم الخيط الآخر باستمرار بتغيير القيمة المخزنة في عنوان usermode الذي يُستخدم كمعامل للدالتين المذكورتين.

الاستغلال

  • مع هذا الخطأ، يمكننا تنفيذ overflow على pool من نوع non-paged NX بحجم وبيانات يمكن التحكم بها بالكامل من جهة usermode.
  • اتجاه الاستغلال هو عمل spray للعديد من كائنات Namedpipe، ثم تحرير بعض الكائنات لإنشاء ثغرات (holes) في الـ heap. بعد ذلك، إنشاء pool بعد حساب الحجم من الدالة Afd!AfdComputeCMSGLength، ويجب أن يطابق هذا الحجم حجم كائن Namedpipe. عندها سيتم تخصيص الـ pool في الكائنات التي تم تحريرها للتو. نستخدم الخطأ لتجاوز (overflow) كائنات Namedpipe المجاورة، ومن ثم نستخدم آليات Namedpipe للحصول على صلاحية قراءة/كتابة ذاكرة kernel. نقرأ token لعملية النظام ثم نكتبه في token للعملية الحالية.

النطاق المتأثر

  • Windows Server 2012 R2 (Server Core installation) build قبل 6.3.9600.20919
  • Windows Server 2012 R2 build قبل 6.3.9600.20919
  • Windows Server 2012 (Server Core installation) build قبل 6.2.9200.24216
  • Windows Server 2012 build قبل 6.2.9200.24216
  • Windows Server 2008 R2 for x64-based Systems Service Pack 1 (Server Core installation) build قبل 6.1.7601.26466
  • Windows Server 2008 R2 for x64-based Systems Service Pack 1 build قبل 6.1.7601.26466
  • Windows Server 2008 for x64-based Systems Service Pack 2 (Server Core installation) build قبل 6.0.6003.22015
  • Windows Server 2008 for x64-based Systems Service Pack 2 build قبل 6.0.6003.22015
  • Windows Server 2008 for 32-bit Systems Service Pack 2 (Server Core installation) build قبل 6.0.6003.22015
  • Windows Server 2008 for 32-bit Systems Service Pack 2 build قبل 6.0.6003.22015
  • Windows Server 2016 (Server Core installation) build قبل 10.0.14393.5850
  • Windows Server 2016 build قبل 10.0.14393.5850
  • Windows 10 Version 1607 for x64-based Systems build قبل 10.0.14393.5850
  • Windows 10 Version 1607 for 32-bit Systems build قبل 10.0.14393.5850
  • Windows 10 for x64-based Systems build قبل 10.0.10240.19869
  • Windows 10 for 32-bit Systems build قبل 10.0.10240.19869
  • Windows 10 Version 22H2 for 32-bit Systems build قبل 10.0.19045.2846
  • Windows 10 Version 22H2 for ARM64-based Systems build قبل 10.0.19045.2846
  • Windows 10 Version 22H2 for x64-based Systems build قبل 10.0.19045.2846
  • Windows 11 Version 22H2 for x64-based Systems build قبل 10.0.22621.1555
  • Windows 11 Version 22H2 for ARM64-based Systems build قبل 10.0.22621.1555
  • Windows 10 Version 21H2 for x64-based Systems build قبل 10.0.19044.2846
  • Windows 10 Version 21H2 for ARM64-based Systems build قبل 10.0.19044.2846
  • Windows 10 Version 21H2 for 32-bit Systems build قبل 10.0.19044.2846
  • Windows 11 version 21H2 for ARM64-based Systems build قبل 10.0.22000.1817
  • Windows 11 version 21H2 for x64-based Systems build قبل 10.0.22000.1817
  • Windows 10 Version 20H2 for ARM64-based Systems build قبل 10.0.19042.2846
  • Windows 10 Version 20H2 for 32-bit Systems build قبل 10.0.19042.2846
  • Windows 10 Version 20H2 for x64-based Systems build قبل 10.0.19042.2846
  • Windows Server 2022 (Server Core installation) build قبل 10.0.20348.1668
  • Windows Server 2022 build قبل 10.0.20348.1668
  • Windows Server 2019 (Server Core installation) build قبل 10.0.17763.4252
  • Windows Server 2019 build قبل 10.0.17763.4252
  • Windows 10 Version 1809 for ARM64-based Systems build قبل 10.0.17763.4252

التصحيح

  • تم إصلاح الخطأ عن طريق استبدال الدالتين القديمتين بدالتين جديدتين، حيث أُضيفت اللاحقة _old إلى نهاية أسماء الدوال القديمة. هذه الدوال الجديدة قد. في الدالتين الجديدتين، ورغم بقاء double fetch، فإن القيمة التي يتم جلبها تُفحص قبل استخدامها. وتُستخدم دوال Rtl لاستبدال العمليات الحسابية، لمنع Integer overflow.

الخلاصة

  • نطاق تأثر الخطأ واسع جدًا ويهدد العديد من الأنظمة. ومع ذلك، لا يزال payload الاستغلال عند تشغيله يحمل نسبة صغيرة من الفشل تؤدي إلى انهيار Windows بسبب spray الـ heap. بالإضافة إلى ذلك، بعد تصعيد صلاحيات عملية cmd إلى System، فإن إنهاء هذه العملية سيؤدي أيضًا إلى انهيار Windows، لأن عملية الاستغلال تسببت في إتلاف كائن Namedpipe.

المرفقات

  • POC مصغّر minimal
  • POC الاستغلال exploit
تنزيل الأداة
  • Windows 10 Version 1809 for x64-based Systems build قبل 10.0.17763.4252
  • Windows 10 Version 1809 for 32-bit Systems build قبل 10.0.17763.4252