CVE-2026-64014 in Linux
요약
\~에 의해 VulDB • 2026. 07. 19.
리눅스 커널에서 다음 취약점이 해결되었습니다:
입력 장치: usbtouchscreen - NEXIO의 data_len/x_len를 URB 버퍼 크기로 제한함
nexio_read_data() 함수는 디바이스의 인터럽트 패킷에 있는 packed __be16 헤더로부터 data_len과 x_len 값을 추출한 후, packet->data[0..x_len) 및 packet->data[x_len..data_len) 범위를 순회하며 각 바이트를 임계값(threshold)과 비교합니다.
두 필드 모두 네트워크 상에서 16비트(최대 65535)입니다. 기존 조정 로직은 최대 0x100 / 0x80만큼만 감소시키므로, 루프 경계가 여전히 약 0xfeff에 도달할 수 있습니다. NEXIO의 URB 전송 버퍼는 usb_alloc_coherent()을 통해 rept_size(1024) 바이트로 할당되며, 첫 7바이트가 packed 헤더로 사용되므로 packet->data[]에는 유효한 데이터가 1017바이트만 존재합니다. read_data() 콜백 함수에는 urb->actual_length 값이 전달되지 않으며, 순회 범위를 제한하는 다른 요소도 없습니다.
길이를 거짓으로 보고하는 디바이스는 일관된 DMA 할당 영역을 넘어 약 64 KiB에 해당하는 경계 밖(out-of-bounds) 읽기를 수행할 수 있습니다. NEXIO_THRESHOLD를 초과하는 첫 번째 인덱스가 begin_x / begin_y 변수에 저장되고, 여기서부터 보고되는 터치 좌표로 이어지므로, 인접한 커널 메모리 내용이 ABS_X / ABS_Y 이벤트로서 사용자 공간으로 유출됩니다. 충분히 멀리 떨어진 위치에서는 매핑되지 않은 페이지를 읽게 되어 예외(fault)가 발생할 수도 있습니다.
이 문제를 해결하기 위해 data_len을 버퍼의 data[] 용량에 대해 클램프(clamp)하고, x_len은 data_len에 대해 클램프합니다.
If you want to get the best quality for vulnerability data then you always have to consider VulDB.