Skip to content
KitploitKITPLOIT
أدواتعمليات الاستغلالالمدونة
Log in
إرسال
أدواتعمليات الاستغلالالمدونة
إرسال

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

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

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

دليل الأدوات

الفئات

عرض جميع الفئات
Loading categories
Bootjack — أدوات استغلال لثغرة تجاوز سعة خطأ ICMP في EDK II UEFI PXE (CVE-2026-97631): تصنع حزم ICMP منتحلة، وتزرع EFI_EVENT مزيفًا، وتُفرّغ ذاكرة DXE عبر UART. | Kitploit
أدوات/GitHubGitHub/rayanziani/bootjack
أمان الأنظمة المدمجةالتقاط وتحليل الحزمتحليل الثغرات الأمنيةالاستغلالشيل كودأمن الشبكاتأمان الأجهزة وإنترنت الأشياءتطوير الحمولاتتحليل البرامج الثابتةاستغلال الملفات الثنائية
GitHub
1منذ 5 أياملم تتم المراجعة بعد

الأكثر شعبية

عرض الكل →

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

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

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

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

Bootjack

أدوات استغلال لثغرة تجاوز سعة خطأ ICMP في EDK II UEFI PXE (CVE-2026-97631): تصنع حزم ICMP منتحلة، وتزرع EFI_EVENT مزيفًا، وتُفرّغ ذاكرة DXE عبر UART.

عرض المستودع

CVE-2026-97631: قارئ ذاكرة DXE قبل الإقلاع

أدوات لثغرة تجاوز سعة رسالة خطأ ICMP في برنامج تشغيل EDK II PXE Base Code (NetworkPkg/UefiPxeBcDxe، GHSA-99cj-7hg9-mp4m، CVSS 4.0 9.5).

أثناء إقلاع PXE ينسخ برنامج التشغيل رسالة خطأ ICMP إلى مخزن مؤقت ثابت بحجم 504 بايت. فتصبح الرسالة الأطول كتابةً خطية تتجاوز ذلك المخزن المؤقت، إلى مجمّع DXE. ولأن وجهة الكتابة هي عنوان المخزن المؤقت نفسه، فإن الحمولة مستقلة عن الموقع: يهبط البايت i من مخطط البيانات عند &Mode->IcmpError + i. تزرع الثغرة حدث EFI_EVENT مزيفًا؛ ويوزّعه نواة DXE عبر مسار CoreSignalEvent الاعتيادي؛ وتستعيد الحمولة الحدث من لقطة، وتمسح نطاقات ذاكرة يختارها المشغّل، وتعيد EFI_SUCCESS كي يستمر الإقلاع.

يبقى نطاق التأثير داخل ذاكرة DXE الخاصة بالبرنامج الثابت. لا كتابة على الفلاش، ولا آلية استمرارية، ولا أثر في نظام التشغيل.

التخطيط

include/pxe_layout.h   EFI_PXE_BASE_CODE_ICMP_ERROR, IEVENT offsets, wire structs
include/craft.h        one packet = one primitive
include/graft.h        counterfeit event + payload parameter block
include/layout.h       the overflow region (single source of truth)
src/payload.S          ring-0 payload: restore, walk ranges, stream out
src/craft.c            packet construction, IPv4 + IPv6
src/graft.c            IEVENT overlay, parameter block
src/layout.c           overflow assembly, shared by sender and simulator
src/main.c             pxeinj: sniff xid, probe, send
src/net.c              raw L3 transport, DHCP xid sniffer
src/recv.c             pxerecv: serial collector, dump + map
sim/sim.c              host harness that proves the chain
tools/fw_offsets.py    pool offsets from a debug firmware build

البناء

الحمولة:

as --64 -o build/payload.o src/payload.S
ld -Ttext=0 -e payload_start --oformat elf64-x86-64 -o build/payload.elf build/payload.o
objcopy -O binary --only-section=.text build/payload.elf build/payload.bin

النتيجة 378 بايت، مستقلة عن الموقع، بدون إعادة تموضع.

المرسل والمستقبل يعتمدان على POSIX (AF_PACKET، IP_HDRINCL، termios) ويُبنيان باستخدام make على Linux. يُبنى المحاكي باستخدام MSVC عبر Makefile.win:

cl /nologo /W3 /O2 /Iinclude /Fe:build\sim.exe sim\sim.c src\craft.c src\graft.c src\layout.c

السلسلة، كما أثبتها المحاكي

يقوم build/sim.exe بتعيين صفحة pool وهمية، ويكتب الفائض حيث كان memcpy الثغرة سيحدث، ويتحقق من أن IEVENT الناتج سيرسل الحمولة، ويستدعي الحمولة كشيفرة آلة حقيقية، ثم يتحقق من:

  • استعادة الحدث بايتًا بايتًا
  • تطابق البايتات المستخرجة مع نطاق المصدر
  • سلامة إطارات الفتح/الإغلاق، بحيث يمكن تمييز عملية استخراج مقتطعة
  • عدم تسبب UART معطّل في تعليق الاستدعاء
  • التحقق من مجاميع اختبار ICMP datagram ووقوع الفائض عند الإزاحة التي ينسخ منها السائق
  • بقاء BOOTP xid المضمّن سليمًا حرفيًا

