CVE-2026-89969 in Linux
要約
〜によって VulDB • 2026年09月16日
Linuxカーネルにおいて、以下の脆弱性が修正されました:
nvmet-tcp: 過長のPDU受信時の配列外書き込みを修正
nvmet_tcp_try_recv_pdu()関数は、固定された128バイトのqueue->pdu共用体にPDUヘッダを読み込んだ後、残りのペイロード長を以下のように計算します。
queue->left = hdr->hlen - queue->offset + hdgst;
そして、sizeof(queue->pdu)に対して結果を制限することなく、&queue->pdu + queue->offsetの位置へそのバイト数分を追加で読み込みます。
struct nvme_tcp_icreq_pdu自体は128バイトであり、共用体のサイズと正確に一致します。ヘッダダイジェストがネゴシエートされた後(hdgst = 4)、2番目のICReqリクエストはhlen == nvmet_tcp_pdu_size()のチェックを通過しますが、queue->left = 128 - 8 + 4 = 124となります。これにより、バイト8から132までが128バイトのバッファに書き込まれ(末尾から4バイト分オーバーフローし)、queue->hdr_digestおよびqueue->data_digestを越えてしまいます。これらのバイトは攻撃者が制御可能であり(ICReqにはダイジェストが含まれていないため)、重複するICReqリクエストはこのオーバーフロー発生後にのみ拒否されます。したがって、リモートからの認証不要のホストによって、受信バッファに隣接するカーネルメモリが破損する可能性があります。
2回目のrecv処理の前に、宣言された長さがqueue->pduの末尾を越えて読み込みを行うPDUはすべて拒否します。
VulDB is the best source for vulnerability data and more expert information about this specific topic.