🇰🇷 한글 설명
Linux 커널의 Bluetooth btmtksdio 드라이버에서 TX 경로 중 범위 외 DMA 읽기 취약점이 발견되었습니다. 데이터 전송 시 패딩을 처리하는 과정에서 초기화되지 않은 메모리나 버퍼 범위를 벗어난 영역을 읽어 SDIO 버스로 전송할 수 있는 문제입니다.
💡 쉬운 설명
블루투스 데이터를 보낼 때 실제 데이터보다 더 많은 양을 읽어버리는 오류가 있습니다. 이 과정에서 컴퓨터 메모리에 남아있던 민감한 정보가 외부로 유출될 위험이 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
Bluetooth: btmtksdio: Fix out-of-bounds DMA read in the TX path
btmtksdio_tx_packet() rounds the transfer size up to the SDIO block size
of 256 bytes, but hands the host controller the SKB buffer as is:
err = sdio_writesb(bdev->func, MTK_REG_CTDR, skb->data,
round_up(skb->len, MTK_SDIO_BLOCK_SIZE));
Only skb->len bytes hold packet data, so the controller reads up to 255
bytes of uninitialised memory and sends it to the device over the SDIO
bus. Depending on how much tailroom slack the SKB allocation happens to
carry, that read can also extend past the end of the buffer.
Compute the padded length up front, ensure the SKB has tailroom for it,
and zero-fill the padding with skb_put_zero(). skb->len then covers the
padding, so sdio_writesb() no longer needs to round up. byte_tx keeps
counting the header and the payload only, and the error path restores the
SKB so that the caller can requeue it.
Writing behind skb->tail is only safe because the driver owns the buffer,
which "Bluetooth: btmtksdio: Take exclusive ownership of the SKB before
TX" ensures.
📍 영향받는 시스템
Linux kernel (btmtksdio 드라이버를 사용하는 MTK Bluetooth 장치 탑재 시스템)
⚔️ 공격 벡터
로컬 공격자가 조작된 패킷을 통해 메모리 내의 민감한 정보를 유출하거나 비정상적인 데이터 전송을 유도할 수 있음
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 btmtksdio 드라이버의 패딩 처리 로직을 수정해야 함
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 수정된 패치 버전 이후인지 확인하십시오.