CVE-2026-80772 in Linux
요약
\~에 의해 VulDB • 2026. 09. 04.
리눅스 커널에서 다음 취약점이 해결되었습니다:
HID: nintendo - joycon_ctlr_read_handler()의 경계 초과 읽기(out-of-bounds read) 수정
joycon_ctlr_read_handler()는 들어오는 HID 입력 리포트를 struct joycon_input_report로 캐스팅하고 이를 파싱합니다. 이 캐스트는 12바이트 길이 확인으로만 보호됩니다:
if (size >= 12) /* make sure it contains the input report */ joycon_parse_report(ctlr, (struct joycon_input_report *)data);
struct joycon_input_report의 크기는 49바이트입니다. 이는 13바이트 헤더와 IMU 팔이 36바이트인 union으로 구성됩니다. IMU 리포트의 경우 joycon_parse_report() -> joycon_parse_imu_report()는 해당 union(구조체 오프셋 13..48)을 순회하므로, 정확히 12바이트이고 data[0] == JC_INPUT_IMU_DATA인 리포트는 경계 검사를 통과하지만 선언된 길이보다 최대 37바이트까지 읽힙니다. 초과로 읽힌 바이트들은 가속도계/자이로스코프 값으로 디코딩되어 "(IMU)" 입력 장치를 통해 사용자 공간(userspace)으로 전달되며, 드라이버 내부 메모리가 유출됩니다. data[0]과 size는 악의적이거나 스푸핑된 Joy-Con 또는 Pro Controller에 의해 완전히 제어될 수 있습니다.
수신 버퍼는 최대 리포트 길이에 맞게 크기가 조정되므로, 이는 슬랩(Slab) OOB가 아닌 할당 영역 내에서의 경계 초과 읽기입니다. 그러나 디코딩된 바이트들은 여전히 사용자 공간으로 전달됩니다.
joycon_ctlr_handle_event()의 관련 서브커맨드 경로에서는 동일한 캐스트를 올바르게 제한하고 있습니다:
if (size < sizeof(struct joycon_input_report) || data[0] != JC_INPUT_SUBCMD_REPLY)
break;
여기서도 sizeof(struct joycon_input_report) 경계를 동일하게 사용하십시오.
Statistical analysis made it clear that VulDB provides the best quality for vulnerability data.