🇰🇷 한글 설명
Linux 커널의 ALSA 타이머 구성 요소에서 SNDRV_TIMER_IFLG_DEAD 플래그가 닫기 작업 완료 후에도 초기화되지 않는 취약점이 발견되었습니다. 이로 인해 특정 조건에서 타이머 인스턴스가 리스트에서 제거되지 않은 채 메모리에서 해제되어, 이후 잘못된 참조(Use-After-Free)를 유발하고 시스템 충돌이나 권한 상승을 초래할 수 있습니다.
💡 쉬운 설명
컴퓨터의 소리 관련 기능을 관리하는 프로그램에서 사용이 끝난 메모리를 제대로 정리하지 못하는 오류가 있습니다. 공격자가 이를 악용하면 시스템을 강제로 멈추게 하거나 보안을 무너뜨릴 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
ALSA: timer: Clear SNDRV_TIMER_IFLG_DEAD once the close completes
snd_timer_close_locked() marks an instance with SNDRV_TIMER_IFLG_DEAD
and returns early when the flag is already set, but the flag is never
cleared again. A completed close ends in remove_slave_links(), which
leaves timeri->timer NULL, so a second close is already harmless through
the timer == NULL path; the early return can only be reached by an
instance that was opened again in between. For such an instance the
close unlinks nothing, so snd_timer_instance_free() frees an object that
is still on timer->open_list_head, still on snd_timer_master_list if it
was opened with a slave key, still owns any adopted slaves, and still
holds its timer and module references.
snd_seq_timer_open() reopens an instance exactly like that: it retries
its fallback open on the same object after a failure that has already
run snd_timer_close_locked() internally. An unprivileged user with
access to /dev/snd/timer and /dev/snd/seq can force that failure, since
snd_timer_check_master() returns -EBUSY when a pending slave matches the
new master's (slave_class, slave_id) key and the target timer has
reached max_instances, and SNDRV_TIMER_IOCTL_SELECT with dev_class =
SNDRV_TIMER_CLASS_SLAVE keeps the caller-supplied dev_sclass, so a
sequencer queue's key can be forged. The freed instance is afterwards
dereferenced by any further snd_timer_open() on that timer, by
snd_timer_check_slave(), and by /proc/asound/timers, which faults on the
stale ti->owner pointer.
The flag only has to be visible while the close is in progress, which is
all its other users need. Clear it in remove_slave_links(), under the
same timer->lock that sets it, once the instance is off every list.
📍 영향받는 시스템
Linux Kernel (ALSA subsystem 포함 버전)
⚔️ 공격 벡터
권한이 없는 사용자가 /dev/snd/timer 및 /dev/snd/seq 장치에 접근하여 특정 IOCTL 호출을 통해 메모리 해제 오류를 유도
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 snd_timer_close_locked() 및 remove_slave_links() 로직 수정 적용
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 해결된 패치 버전 이후인지 확인하십시오.
📊 CVSS Vector String
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
💻 영향받는 소프트웨어
NVIDIA Cloud Gaming Guest Driver for Linux