🇰🇷 한글 설명
Linux 커널의 Bluetooth RFCOMM 구성 요소에서 소켓 잠금 순서 역전으로 인한 데드락(Deadlock) 취약점이 발견되었습니다. 리스너 정리 과정에서 소켓 잠금과 뮤텍스 획득 순서가 어긋나 시스템이 멈출 수 있는 문제가 해결되었습니다.
💡 쉬운 설명
블루투스 연결을 관리하는 과정에서 컴퓨터 내부의 작업 순서가 꼬여 시스템이 응답하지 않는 상태가 될 수 있는 문제입니다. 이로 인해 블루투스 기능이 마비되거나 시스템 전체가 멈출 위험이 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
Bluetooth: RFCOMM: avoid socket lock inversion in listener cleanup
rfcomm_sock_cleanup_listen() closes unaccepted child sockets through
rfcomm_sock_close(), which takes the child socket lock before
rfcomm_dlc_close() acquires rfcomm_mutex. The RFCOMM worker takes these
locks in reverse order while handling connections and DLC state changes,
so lockdep reports a possible deadlock.
Close dequeued children without taking their socket lock. The accept queue
owns a reference to each child, and bt_accept_dequeue() locks the child
while unlinking it and clearing its parent pointer.
Dropping the child lock makes it important to prevent a concurrent
rfcomm_connect_ind() from enqueueing a new child after cleanup observes an
empty queue. Set a listening socket to BT_CLOSED while its lock is still
held, before dropping the lock and draining the queue. The state check in
rfcomm_connect_ind() then rejects new children once cleanup starts.
📍 영향받는 시스템
Linux Kernel (Bluetooth RFCOMM module 포함 버전)
⚔️ 공격 벡터
특수하게 조작된 블루투스 연결 요청을 통해 RFCOMM 리스너의 정리 프로세스를 유도하여 데드락 발생
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하십시오.
🔧 검증 코드
출력된 커널 버전이 해당 취약점이 해결된 패치 버전 이후인지 확인하십시오.