🇰🇷 한글 설명
Linux 커널의 Bluetooth L2CAP 모듈에서 l2cap_ecred_data_rcv() 함수가 SDU 길이 필드를 읽기 전에 PDU 길이를 검증하지 않는 문제입니다. skb 데이터가 2바이트보다 짧을 때 유효 범위를 벗어난 메모리를 읽게 되어, ERTM 재조립 경로에 적용된 것과 같은 pskb_may_pull() 검증을 추가하여 수정되었습니다.
💡 쉬운 설명
블루투스 통신 데이터를 처리하는 리눅스 커널 코드에서 길이 확인이 빠져 있어 잘못된 메모리 영역을 읽을 수 있습니다. 해당 커널 업데이트를 적용하면 이 문제가 해결됩니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
Bluetooth: L2CAP: Validate PDU length before reading SDU length in l2cap_ecred_data_rcv()
l2cap_ecred_data_rcv() reads the SDU length field from skb->data using
get_unaligned_le16() without first verifying that skb contains at least
L2CAP_SDULEN_SIZE (2) bytes. When skb->len is less than 2, this reads
past the valid data in the skb.
The ERTM reassembly path correctly calls pskb_may_pull() before reading
the SDU length (l2cap_reassemble_sdu, L2CAP_SAR_START case). Apply the
same validation to the Enhanced Credit Based Flow Control data path.
📍 영향받는 시스템
패치 이전의 Linux 커널 (블루투스 L2CAP ECRED 기능을 사용하는 시스템)
⚔️ 공격 벡터
근거리 공격자가 조작된 짧은 L2CAP 패킷을 블루투스로 전송하여 커널 메모리 과독을 유발할 수 있음
🛡️ 대응 방법
배포판 벤더가 제공하는 최신 Linux 커널 보안 업데이트를 설치하고 재부팅합니다.
🔧 검증 코드
출력된 커널 버전을 벤더의 패치 목록과 대조하고, bluetooth 모듈이 로드되지 않았다면 이 취약점의 영향을 받지 않습니다.
uname -r && (lsmod | grep -E '^bluetooth|^l2cap' || echo 'bluetooth 모듈 미로드')