上报人信息: - 白家驹 <baijiaju@buaa.edu.cn> - 北京航空航天大学网络空间安全学院 成因: {conn,adv}_{min,max}_interval_set函数用于更新hdev->le_{conn,adv}_{min,max}_interval,不允许使le_{conn,adv}_max_interval小于le_{conn,adv}_min_interval,但在判断更新参数合法性时没有持有锁,le_{conn,adv}_{min,max}_interval可能在判断更新参数合法性后被改写,使判断更新参数合法性的比较无效化,从而写入非法的le_{conn,adv}_{min,max}_interval,使le_{conn,adv}_max_interval小于le_{conn,adv}_min_interval。 危害分析: hdev->le_{conn,adv}_{min,max}_interval是蓝牙组件的重要参数。在 add_advertising和l2cap_le_conn_ready函数中,使用了le_{conn,adv}_{min,max}_interval分别对Bluetooth LE的l2cap连接和广播时间间隔参数进行了初始化,le_{conn,adv}_{min,max}_interval非法,会造成蓝牙l2cap连接或广播异常。 bug触发后,hdev->le_{conn,adv}_{min,max}_interval非法,造成蓝牙l2cap连接或广播异常,可以用于拒绝服务攻击。 修复缓解: - 在{conn,adv}_{min,max}_interval_set函数中,扩大缓冲区,将判断更新参数合法性代码纳入hci_dev_lock的临界区。 补丁已提交给Linux Kernel Bluetooth子系统维护者,补丁链接:https://lore.kernel.org/lkml/20231222161317.6255-1-2045gemini@gmail.com/