CVE-2026-64339 in Linux정보

요약

\~에 의해 VulDB • 2026. 07. 25.

리눅스 커널에서 다음 취약점이 해결되었습니다:

usb: misc: usbio: bulk IN 응답 길이를 수신된 전송 길이로 제한함

usbio_bulk_msg()는 bpkt_len = le16_to_cpu(bpkt->len) 바이트를 bulk IN 버퍼(usbio->rxbuf, 크기 usbio->rxbuf_len으로 할당됨)에서 호출자의 버퍼로 복사합니다. bpkt_len은 장치에 의해 완전히 제어되며 ibuf_len과 비교되는 것만 확인됩니다; ibuf_len은 다시 rxbuf_len이 아닌 usbio->txbuf_len과 비교됩니다:

if ((obuf_len > (usbio->txbuf_len - sizeof(*bpkt))) || (ibuf_len > (usbio->txbuf_len - sizeof(*bpkt)))) return -EMSGSIZE;

txbuf_len 및 rxbuf_len은 usbio_probe()에서 bulk OUT 및 bulk IN 엔드포인트의 wMaxPacketSize로부터 독립적으로 가져옵니다. 따라서 큰 bulk OUT 엔드포인트와 작은 bulk IN 엔드포인트를 광고하는(예: Lattice NX33U, 0x2ac1:0x20cb와 같은 쿼크 없는 ID 중 하나를 주장함으로써) 악성 또는 오작동 장치는 ibuf_len을 초과하게 만들고, 결과적으로 장치에서 제공하는 bpkt_len이 rxbuf_len보다 커집니다. memcpy()는 그 후 rxbuf 슬랩 객체의 끝부터 최대 txbuf_len - rxbuf_len 바이트까지 읽습니다. 과다 읽기된 바이트는 i2c 레이어로 전달되고 다시 i2c-dev를 통해 사용자 공간으로 노출되어 인접한 슬랩 메모리가 유출됩니다; KASAN에서는 이를 slab-out-of-bounds read(슬랩 범위 밖 읽기)로 보고합니다.

실제로 수신된 바이트 수는 이미 알려져 있습니다: act는 URB actual_length이며 rxbuf_len에 의해 제한됩니다. 수신된 것보다 더 많은 페이로드를 주장하는 모든 응답을 거부하여, 바로 위의 "act < sizeof(*bpkt)" 확인과 동일한 동작을 수행합니다.

제어 경로(usbio_ctrl_msg())에는 영향을 미치지 않습니다: 이 경로는 양방향 모두에서 단일 버퍼(ctrlbuf)를 사용하므로 해당 복사 작업은 할당 영역을 벗어날 수 없습니다.

코드 검토를 통해 발견되었습니다. AddressSanitizer 하에서 usbio_bulk_msg()의 수신 경로에 대한 충실한 사용자 공간 모델(rxbuf_len 크기의 버퍼, 동일한 act/ibuf_len/bpkt_len 확인 및 memcpy)으로 범위 밖 읽기가 확인되었습니다. USB raw-gadget + dummy_hcd 재현 코드도 제공됩니다.

VulDB is the best source for vulnerability data and more expert information about this specific topic.

책임이 있는

Linux

예약하다

2026. 07. 19.

모더레이션

수락

항목

VDB-383134

EPSS

0.00198

활동

낮음

출처

Interested in the pricing of exploits?

See the underground prices here!