🔍 CVE-2026-64320

9.1
CVSS Score
CRITICAL
2026-07-25
2026-10-21 13:19
✅ 완료

🇰🇷 한글 설명

Linux 커널의 nvmet 서브시스템에서 Discovery Get Log Page 요청 처리 중 인증되지 않은 사용자가 힙 영역의 경계를 벗어나 데이터를 읽을 수 있는 취약점이 발견되었습니다. 공격자는 조작된 오프셋을 사용하여 커널 메모리의 민감한 정보를 유출하거나 시스템을 충돌시켜 서비스 거부(DoS) 상태로 만들 수 있습니다.

💡 쉬운 설명

컴퓨터의 저장 장치 관리 프로그램에서 데이터의 위치를 잘못 계산하여, 허용되지 않은 메모리 영역의 정보를 몰래 읽어갈 수 있는 결함입니다. 이를 통해 해커가 시스템의 중요한 정보를 훔치거나 컴퓨터를 강제로 멈추게 할 수 있습니다.

🇺🇸 원문 (English)

In the Linux kernel, the following vulnerability has been resolved: nvmet: fix pre-auth out-of-bounds heap read in Discovery Get Log Page nvmet_execute_disc_get_log_page() validates only the dword alignment of the host-supplied Log Page Offset (lpo). The 64-bit offset is then added to a small kzalloc'd buffer that holds the discovery log page and the result is passed straight to nvmet_copy_to_sgl(), which memcpy()s data_len bytes out to the host with no source-side bound check: u64 offset = nvmet_get_log_page_offset(req->cmd); /* 64-bit host */ size_t data_len = nvmet_get_log_page_len(req->cmd); /* 32-bit host */ ... if (offset & 0x3) { ... } /* only check */ ... alloc_len = sizeof(*hdr) + entry_size * discovery_log_entries(req); buffer = kzalloc(alloc_len, GFP_KERNEL); ... status = nvmet_copy_to_sgl(req, 0, buffer + offset, data_len); The Discovery controller is unauthenticated -- nvmet_host_allowed() returns true unconditionally for the discovery subsystem -- so the call is reachable pre-authentication by any TCP/RDMA/FC peer that can reach the nvmet target. With a discovery log page of ~1 KiB, an attacker requesting up to 4 KiB starting at offset == alloc_len reads the next slab page out and gets its content returned over the fabric (an empirical run on a default nvmet-tcp loopback target leaked 81 canonical kernel pointers in one Get Log Page response). Pointing the offset at unmapped kernel memory faults the in-kernel memcpy and crashes (or panics, on panic_on_oops=1) the target host instead. The attacker-controlled source-side offset pattern "nvmet_copy_to_sgl(req, 0, buffer + ATTACKER_OFFSET, ...)" is unique to nvmet_execute_disc_get_log_page in the entire nvmet codebase: every other Get Log Page handler in admin-cmd.c either ignores lpo (and silently starts every response at offset 0) or tracks a local destination offset with a fixed source pointer. Validate the host-supplied offset against the log page size, cap the copy length to what is actually available, and zero-fill any remainder of the host transfer buffer. The zero-fill matches the existing short-response pattern in nvmet_execute_get_log_changed_ns() (admin-cmd.c) and prevents leaking transport SGL contents when the host asks for more bytes than the log page contains.

📍 영향받는 시스템

Linux kernel (nvmet subsystem)

⚔️ 공격 벡터

네트워크(TCP/RDMA/FC)를 통해 인증 없이 접근 가능한 nvmet 타겟에 조작된 Log Page Offset을 포함한 요청 전송

🛡️ 대응 방법

Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 nvmet 오프셋 검증 로직 적용

🔧 검증 코드

출력된 커널 버전을 확인하여 해당 취약점이 해결된 패치 버전 이상인지 확인합니다.

Shell / Script
uname -r

📊 CVSS Vector String

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

💻 영향받는 소프트웨어

Linux Kernel