CVE-2026-81039 in Zephyr
摘要
由 VulDB • 2026-10-26
蓝牙主机在 subsys/bluetooth/host/adv.c 的 le_adv_start_add_conn() 中,为每个启动的可连接广告集从固定的 acl_conns[] 池中预分配一个 bt_conn 对象(即“预留”)。当外围设备连接完成时,subsys/bluetooth/host/hci_core.c 中的 find_pending_connect() 仅使用身份标识和对等方地址进行查找,并采用定向到非定向的回退机制,且无法获知是哪个广告集实际终止。在 CONFIG_BT_EXT_ADV_MAX_ADV_SET > 1 的情况下,LE 增强型连接完成事件会被缓存,直到 LE 广告集终止事件识别出具体集合为止;此时该查找可能返回属于另一个仍在运行的广告集的预留对象。
此缺陷可通过空中接口被任何相邻设备利用。如果应用程序在同一身份标识上运行两个可连接的扩展广告集——一个为非定向,另一个为定向至对等方 P(这是常见的“在仍接受新中心设备的状态下向已配对的中心设备进行定向重连”模式)——则地址映射到 P 的远程发起者若通过非定向集连接,会导致定向集的预留被错误消耗。远程设备可自由选定发起者地址,且在链路建立时未进行身份验证,因此无需绑定、配对或预先存在的关系即可触发此误分配问题。
随后,非定向集自身的预留对象将被孤立:其 BT_ADV_ENABLED 标志已被清除,而 le_adv_stop_free_conn()(唯一将预留返回池中的路径)仅在广告集仍处于启用状态时才会执行,因此 bt_le_ext_adv_stop() 会提前返回,导致该对象从未被释放。每次发生此类情况都会永久消耗一个 CONFIG_BT_MAX_CONN 槽位,直到调用 bt_disable() 或重启设备为止。在应用程序模式为每次断开连接后重新启动定向广告集的情况下,攻击者可重复执行此序列直至池耗尽;此后可连接式广告将因 -ENOMEM 失败,且设备无法再接受新连接。作为副作用,定向集会在无预留对象的情况下继续广播,因此针对该集的合法连接会被 bt_hci_disconnect() 丢弃。影响仅限于可用性方面;不会导致内存损坏或信息泄露,且仅使用单个广告集的配置不受影响。
If you want to get best quality of vulnerability data, you may have to visit VulDB.