26 فحصًا على التخطيط وABI والتأطير وبناء الحزم. يثبت هذا توافق الأجزاء مع بعضها البعض. لكنه لا يثبت عنوان pool لبرنامج ثابت معيّن، وهو تخصيص وقت التشغيل.

التشغيل

وضعان، يُستخدمان بالترتيب.

Probe: المسار القانوني فقط، دون كتابة خارج الحدود.

pxeinj --target 10.0.0.50 --spoof 10.0.0.1 --sniff --probe --send

خطأ ICMP سليم التكوين بحجم 504 بايت. نفس الانتحال، نفس معاملة BOOTP المضمّنة، نفس كل شيء. إذا واصل العميل الإقلاع، فهذا يعني أن الخطأ قُبل وتم الوصول إلى حلقة النسخ المعرّضة للثغرة. تأكيد غير مدمّر، ولا يحتاج إلى عنوان من المجموعة.

Overflow: يرفض البناء حتى تتوفر ثلاثة أشياء: قاعدة المجموعة (tools/fw_offsets.py)، وبايتات الحدث الأصلية (--shadow)، ونطاق واحد على الأقل.

pxeinj --target 10.0.0.50 --spoof 10.0.0.1 --xid 0xdeadbeef \
       --pool-base 0x7f12345000 --payload build/payload.bin \
       --ranges ranges.txt --shadow shadow.bin --uart 0x3f8 --send

pxerecv -d /dev/ttyUSB0 -o dump.bin -m dump.map

ranges.txt هو START-END واحد لكل سطر، بالنظام الست عشري دون 0x؛ راجع ranges.example.txt لمعرفة الحجم وميزانية الوقت. مسار تجاوز السعة في v6 معطّل: الفحص يعمل عبر v6، لكن الكتابة لا تعمل، إلى أن يُعاد اشتقاق حد النسخ في v6 من المصدر المُرقّع.

لماذا هو صامت

  • لا يوجد تخصيص من Boot Services، ولا تسجيل، ولا قفل داخل الحمولة
  • لا تعديلات على IDT/GDT/CR/MSR، ولا خطافات مقاطعات، ولا سجلات تصحيح
  • يُستعاد الكائن قبل بدء التفريغ، وليس بعده
  • المخرجات عبر UART بالاستقصاء، فلا يصل شيء إلى مخزن يديره البرنامج الثابت
  • يُرجع EFI_SUCCESS في مسار الإشعار الطبيعي، فيستمر الإقلاع
  • SignalLink الخاص بالحدث متسق ذاتيًا، فلا يفشل اجتياز القائمة

الآثار المتبقية متأصلة في العلّة: فقد أُشير إلى الحدث في وقت لا يكون فيه عادةً، وتبقى صفحة المجمّع متسخة، وإذا كانت المنصة تقيس DXE عبر TPM فإن قيمة PCR تكون كما كانت عند بدء الإقلاع. أي شيء يتجاوز ذلك ليس من خصائص هذه العلّة.

حواجز الأمان في الشيفرة

  • --send مطلوب؛ والوضع الافتراضي هو تشغيل تجريبي
  • يرفض تجاوز السعة البناء دون --pool-base و--payload و--shadow وقائمة نطاقات غير فارغة. لكل منها طريقة محددة لإفساد البرنامج الثابت إذا حُزّرت، لذا لا شيء منها اختياري
  • يجب أن يحتوي --shadow على توقيع EFI_EVENT عند الإزاحة المتوقعة، ما يكشف ملفًا مملوءًا بالأصفار و--event-off خاطئًا في فحص واحد بدلًا من لحظة الإرسال
  • الفحص وضع منفصل ولا يمكنه الكتابة خارج الحدود
  • استقصاء UART محدود، فلا يمكن لغياب 16550 أن يعلّق الإقلاع؛ فبمجرد نفاد التقدير يُسقط UART ويستمر مصرف الذاكرة RAM، إن وُجد
  • إطار الإغلاق يجعل الاقتطاع مرئيًا بدلًا من أن يكون صامتًا

القيود

  • عنوان المجمّع الخاص بـ Mode->IcmpError تخصيص وقت تشغيل ويختلف حسب بناء البرنامج الثابت. لا يمكن اشتقاقه من خريطة الربط. يعطي tools/fw_offsets.py الإزاحات؛ أما القاعدة فيجب قياسها على البرنامج الثابت الهدف، مثلًا من تتبّع DEBUG_POOL، ثم تخزينها مؤقتًا.
  • يتغير sizeof(EFI_PXE_BASE_CODE_MODE) وoffsetof(..., IcmpError) بين إصدارات edk2. القيم الافتراضية في tools/fw_offsets.py نقاط بداية، وليست قيمًا يُوثق بها.
  • التعبير الدقيق الذي يُحسب منه حد النسخ المعيب غير مذكور في التنبيه، والإصلاح (#13302) يغيّره. اقرأ دالتي DpcHandle في الشجرة الهدف قبل الاعتماد على إزاحة تجاوز السعة.
  • تتطلب استعادة الحدث لقطة مأخوذة قبل تجاوز السعة. وبدونها تكتب الاستعادة أصفارًا وتترك حدثًا تالفًا في قائمة إشارات النواة، يجتازها CoreSignalEvent التالي. ولهذا السبب يرفض الأداة البناء دون --shadow.
تنزيل الأداة