🇰🇷 한글 설명
Linux 커널의 magicmouse 드라이버에서 magicmouse_raw_event() 함수가 DOUBLE_REPORT_ID 패킷을 처리할 때 재귀 호출의 깊이를 제한하지 않는 취약점이 발견되었습니다. 악의적인 HID 장치가 특수하게 조작된 패킷을 전송할 경우, 과도한 재귀 호출로 인해 커널 스택이 고갈되어 시스템 패닉이나 메모리 오염이 발생할 수 있습니다.
💡 쉬운 설명
마우스 같은 연결 장치가 가짜 신호를 계속 보내서 컴퓨터의 핵심 메모리 공간을 넘치게 만드는 공격입니다. 이로 인해 컴퓨터가 갑자기 멈추거나 시스템이 망가질 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
HID: magicmouse: prevent unbounded recursion in magicmouse_raw_event()
magicmouse_raw_event() handles DOUBLE_REPORT_ID (0xf7) packets, which pack
two touch reports into one, by splitting the packet and calling itself on
each half. The only guard against runaway recursion is a "size < 1" check,
which stops zero-sized calls but does not bound the recursion depth.
A malicious HID device that matches this driver can send a report starting
with DOUBLE_REPORT_ID and filled with the sequence [0xf7, 0x00]. Each level
consumes two bytes and recurses on the remainder, so an incoming report of
up to HID_MAX_BUFFER_SIZE (16 KiB) drives roughly 8000 nested calls. That
easily exhausts the 16 KiB kernel stack, leading to a stack overflow: a
panic with CONFIG_VMAP_STACK, or memory corruption without it.
A double report only ever wraps two normal reports; it is never
legitimately nested. Refuse to re-enter the DOUBLE_REPORT_ID case from a
recursive call so the recursion depth is bounded to two, while all valid
packets keep being parsed exactly as before.
📍 영향받는 시스템
Linux kernel (magicmouse 드라이버를 사용하는 시스템)
⚔️ 공격 벡터
취약한 드라이버를 사용하는 시스템에 조작된 HID(Human Interface Device) 패킷을 보내는 물리적 또는 논리적 연결 공격
🛡️ 대응 방법
magicmouse_raw_event() 함수 내에서 재귀 호출 시 DOUBLE_REPORT_ID 케이스를 재진입하지 않도록 커널 패치를 적용해야 합니다.
🔧 검증 코드
현재 실행 중인 커널 버전을 확인하여 해당 취약점이 수정된 최신 커널 패치가 적용되었는지 확인합니다.