🇰🇷 한글 설명
Linux 커널의 cdrom 드라이버에서 CDROMVOLCTRL 명령 처리 중 스택 범위 외 읽기(out-of-bounds read) 취약점이 발견되었습니다. 특정 장치가 블록 디스크립터를 반환할 때 버퍼 포인터는 조정되지만 버퍼 길이는 그대로 유지되어, 스택 버퍼의 범위를 벗어난 데이터를 읽게 됩니다. 이로 인해 의도하지 않은 메모리 데이터가 유출되거나 장치로 전송될 수 있습니다.
💡 쉬운 설명
컴퓨터가 CD-ROM 정보를 읽을 때, 정해진 메모리 공간보다 더 많은 양을 읽으려고 시도하는 오류입니다. 이 과정에서 메모리에 저장된 다른 중요한 정보가 실수로 노출될 위험이 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
cdrom: fix stack out-of-bounds read in CDROMVOLCTRL
mmc_ioctl_cdrom_volume() first reads the audio control mode page into a
32-byte stack buffer with cgc->buflen set to 24. If the device reports a
block descriptor, the function increases cgc->buflen to include that
descriptor and reads the page again.
For CDROMVOLCTRL, the function then builds a MODE SELECT parameter list
by moving cgc->buffer forward by offset - 8 bytes. This drops the block
descriptor from the outgoing payload and leaves a new 8-byte mode
parameter header in front of the audio control page. However, cgc->buflen
is left unchanged.
With a standard 8-byte block descriptor, cgc->buffer points at buffer + 8
but cgc->buflen remains 32. cdrom_mode_select() therefore asks the low
level packet path to write 32 bytes from that adjusted pointer, reading 8
bytes past the end of the 32-byte stack buffer.
This is not hit by CDROMVOLREAD, and CDROMVOLCTRL only triggers it on
drives that return a non-zero block descriptor length, which helps explain
why it has gone unnoticed. The overread is also sent to the device as
extra MODE SELECT payload, so it may not produce an obvious local failure.
Reduce cgc->buflen by the same amount as the buffer pointer adjustment so
the MODE SELECT transfer covers only the intended parameter list.
📍 영향받는 시스템
Linux Kernel (CDROM 드라이버 관련 버전)
⚔️ 공격 벡터
특수하게 조작된 블록 디스크립터를 반환하는 CD-ROM 장치를 연결하여 발생
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하십시오.
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 수정된 패치 버전 이후인지 확인하십시오.
💻 영향받는 소프트웨어
NVIDIA vGPU Guest Driver for Linux