CVE-2026-22998CVE-2026-22998是Linux内核nvme-tcp模块中的一个高危安全漏洞,CVSS评分7.5。该漏洞存在于nvmet_tcp_build_pdu_iovec()函数中,由于缺少对cmd->req.sg和cmd->iov指针的NULL检查,攻击者可以通过发送特制的H2C_DATA PDU触发NULL指针解引用,导致内核崩溃或拒绝服务。漏洞的根本原因在于提交efa56305908b添加了边界检查但未验证命令数据结构是否已正确初始化。攻击者可在NVMe over Fabrics TCP握手完成后立即发送恶意H2C_DATA PDU,无需完成CONNECT流程即可触发漏洞。此漏洞影响所有使用nvme-tcp目标模式的Linux系统,攻击复杂度低且无需认证。
漏洞位于Linux内核drivers/nvme/target/tcp.c文件中的nvmet_tcp_build_pdu_iovec()函数。该函数在处理H2C_DATA PDU时直接访问cmd->req.sg和cmd->iov成员,但未进行NULL指针检查。攻击场景包括三种情况:(1) H2C_DATA PDU在CONNECT命令之前发送,此时cmd->req.sg和cmd->iov均为NULL;(2) H2C_DATA PDU用于READ命令,cmd->req.sg已分配但cmd->iov为NULL;(3) H2C_DATA PDU用于未初始化的命令槽,两指针均为NULL。攻击者通过在ICREQ/ICRESP握手完成后立即发送畸形H2C_DATA PDU即可触发漏洞,无需经过正常的命令初始化流程。修复方案需在调用nvmet_tcp_build_pdu_iovec()前增加对cmd->req.sg和cmd->iov的双重NULL检查,确保数据结构已正确初始化。