🇰🇷 한글 설명
Linux 커널의 vhost-scsi 구성 요소에서 경합 조건(Race Condition)으로 인해 발생하는 취약점입니다. QEMU가 vq->log_used를 false로 설정하고 메모리를 해제하는 동안, vhost 스레드가 해제된 메모리 영역에 로그를 기록하려고 시도하여 잘못된 메모리 쓰기가 발생할 수 있습니다.
💡 쉬운 설명
컴퓨터의 메모리 관리 과정에서 두 작업이 동시에 충돌하여, 이미 사용이 끝난 메모리 공간에 데이터를 강제로 쓰려고 하는 문제입니다. 이로 인해 프로그램이 갑자기 종료되거나 보안 공격에 악용될 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
vhost-scsi: protect vq->log_used with vq->mutex
The vhost-scsi completion path may access vq->log_base when vq->log_used is
already set to false.
vhost-thread QEMU-thread
vhost_scsi_complete_cmd_work()
-> vhost_add_used()
-> vhost_add_used_n()
if (unlikely(vq->log_used))
QEMU disables vq->log_used
via VHOST_SET_VRING_ADDR.
mutex_lock(&vq->mutex);
vq->log_used = false now!
mutex_unlock(&vq->mutex);
QEMU gfree(vq->log_base)
log_used()
-> log_write(vq->log_base)
Assuming the VMM is QEMU. The vq->log_base is from QEMU userpace and can be
reclaimed via gfree(). As a result, this causes invalid memory writes to
QEMU userspace.
The control queue path has the same issue.
📍 영향받는 시스템
vhost-scsi를 사용하는 Linux 커널 및 QEMU 가상화 환경
⚔️ 공격 벡터
특수하게 조작된 I/O 요청을 통해 vhost-scsi의 완료 경로와 QEMU의 메모리 해제 경로 간의 타이밍 차이를 유도하여 발생
🛡️ 대응 방법
vhost-scsi의 vq->log_used 접근 시 vq->mutex를 사용하여 동기화 처리가 적용된 최신 Linux 커널로 업데이트
🔧 검증 코드
현재 실행 중인 커널 버전을 확인하여 취약점이 패치된 최신 버전인지 확인합니다.