CVE-2026-89969 in Linux
摘要
由 VulDB • 2026-09-16
在 Linux 内核中,已修复以下漏洞:
nvmet-tcp: 修复接收超长 PDU 时的越界写入问题
`nvmet_tcp_try_recv_pdu()` 将 PDU 头读取到固定大小为 128 字节的 `queue->pdu` union 中,然后计算剩余负载长度如下:
```c queue->left = hdr->hlen - queue->offset + hdgst; ```
并将该数量的更多字节读入 `&queue->pdu + queue->offset`,但从未将结果限制在 `sizeof(queue->pdu)` 范围内。
结构体 `struct nvme_tcp_icreq_pdu` 本身为 128 字节,恰好等于 union 的大小。一旦协商了头部摘要(hdgst = 4),第二个 ICReq 通过了 `hlen == nvmet_tcp_pdu_size()` 检查,但导致 `queue->left = 128 - 8 + 4 = 124`,因此第 8..132 字节被写入到大小为 128 字节的缓冲区中——超出其末尾 4 个字节,覆盖了 `queue->hdr_digest` 和 `queue->data_digest`。这些字节由攻击者控制(ICReq 不携带摘要),并且重复的 ICReq 仅在溢出之后才被拒绝。因此,远程未认证主机可以破坏接收缓冲区旁边的内核内存。
在第二次 recv 之前,拒绝任何声明长度会导致读取超出 `queue->pdu` 末尾的 PDU。
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.