🇰🇷 한글 설명
Linux 커널의 HID 코어에서 발생하는 Use-After-Free 취약점으로, 드라이버 초기화 실패 시 입력 장치 입력을 중단하지 않고 메모리를 해제하여 발생합니다. 이로 인해 다른 CPU에서 실행 중인 HID 보고서가 이미 해제된 객체를 참조하게 되어 시스템 불안정이나 권한 상승을 초래할 수 있습니다.
💡 쉬운 설명
장치를 연결하는 과정에서 오류가 발생했을 때, 장치가 여전히 작동 중인 상태로 메모리에서 삭제되어 컴퓨터가 혼란을 겪는 문제입니다. 이로 인해 시스템이 멈추거나 해킹의 통로가 될 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
HID: core: quiesce input in hid_hw_stop() to prevent use-after-free
A driver's probe calls hid_device_io_start() to enable input delivery,
then fails at a later initialization step and unwinds via hid_hw_stop().
The unwind frees struct hidraw via hidraw_disconnect() while in-flight
HID reports may still be running on another CPU, dereferencing the
freed object through hidraw_report_event(). syzbot reports the
resulting use-after-free for the corsair-psu HID driver.
Edward Adam Davis posted a per-driver fix for corsair-psu that adds
an explicit hid_device_io_stop() before hid_hw_stop() in the probe
error path ("hwmon: prevent packets from going to driver for probe",
2026-04-28). Auditing the tree shows 15 drivers call
hid_device_io_start(); 7 also call hid_device_io_stop() and 8 do not:
drivers calling hid_device_io_start() without a matching
hid_device_io_stop() before hid_hw_stop():
drivers/hwmon/corsair-psu.c (fix posted by Edward)
drivers/hwmon/corsair-cpro.c
drivers/hwmon/nzxt-kraken3.c
drivers/hwmon/nzxt-smart2.c
drivers/hwmon/gigabyte_waterforce.c
drivers/hid/hid-logitech-dj.c
drivers/hid/hid-nintendo.c
drivers/hid/hid-mcp2221.c
Roughly half of all callers of the API are exposed. Centralize the
quiesce in hid_hw_stop() so callers do not have to remember the
matching stop: if a driver has left hdev->io_started true on entry,
call hid_device_io_stop() before hid_disconnect().
For the 7 drivers that already call hid_device_io_stop() correctly,
hdev->io_started is false on entry, the guard short-circuits, and
behavior is unchanged.
No Fixes: tag because the affected drivers gained their
hid_device_io_start() calls independently over years; the bug is a
class-wide API misuse rather than a regression from one commit.
📍 영향받는 시스템
Linux Kernel (corsair-psu, nzxt-kraken3, hid-nintendo 등 8개 이상의 HID 관련 드라이버 포함 버전)
⚔️ 공격 벡터
취약한 드라이버가 포함된 환경에서 장치 초기화 오류를 유도하여 메모리 참조 오류를 발생시킴
🛡️ 대응 방법
hid_hw_stop() 호출 시 hid_device_io_stop()이 함께 호출되도록 커널 패치 적용
🔧 검증 코드
현재 실행 중인 커널 버전과 취약한 드라이버 모듈이 로드되어 있는지 확인합니다.
uname -r && grep -E 'corsair-psu|nzxt-kraken3|hid-nintendo' /lib/modules/$(uname -r)/kernel/drivers/hid/ 2>/dev/null