🇰🇷 한글 설명
Linux 커널의 mshv_vtl 드라이버에서, 일부 CPU의 레지스터 페이지 할당이 실패해도 전역 플래그가 설정되어 검사를 통과하는 문제가 있습니다. 이 상태에서 해당 CPU의 레지스터 페이지가 NULL인데도 get_page(NULL)이 호출될 수 있어, 수정된 커널에서는 해당 페이지가 없으면 VM_FAULT_SIGBUS를 반환하도록 변경되었습니다.
💡 쉬운 설명
일부 CPU에서 특정 메모리 영역 준비에 실패했는데도 시스템이 이를 확인하지 않고 접근을 시도하는 결함입니다. 이로 인해 커널이 비정상 종료되거나 예기치 않은 동작이 발생할 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
mshv_vtl: Check per-CPU register page before mmap
Register-page setup is optional for each CPU. If allocation or
registration fails, mshv_vtl_configure_reg_page() warns and leaves that
CPU's reg_page NULL, but initial context setup continues successfully.
Meanwhile, successful setup on another CPU sets the global
mshv_has_reg_page flag.
mshv_vtl_fault() checks this global flag before selecting the requested
CPU's register page. With mixed setup results across online CPUs, the
check passes even for a CPU with no register page, reaching
get_page(NULL) when userspace faults in that mapping.
Check the selected per-CPU register page before taking its reference and
return VM_FAULT_SIGBUS if it is absent.
📍 영향받는 시스템
Microsoft Hyper-V VTL 기능을 사용하는 Linux 커널 (mshv_vtl 드라이버 포함 버전), 세부 영향 버전은 원문에 명시되지 않음
⚔️ 공격 벡터
로컬 사용자 공간 프로세스가 mshv_vtl 장치의 특정 매핑에 페이지 폴트를 유발하여 NULL 포인터 참조를 일으키는 방식으로 추정되며, 공식 공격 시나리오는 확인되지 않음
🛡️ 대응 방법
배포판 벤더가 제공하는 최신 커널 보안 업데이트를 적용하고 재부팅하거나, 수정 커밋(mshv_vtl_fault의 per-CPU reg_page 검사 추가)이 포함된 커널로 업그레이드
🔧 검증 코드
첫 번째 값은 현재 커널 버전이며 벤더 패치 정보와 대조해 보안 업데이트 적용 여부를 확인하고, 두 번째 값이 0이면 mshv_vtl 모듈이 로드되어 있지 않아 영향이 없고 1 이상이면 해당 모듈이 활성화되어 있어 패치 적용이 필요합니다.
uname -r && grep -c mshv_vtl /proc/modules 2>/dev/null