🇰🇷 한글 설명
Linux 커널의 drm/amdkfd 구성 요소에서 get_wave_state() 함수가 MQD에서 읽어온 값을 검증 없이 신뢰하여 발생하는 Out-of-Bounds 메모리 노출 취약점입니다. 공격자가 제어 가능한 값을 통해 copy_to_user() 함수가 비정상적으로 큰 범위를 읽게 함으로써 커널 메모리 정보를 유출할 수 있습니다.
💡 쉬운 설명
그래픽 카드 관련 소프트웨어의 허점을 이용해 컴퓨터의 중요한 비밀 정보가 담긴 메모리 영역을 몰래 훔쳐볼 수 있는 문제입니다. 공격자가 조작된 데이터를 보내면 시스템이 허용된 범위보다 훨씬 많은 데이터를 외부로 내보내게 됩니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
drm/amdkfd: Fix OOB memory exposure in get_wave_state()
The get_wave_state() function for v9 trusts cp_hqd_cntl_stack_size and
cp_hqd_cntl_stack_offset values read directly from the MQD, which are
written by GPU microcode and fully attacker-controlled on the
CRIU-restore path (via AMDKFD_IOC_RESTORE_PROCESS with H3).
this leads to an unbounded copy_to_user() that can leak adjacent
GTT/kernel memory. If offset > size, integer underflow produces a ~4 GiB
read length, if size is set to 1 MiB against a 4 KiB allocation, we leak
1 MiB of adjacent kernel memory (other queues' MQDs, ring buffers, KASLR
pointers).
Fix by clamping both cp_hqd_cntl_stack_size to the actual allocated
buffer size (q->ctl_stack_size) and cp_hqd_cntl_stack_offset to the
clamped size before performing arithmetic and copy_to_user().
This ensures we never read beyond the allocated kernel BO regardless of
attacker-supplied MQD field values.
📍 영향받는 시스템
Linux kernel (drm/amdkfd driver components)
⚔️ 공격 벡터
CRIU-restore 경로(AMDKFD_IOC_RESTORE_PROCESS)를 통해 조작된 MQD 값을 전달하여 메모리 유출 유도
🛡️ 대응 방법
커널 패치를 적용하여 cp_hqd_cntl_stack_size와 offset 값을 실제 할당된 버퍼 크기 내로 제한(Clamping)해야 함
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 수정된 보안 패치 버전인지 배포판의 보안 공지를 통해 확인하십시오.
📊 CVSS Vector String
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:H
💻 영향받는 소프트웨어
NVIDIA Cloud Gaming Guest Driver for Linux