CVE-2025-68473CVE-2025-68473是Espressif ESP-IDF物联网开发框架中的一个高危安全漏洞,位于该框架的蓝牙主机栈(BlueDroid)中。ESP-IDF是乐鑫科技为其ESP系列芯片提供的官方开发框架,广泛应用于物联网设备、智能家居、工业控制等领域。该漏洞源于bta_dm_sdp_result()函数使用固定大小的数组uuid_list[32][MAX_UUID_SIZE]来存储服务发现协议(SDP)过程中发现的蓝牙服务UUID。在现代蓝牙设备上,可用的蓝牙服务数量可能远超32个。当设备发现超过32个服务时,后续对uuid_list数组的写入操作将超出数组边界,导致越界写入。这种越界写入可能引发多种严重后果,包括内存损坏、程序崩溃或潜在的远程代码执行。攻击者可以通过向目标设备发送包含大量服务记录的蓝牙响应来触发此漏洞。由于该漏洞无需认证且可通过网络触发(蓝牙),因此具有较高的实际威胁性。CVSS评分8.6,属于高危漏洞,对设备机密性、完整性和可用性均构成威胁。
该漏洞的技术根源在于ESP-IDF蓝牙协议栈中SDP(Service Discovery Protocol)服务发现功能的实现缺陷。具体来说,bta_dm_sdp_result()回调函数在处理服务发现响应时,使用了预先分配的固定大小缓冲区:uuid_list[32][MAX_UUID_SIZE]。这个设计假设蓝牙设备最多只会暴露32个服务,但在实际应用场景中,现代蓝牙设备(如智能手机、电脑)通常会广播远超32个服务UUID。
当蓝牙设备发起服务查询时,如果响应中包含超过32个服务记录,函数将继续向已满的数组写入数据。由于C语言不提供数组边界检查,写入操作将覆盖uuid_list数组之后的内存区域。这种越界写入会破坏相邻内存中的数据结构,可能导致:
1. 栈帧损坏:覆盖函数返回地址,可能实现代码执行
2. 堆内存损坏:如果数组位于堆上,可能触发堆溢出利用
3. 数据结构破坏:影响后续蓝牙协议处理逻辑
4. 程序崩溃:内存访问违规导致异常
攻击者需要构造一个恶意的蓝牙SDP响应,使其中包含超过32个服务记录。在成功触发越界写入后,攻击者可能利用被破坏的内存结构实现进一步的攻击目标。Espressif已在GitHub上发布了多个commit来修复此问题,主要措施是将固定数组改为动态内存分配或链表结构。