CVE-2026-31622Linux内核NFC数字协议栈中存在一个高危安全漏洞。在处理NFC-A防冲突级联响应时,`digital_in_recv_sdd_res`函数未对级联深度进行严格边界检查。ISO 14443-3标准规定NFC-A最多支持三级级联,但驱动程序未强制执行此限制。恶意NFC设备可通过控制级联标记和不完整位,无限延长级联过程,导致向`target->nfcid1`缓冲区写入超过10字节的数据,从而引发堆缓冲区溢出,可能造成内核崩溃或权限提升。该漏洞CVSS评分为8.8,影响严重。
该漏洞位于Linux内核的NFC子系统的`digital_in_recv_sdd_res`函数中,涉及NFC-A协议的防碰撞机制。在正常流程中,NFC读取器与标签交互时,标签会返回SDD响应,其中包含级联标记和UID的一部分。驱动程序会在每一轮中将3或4字节追加到`target->nfcid1`堆缓冲区中。核心问题在于,虽然ISO 14443-3标准将级联层级限制为3层(`target->nfcid1`数组大小为10字节),但代码逻辑中缺乏对此上限的校验。攻击者可以通过特制的NFC标签或设备,在SDD_RES中设置级联标记,并在SEL_RES中设置级联未完成位,欺骗驱动程序认为还需要继续接收UID数据。由于级联轮数完全由对端设备控制,攻击者可以触发无限循环的追加操作,导致数据写入超过`nfcid1`缓冲区的边界,造成堆溢出。