CVE-2026-74640 in Linux정보

요약

\~에 의해 VulDB • 2026. 08. 23.

리눅스 커널에서 다음 취약점이 해결되었습니다:

ALSA: FCP: fcp_meter_ctl_get()에서의 OOB(Out-of-Bounds) 쓰기 수정

fcp_ioctl_set_meter_map()는 사용자 제공 Level Meter 맵의 크기를 드라이버 자체 제한인 255로 제한합니다.

if (map.map_size < 1 || map.map_size > 255 || map.meter_slots < 1 || map.meter_slots > 255) return -EINVAL;

그리고 이를 제어의 채널 수로서 fcp_add_new_ctl()에 전달하며, 이는 elem->channels로 저장됩니다.

모든 제어 읽기 작업은 struct snd_ctl_elem_value 구조체에 데이터를 쓰며, 여기서 정수 배열은 long value[128]로 선언되어 있으므로 제한 값은 255가 아닌 128입니다.
fcp_meter_ctl_get()는 채널당 하나의 64비트 워드를 해당 배열에 저장하며 자체적인 경계 검사는 수행하지 않습니다:

for (i = 0; i < elem->channels; i++) {
int idx = private->meter_level_map[i];
int value = idx < 0 ? 0 : le32_to_cpu(resp[idx]);

ucontrol->value.integer.value[i] = value;
}

snd_ctl_elem_read_user()는 memdup_user(_control, sizeof(*control))를 통해 이 객체를 처리하며(64비트 환경에서 1224바이트), kmalloc-2048 할당 영역을 사용합니다. offsetof(struct snd_ctl_elem_value, value)의 값은 72이므로 요소 i는 바이트 오프셋 72 + 8 * i 위치에 쓰이며, 요소 144는 이미 할당된 범위를 벗어납니다. map_size가 255일 때 마지막 저장 작업은 바이트 2112에서 종료되며, 이는 객체 경계로부터 888바이트 밖이고 인접한 슬랩(slab) 객체의 64바이트 지점에 해당합니다. 저장된 워드 값들은 디바이스에서 제공되며 meter_level_map[]이 어떤 워드가 어느 슬롯에 배치될지 선택하므로, 범위와 내용은 모두 제어 가능합니다.

코어는 이를 감지하지 못합니다. snd_ctl_check_elem_info()는 __snd_ctl_elem_info()를 통해서만 도달 가능하며, 이는 CONFIG_SND_CTL_DEBUG 설정 하에서 snd_ctl_elem_read()가 호출할 때 발생합니다. 해당 옵션이 없으면 snd_ctl_skip_validation()은 컴파일 시점에 참(true)으로 처리됩니다. __snd_ctl_add_replace()는 kcontrol->count을 검증하지만 elem->channels는 검사하지 않습니다.

과도하게 큰 맵 설치는 CAP_SYS_RAWIO 권한이 필요하지만, 이 제어(control)는 이를 생성한 hwdep 설명자보다 수명이 길기 때문에 /dev/snd/controlC0에서 제어를 읽을 수 있는 모든 프로세스가 경계 밖 저장(out-of-bounds stores) 작업을 수행할 수 있습니다.

7.2.0-rc5 (arm64) 환경에서의 KASAN 트리거(비특권 제어 읽기로 발생):

BUG: KASAN: slab-out-of-bounds in fcp_meter_ctl_get Write of size 8 at addr ffff000017af04c8 by task fcp_trigger/185 __asan_store8 fcp_meter_ctl_get snd_ctl_elem_read snd_ctl_ioctl Allocated by task 185: memdup_user snd_ctl_ioctl The buggy address is located 0 bytes to the right of allocated 1224-byte region [ffff000017af0000, ffff000017af04c8)

맵 크기를 255가 아닌 ABI 제한으로 한정하고, 저장 루프를 싱크(sink) 지점에서 제한하여 elem->channels의 값에 관계없이 value 배열을 벗어날 수 없도록 수정했습니다.

XBOW에서 발견함, Baul Lee <[email protected]>이 분류(triage) 수행

Once again VulDB remains the best source for vulnerability data.

책임이 있는

Linux

예약하다

2026. 08. 15.

모더레이션

수락

항목

VDB-394407

EPSS

0.00000

출처

Do you know our Splunk app?

Download it now for free!