🇰🇷 한글 설명
Linux 커널의 ALSA 드라이버 내 caiaq 모듈에서 프로브(probe) 과정이 실패할 경우 입력 장치가 제대로 해제되지 않는 취약점이 발견되었습니다. 이로 인해 해제된 메모리에 접근하는 Use-After-Free 오류가 발생하여 시스템 불안정성을 초래할 수 있습니다.
💡 쉬운 설명
장치를 연결하는 과정에서 오류가 발생했을 때, 사용하던 메모리를 제대로 정리하지 않고 남겨두는 문제입니다. 이 때문에 시스템이 이미 사라진 정보를 다시 읽으려다 오류를 일으키고 멈출 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
ALSA: caiaq: unregister the input device when probe fails
setup_card() registers the input device, whose name and phys point into
struct snd_usb_caiaqdev, and then goes on to snd_card_register() and
snd_usb_caiaq_control_init(). If either fails, snd_probe() calls
snd_card_free(), which frees the device state but leaves the input
device registered: card_free() only clears the pointer, and the input
device is unregistered from snd_disconnect() alone. Reading its "uevent"
attribute afterwards dereferences freed memory:
BUG: KASAN: slab-use-after-free in string+0x4a9/0x4f0
Read of size 1 at addr ffff8880208f5043 by task caiaq/4967
add_uevent_var+0x183/0x3a0
input_dev_uevent+0x162/0x900
dev_uevent+0x2f1/0x870
uevent_show+0x1ca/0x3a0
...
Unregister the input device on the probe error path, as
snd_disconnect() does. snd_usb_caiaq_input_disconnect() is a no-op when
no input device was registered.
Reproduced with a raw-gadget Audio Kontrol 1 and a temporary hack that
makes snd_usb_caiaq_control_init() fail.
📍 영향받는 시스템
Linux kernel (ALSA: caiaq driver 포함 버전)
⚔️ 공격 벡터
특정 USB 오디오 장치(Audio Kontrol 1 등)를 연결하여 드라이버 초기화 오류를 유도함으로써 발생
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 프로브 실패 시 입력 장치가 정상적으로 해제되도록 수정해야 합니다.
🔧 검증 코드
현재 실행 중인 커널 버전을 확인하여 해당 취약점이 해결된 최신 패치 버전인지 확인합니다.