🇰🇷 한글 설명
Linux 커널의 Bluetooth ISO 스택에서 iso_sock_clear_timer 함수가 소켓 잠금(socket lock)을 획득하기 전에 실행되어 발생하는 취약점입니다. 이로 인해 경쟁 상태(Race Condition)가 발생하여 NULL 포인터 역참조 또는 Use-After-Free(UAF) 오류가 발생할 수 있습니다.
💡 쉬운 설명
블루투스 연결을 종료하는 과정에서 데이터가 삭제되는 속도와 타이머를 끄는 속도가 맞지 않아 발생하는 문제입니다. 이로 인해 시스템이 갑자기 멈추거나 보안 공격에 노출될 수 있습니다.
🇺🇸 원문 (English)
In the Linux kernel, the following vulnerability has been resolved:
Bluetooth: ISO: serialize iso_sock_clear_timer with socket lock
iso_sock_close() calls iso_sock_clear_timer() before acquiring
lock_sock(sk).
iso_sock_clear_timer() reads iso_pi(sk)->conn twice without the
socket lock held:
if (!iso_pi(sk)->conn)
return;
cancel_delayed_work(&iso_pi(sk)->conn->timeout_work);
Concurrently, iso_conn_del() executes under lock_sock(sk) and calls
iso_chan_del(), which sets iso_pi(sk)->conn to NULL and may result in
the final reference to the connection being dropped:
CPU0 CPU1
---- ----
iso_sock_clear_timer()
if (conn != NULL) ... lock_sock(sk)
iso_chan_del()
iso_pi(sk)->conn = NULL
cancel_delayed_work(conn) /* NULL deref or UAF */
iso_pi(sk)->conn is not stable across the unlock window, causing a
NULL pointer dereference or use-after-free.
Serialize iso_sock_clear_timer() with the socket lock by moving it
inside lock_sock()/release_sock(), matching the pattern used in
iso_conn_del() and all other call sites.
📍 영향받는 시스템
Linux Kernel (Bluetooth ISO 스택을 사용하는 버전)
⚔️ 공격 벡터
로컬 또는 원격에서 블루투스 ISO 연결을 조작하여 경쟁 상태를 유도함
🛡️ 대응 방법
Linux 커널을 최신 보안 패치가 적용된 버전으로 업데이트하여 iso_sock_clear_timer를 소켓 잠금 내부로 이동시켜야 함
🔧 검증 코드
현재 실행 중인 커널 버전을 확인하여 해당 취약점이 해결된 패치 버전인지 확인합니다.