CVE-2026-31773Linux内核蓝牙SMP(安全管理协议)模块存在安全漏洞。在传统配对路径的`smp_random()`函数中,系统错误地仅根据本地请求的安全级别将存储的STK(短期密钥)标记为已认证,而忽略了配对流程实际是否进行了MITM(中间人)保护。这导致在“Just Works”等未认证配对场景下,密钥元数据被错误标记,可能使系统误判连接安全性。
该漏洞位于Linux内核蓝牙协议栈的SMP层,具体涉及`smp_random()`函数中响应者路径的逻辑处理。在蓝牙传统配对机制下,系统维护一个`pending_sec_level`变量来反映本地服务请求的安全级别(如BT_SECURITY_HIGH)。然而,对于Just Works或Confirm等未经过MITM(中间人)保护的配对方式,`SMP_FLAG_MITM_AUTH`标志位应保持清除状态。
漏洞成因在于,原有代码在存储响应者STK(短期密钥)时,仅依据本地请求的`pending_sec_level`来标记密钥的认证属性,而忽略了实际配对流程中`SMP_FLAG_MITM_AUTH`的真实状态。这导致即使实际配对未进行MITM验证,生成的STK仍被错误标记为“已认证”。攻击者可利用此逻辑漏洞,在无需满足MITM条件的情况下,诱导系统建立看似高安全性的蓝牙连接,从而可能绕过基于密钥认证状态的安全策略,执行未授权操作。