CVE-2026-80789 in Linux정보

요약

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

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

nvmet-tcp: 명령어 버퍼를 할당하기 전에 SGL 데이터 길이를 제한함

nvmet_tcp_map_data()는 호스트가 제어하는 32비트 sgl->length 값을 읽으며, 인캡슐화 오프셋 기술자(type 0x01)의 경우 이를 사용 전에 port->inline_data_size와 대조하여 검사합니다. 그 외의 모든 SGL 기술자 유형(인라인이 아닌 전송용 SGL 데이터 블록 기술자를 포함함: type (NVME_TRANSPORT_SGL_DATA_DESC << 4) | NVME_SGL_FMT_TRANSPORT_A, 실제 호스트가 인캡슐화 외부 쓰기(out-of-capsule writes)에 사용하는 유형)은 해당 검사를 완전히 건너뛰고 바로 다음 단계로 진행됩니다:

cmd->req.sg = sgl_alloc(len, GFP_KERNEL, &cmd->req.sg_cnt);

여기서 len 값은 네트워크 상에서 직접 가져오며 최대 4 GiB까지 제한 없이 적용될 수 있습니다.

nvmet_req_init()는 명령어만 파싱할 뿐 sgl->length를 검사하지 않으며, transfer_len이 검증되는 유일한 다른 위치인 nvmet_check_transfer_len()도 할당이 이미 발생한 후 req->execute()에서 나중에 실행됩니다. 쓰기 명령어의 경우 대상(target)은 R2T로 응답하며 호스트가 데이터를 전송하기를 기다리며 명령어를 대기 상태로 유지합니다. 만약 호스트(또는 단순히 이후 처리를 수행하지 않는 비인증 피어)가 이를 수행하지 않으면, sgl_alloc()으로 할당된 버퍼는 해당 명령어가 종료될 때까지 메모리에 상주하게 됩니다. NVMe/TCP는 기본 구성에서 필수 인증을 요구하지 않으므로, 대상 포털에 도달하고 Fabrics 연결을 완료할 수 있는 모든 피어는 단일 조작된(command) 명령어로 이를 유발할 수 있으며, 큐와 연결 전반에 걸쳐 반복 가능하여 증폭(amplification) 효과를 낼 수 있습니다. 이는 원격이며 사실상 비인증 상태인 피어가 트리거하는 제한 없는 커널 메모리 할당입니다.

이 파일에서 이미 인라인 데이터(PDU별 H2C 데이터)를 제한하기 위해 사용하는 동일한 NVMET_TCP_MAXH2CDATA 상한선에 대해 len을 검증하여, 모든 SGL 기술자 유형에 대해 할당을 수행하기 전에 이를 처리합니다. 이는 인라인이 아닌(descriptor) 경우의 구멍(gap)을 막으면서도 인캡슐화(in-capsule) 경우에 대한 기존보다 더 엄격한 inline_data_size 검사는 그대로 유지됩니다.

v6.19 KASAN 스탠드(stand) 환경에서 런타임에 검증됨: 이 제한이 적용되면, 과다한 비인라인 SGL 길이를 가진 조작된 쓰기 명령어는 sgl_alloc() 실행 전에 거부되며, 동일한 요청은 이전에는 호스트가 만족시키지 않는 R2T를 기다리는 동안 상주하던 ~256 MiB(최대 4 GiB)의 제한 없는 커널 할당을 유발했습니다.

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

책임이 있는

Linux

예약하다

2026. 08. 26.

모더레이션

수락

항목

VDB-398931

EPSS

0.00234

출처

Do you know our Splunk app?

Download it now for free!