🇰🇷 한글 설명
Linux 커널의 nvmet: pci-epf 구성 요소에서 SGL 세그먼트의 길이가 너무 짧을 경우 발생하는 취약점입니다. 호스트가 잘못된 길이를 전달하면 할당된 버퍼 범위를 벗어난 메모리를 읽는 slab-out-of-bounds 오류가 발생하여 커널 패닉을 유발할 수 있습니다.
💡 쉬운 설명
컴퓨터의 메모리 관리 과정에서 데이터의 길이를 잘못 계산하여, 허용되지 않은 영역의 데이터를 읽으려고 시도하는 오류입니다. 이로 인해 시스템이 갑자기 멈추거나 꺼지는 현상이 발생할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
nvmet: pci-epf: reject too-short SGL segments
The host controls an SGL segment's length. A nonzero length smaller than
one SGL descriptor makes nr_descs zero, so
nvmet_pci_epf_get_sgl_segment() reads the type byte of sgls[-1] outside
the allocated buffer. If that byte contains a segment descriptor type,
the function also copies the preceding 16 bytes and returns a negative
descriptor count.
The read was reproduced in 3/3 KASAN boots with only the host transfer
mocked by a KUnit test:
BUG: KASAN: slab-out-of-bounds in nvmet_pci_epf_get_sgl_segment
Read of size 1 by task kunit_try_catch
Call Trace:
nvmet_pci_epf_get_sgl_segment
nvmet_pci_epf_short_sgl_test
Kernel panic - not syncing: KASAN: panic_on_warn set ...
Reject segments that cannot hold one descriptor before allocating or
transferring their contents.
📍 영향받는 시스템
Linux kernel (nvmet: pci-epf 모듈 사용 환경)
⚔️ 공격 벡터
호스트 측에서 조작된 짧은 길이의 SGL 세그먼트를 전송하여 커널 메모리 경계 외 읽기 유도
🛡️ 대응 방법
SGL 세그먼트 길이를 검증하여 1개 이상의 디스크립터를 포함하지 않는 세그먼트를 거부하도록 커널 패치 적용
🔧 검증 코드
현재 실행 중인 커널 버전을 확인하여 해당 취약점이 수정된 최신 보안 패치 버전인지 확인합니다.