🔍 CVE-2026-89968

7.5
CVSS Score
HIGH
2026-09-16
2026-10-19 09:18
✅ 완료

🇰🇷 한글 설명

Linux 커널의 nvmet-tcp 구성 요소에서 요청되지 않은 H2CData PDU를 적절히 거부하지 못하는 취약점이 발견되었습니다. 공격자가 R2T(Ready to Transfer) 응답이 오기 전에 데이터를 먼저 전송하면, 명령어가 중복 완료되어 커널 리스트가 자기 참조 상태가 되거나 무한 루프에 빠질 수 있습니다. 이로 인해 시스템이 멈추는 소프트 락업(soft-lockup) 현상이 발생할 수 있습니다.

💡 쉬운 설명

서버가 데이터를 받을 준비가 되기도 전에 공격자가 가짜 데이터를 먼저 보내서 서버를 혼란에 빠뜨리는 문제입니다. 이 공격이 성공하면 서버가 무한 루프에 빠져 작동을 멈추게 됩니다.

🇺🇸 원문 (English)

In the Linux kernel, the following vulnerability has been resolved: nvmet-tcp: reject unsolicited H2CData PDUs nvmet_tcp_handle_h2c_data_pdu() accepts an H2CData PDU after only checking that its TTAG is a valid in-range command index and that the command's data buffers are mapped. It never checks that the target has actually solicited that data by sending an R2T for the command. A remote host can abuse this. It submits a write command that takes the R2T path and, before the target transmits the R2T, sends an H2CData PDU for that command's tag. The data completes the command early, and when the command then fails synchronously (e.g. a length mismatch caught by nvmet_check_transfer_len()), it is completed a second time. Each completion calls nvmet_tcp_queue_response(), so the same command is added to queue->resp_list twice while it is still linked; the second llist_add() makes the node point to itself (lentry->next == lentry). nvmet_tcp_process_resp_list() then walks that self-referential node and adds the command to resp_send_list twice. With CONFIG_DEBUG_LIST this trips the "list_add double add" check (kernel BUG); without it the loop never terminates and the nvmet_tcp workqueue wedges (soft-lockup). It is remotely triggerable and needs no authentication on an allow_any_host subsystem. Track whether an R2T has been transmitted for a command and reject an H2CData PDU that arrives before it. The flag is cleared on command reuse (nvmet_tcp_get_cmd() zeroes cmd->flags) and stays set across the multiple H2CData PDUs of a single solicited transfer.

📍 영향받는 시스템

Linux kernel (nvmet-tcp 모듈 사용 시)

⚔️ 공격 벡터

인증이 필요 없는 nvmet-tcp 환경에서 원격으로 조작된 H2CData PDU를 전송하여 트리거

🛡️ 대응 방법

Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 R2T 확인 로직을 적용해야 함

🔧 검증 코드

출력된 커널 버전이 해당 취약점이 패치된 최신 버전인지 배포판 보안 공지를 통해 확인하십시오.

Shell / Script
uname -r

📊 CVSS Vector String

CVSS Vector
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H

💻 영향받는 소프트웨어

Linux Kernel