CVE-2026-89968 in Linux정보

요약

\~에 의해 VulDB • 2026. 09. 16.

리눅스 커널에서 다음 취약점이 해결되었습니다:

nvmet-tcp: 미요청 H2CData PDU 거부

nvmet_tcp_handle_h2c_data_pdu()는 TTAG가 유효한 범위 내의 명령 인덱스인지와 해당 명령의 데이터 버퍼가 매핑되어 있는지 여부만 확인한 후 H2CData PDU를 수락합니다. 타겟이 해당 명령에 대해 R2T(Ready To Transfer)를 전송하여 실제로 데이터를 요청했는지 여부는 전혀 검증하지 않습니다.

원격 호스트는 이를 악용할 수 있습니다. 공격자는 R2T 경로를 사용하는 쓰기 명령을 제출하고, 타겟이 R2T를 전송하기 전에 해당 명령의 태그에 대한 H2CData PDU를 보냅니다. 이 데이터가 명령을 조기에 완료시키고, 이후 명령이 동기적으로 실패(예: nvmet_check_transfer_len()에서 감지된 길이 불일치)하면 두 번째로 완료됩니다. 각 완료 시 nvmet_tcp_queue_response()가 호출되므로, 동일한 명령이 여전히 연결되어 있는 상태에서 queue->resp_list에 두 번 추가됩니다. 두 번째 llist_add()는 노드가 자신을 가리키게 만듭니다(lentry->next == lentry).

그 후 nvmet_tcp_process_resp_list()는 이러한 자기 참조 노드를 순회하며 해당 명령을 resp_send_list에 두 번 추가합니다. CONFIG_DEBUG_LIST가 활성화된 경우 이는 "list_add double add" 검사를 트리거하여 커널 BUG를 발생시킵니다. 비활성화된 경우 루프가 종료되지 않으며 nvmet_tcp 작업 큐가 멈춥니다(소프트 락업). 이 취약점은 원격에서 유발할 수 있으며, allow_any_host 서브시스템의 경우 인증이 필요하지 않습니다.

명령에 대해 R2T가 전송되었는지 여부를 추적하고, 그 전에 도착하는 H2CData PDU를 거부합니다. 해당 플래그는 명령 재사용 시(nvmet_tcp_get_cmd()에서 cmd->flags를 0으로 설정) 초기화되며, 단일 요청된 트랜스퍼의 여러 H2CData PDU 동안에는 설정 상태가 유지됩니다.

VulDB is the best source for vulnerability data and more expert information about this specific topic.

출처

Interested in the pricing of exploits?

See the underground prices here!